Winapi 如何在tRayIcon上绘制

Winapi 如何在tRayIcon上绘制,winapi,lazarus,Winapi,Lazarus,我试图在一个TTrayIcon的画布上画画,但没有成功。 我在Windows10上用LazarusV1.6.2编程 到目前为止,我尝试的是: procedure TForm1.TrayIcon1Paint(Sender: TObject); var tmpcanvas: TCanvas; begin tmpcanvas := TrayIcon1.Canvas; tmpcanvas := TrayIcon1.Icon.Canvas; // also not working tmpc

我试图在一个TTrayIcon的画布上画画,但没有成功。 我在Windows10上用LazarusV1.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.Canvas在事件Form1.OnPaint中尝试了这段代码,它在那里按预期工作

但是我在TTrayIcon.Canvas上没有绘画的运气。 看起来,在TTrayIcon的画布上绘制与在其他画布上绘制不同

经过一些调试后,我意识到TTrayIcon.OnPaint事件从未触发。但即使我强制执行TrayiCon1绘制。。什么也没发生


现在我没有主意了。非常感谢您的帮助。

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

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

TrayIcon1.Icon := MyNewIcon;

系统不是这样工作的。如果需要不同的图标,则需要提供不同的图标。基础系统不基于绘制消息。我想在systray上显示动态信息。我认为它应该可以工作,因为windows时间也是动态的windows时间不是通知图标,而是由shell绘制的。它可以为所欲为。你必须适应API。这需要图标。通知图标不是为丰富的动态UI裁剪的。@David Heffernan:Thx,谢谢你的提示。我通过动态创建一个图标并将其分配给TrayIcon1.Icon解决了这个问题。@DavidHeffernan因为是你的提示让我走上了正确的方向,所以我认为你应该写一个简短的答案。