delphi - 使用普通 Canvas /文本输出更新LayeredWindow

标签 delphi winapi opengl directx

有没有一种方法可以使用 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/

相关文章:

algorithm - 如何同步两个字符串列表中的相等行

delphi - 使用Canvas.TextOut有什么含义?

windows - VB 6应用程序如何确定它是否在Windows 10上运行?

c++ - QT 找不到要使用的正确 OpenGL api

delphi - 如何检查链接到组件的属性不是 "lost"?

Delphi Listview onInsert 问题

Java 检测 Windows 上的不活动

winapi - 通过发送消息点击鼠标

opengl - 使用 freeglut 而不是 GLUT

c++ - 将 OpenGL 用于 2D