UpdateLayeredWindow使用普通的canvas / textout

时间:2011-12-18 22:49:56

标签: delphi winapi opengl directx

有没有办法在画布上绘制然后使用updatelayeredwindow,因此不会显示表单而是文本,就像只显示文本的transculent表单一样?如果没有,那么有没有办法制作某种只有画布(opengl / directx)的变形形式?我想在所有窗口的顶部绘制命令。

1 个答案:

答案 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;

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