有没有一种方法可以在画布上绘制表单,然后使用updatelayeredwindow,这样就看不到表单,而是看到文本,就像只显示文本的无形表单一样?如果没有,那么有没有办法仅使用画布(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);
将使窗体工作区透明。您可以像通常那样在画布上绘画:
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Font.Color := clWhite;
Canvas.TextOut(0, 0, 'Text');
end;
当然,您也可以在表单上放置标签,其字体颜色与透明颜色不同。