【问题标题】:Draw underneath the icons在图标下方绘制
【发布时间】:2011-12-20 07:49:54
【问题描述】:

我正在寻找一种使用 delphi 在 Windows 桌面图标下绘制 bmp / 文本的方法。

有什么想法吗?

【问题讨论】:

  • 替换背景图片?
  • 不改变壁纸我正在寻找一种动态的方式,女巫会让我快速改变它
  • 这听起来和你昨天问的问题一样。你到底想画什么?
  • 只是位图?您不想像昨天那样播放视频吗?
  • 您可以使用 Active Desktop (IActiveDesktop) 将网页/HTML 页面放在您的桌面上(您也可以在其中嵌入视频)。您可以通过显示属性 (xp) 中的Customize Desktop 对其进行测试

标签: delphi


【解决方案1】:

您需要使用桌面画布。诀窍在于,首先,onFormCreate,您在 delphi TCanvas 中捕获桌面画布句柄。

procedure TForm1.FormCreate(Sender: TObject);
begin
  FDesktopCanvas := TCanvas.Create;
  FDesktopCanvas.Handle := GetWindowDC(0);
end;

然后在FormDestroy 上销毁它。

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FDesktopCanvas.Free;
end;

在您的代码中,您只需将 FDesktopCanvas 用作常规画布,每次需要绘制时...

FDesktopCanvas.pen.Color := clWhite;
FDesktopCanvas.pen.Width := 5;
FDesktopCanvas.moveto(Screen.Width, 2);
FDesktopCanvas.lineto(2, 2);

...

var  aBitmap: TBitmap;
....
aBitmap := TBitmap.Create;
try
  aBitmap.LoadFromFile('logo100px.bmp');
  FDesktopCanvas.draw(Screen.Width-200, 100, aBitmap);
finally
  aBitmap.Free;
end;

...

FDesktopCanvas.Font.Name := 'Segoe';
FDesktopCanvas.Font.Size   := 36;
FDesktopCanvas.Font.Color  := clWhite;
FDesktopCanvas.Brush.Style := bsclear;
FDesktopCanvas.textout(Screen.Width-200, Screen.Height-100,FormatDateTime('hh:nn:ss',now));

【讨论】:

  • 也会在桌面图标上绘制
  • 哎呀,你是对的。一种可能的方法是在绘制之前将图标变为不可见。但这肯定会产生令人讨厌的闪烁效果。让我想想如果我找到其他解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多