有没有一种方法可以使用 Canvas 在表单上绘图,然后使用 updatelayeredwindow,这样表单就不会可见,但文本可见,就像只显示文本的半透明表单一样?如果没有,那么有没有办法只用 Canvas (opengl/directx)制作某种半透明形式?我想在所有窗口的顶部使用命令进行绘图。
最佳答案
您可以将表单的TransparentColor
属性设置为“True”,然后将表单颜色设置为与TransparentColorValue
相同的颜色,以及所有表单的工作区将是透明的。如果您使用的 Delphi 版本没有“TransparentColor[Value]”属性,您可以通过 API 调用实现相同的效果:
Color := clBlack;
SetWindowLong(Handle, GWL_EXSTYLE,
GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED );
SetLayeredWindowAttributes(Handle, 0, 255, LWA_COLORKEY);
将使表单客户区透明。您可以像平常一样在 Canvas 上绘画:
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Font.Color := clWhite;
Canvas.TextOut(0, 0, 'Text');
end;
当然,您也可以在表单上放置一个字体颜色与透明颜色不同的标签。
关于delphi - 使用普通 Canvas /文本输出更新LayeredWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8555484/