有没有一种方法可以在画布上绘制表单,然后使用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;


当然,您也可以在表单上放置标签,其字体颜色与透明颜色不同。

07-28 02:02