如何在TTrayIcon上绘图

时间:2017-01-16 12:12:08

标签: winapi lazarus

我试图在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(..)也没有任何反应。

现在我没有想法。任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:1)

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

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

TrayIcon1.Icon := MyNewIcon;