有没有办法在画布上绘制然后使用updatelayeredwindow,因此不会显示表单而是文本,就像只显示文本的transculent表单一样?如果没有,那么有没有办法制作某种只有画布(opengl / directx)的变形形式?我想在所有窗口的顶部绘制命令。
答案 0 :(得分:7)
您可以将表单的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;
当然,您也可以在表格上放置一个标签,其字体颜色与透明颜色不同。