如何在 TTrayIcon 上绘图

How to draw on a TTrayIcon

我试图在 TTrayIcon 的 canvas 上绘图,但没有成功。 我正在 windows 10.

上使用 Lazarus V1.6.2 进行编程

到目前为止我尝试的是:

procedure TForm1.TrayIcon1Paint(Sender: TObject);
var
  tmpcanvas: TCanvas;
begin
  tmpcanvas := TrayIcon1.Canvas;
  tmpcanvas := TrayIcon1.Icon.Canvas; // also not working
  tmpcanvas.Font.Size := 22;
  tmpcanvas.Brush.Color := RGBToColor(255,255,255);
  tmpcanvas.FillRect(1,1,200,200);
  tmpcanvas.Font.Color := RGBToColor(0,0,0);
  tmpcanvas.TextOut(1,1, 'TEST');
end;

我在 Form1.OnPaint 事件中用 Form1.Canvas 尝试了这段代码,它按预期工作

但是我在 TTrayIcon.Canvas 上绘画时运气不佳。 看起来,在 canvas 上绘制 TTrayIcon 与在其他 canvases 上绘制不同...

经过一些调试我意识到,TTrayIcon.OnPaint 事件从未被触发。但即使我强制执行 TrayIcon1Paint(..) 也没有任何反应。

现在我没主意了。非常感谢任何帮助。

Windows 通知图标不提供任何与 OnPaint 事件匹配的界面。我只能想象 OnPaint 事件旨在用于不同的平台。

On Windows 通知图标以 Windows 图标对象的形式提供给系统。如果你想改变通知图标的外观,你需要提供一个新的图标对象。我不熟悉 Windows API 函数的这个特殊包装器,但我希望您可以编写这样的代码来更新通知图标的外观:

TrayIcon1.Icon := MyNewIcon;