I recently discovered the TTrayIcon component in Delphi 2007. The code used is pretty straightforward.
procedure TForm1.FormCreate(Sender: TObject);
begin
AppTrayIcon := TTrayIcon.Create(nil);
AppTrayIcon.OnDblClick := OnAppTrayIconDblClick;
Application.OnMinimize := OnApplicationMinimize;
Application.OnRestore := OnApplicationRestore;
end;
procedure TForm1.OnApplicationRestore(Sender: TObject);
begin
AppTrayIcon.Visible := False;
ShowWindow(Application.Handle, SW_SHOW);
Application.BringToFront;
end;
procedure TForm1.OnApplicationMinimize(Sender: TObject);
begin
AppTrayIcon.Visible := True;
ShowWindow(Application.Handle, SW_HIDE);
end;
procedure TForm1.OnAppTrayIconDblClick(Sender: TObject);
begin
Application.Restore;
end;
Since there is no icon assigned, Delphi uses Application.Icon, which is that icon: http://artbyloveland.com/icon.ico This icon includes the following sizes: 64x64, 48x48, 32x32, 24x24 and 16x16.
Now, on my Windows Vista, everything fine.
On a non-themed Windows like Windows Server 2003, the result is all screwed-up:
EDIT: At first, I thought it was because of the alpha channel. So I tried to make a version of the ico file without the use of alpha channel. I also tried GreenFish Icon Editor as suggested by Ken; I selected every color depth and every size available. In both cases, the end result is better. However, there is a black stroke that doesn't exist at all in the ico file.
You state that you are not assigning the icon. In which case the component uses Application.Icon
. But that will typically be an icon that is the wrong size for the notification area.
For the notification area you need to use a square icon with size determined by the SM_CXSMICON
system metric. The best way to get that is to call LoadImage
which allows you to specify the icon size. Once you have loaded the icon into an HICON
you can just write this:
AppTrayIcon.Icon.Handle := IconHandle;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With