我试图在TTrayIcon的画布上画画,但没有成功。 我在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上的绘画没有运气。 看来,在TTrayIcon的画布上绘画与其他画布上的绘画不同......
经过一些调查后我意识到,TTrayIcon.OnPaint事件永远不会被触发。但即使我强行执行TrayIcon1Paint(..)也没有任何反应。
现在我没有想法。任何帮助都非常感谢。
答案 0 :(得分:1)
Windows通知图标不提供与OnPaint
事件匹配的任何界面。我只能想象OnPaint
事件旨在用于不同的平台。
在Windows上,通知图标以Windows图标对象的形式提供给系统。如果要更改通知图标的外观,则需要提供新的图标对象。我不熟悉Windows API函数的这个特定包装,但我希望您可以编写这样的代码来更新通知图标的外观:
TrayIcon1.Icon := MyNewIcon;