Hallo,
Ik heb hier complete code met beschrijving voor het invoegen van een TrayIcon met een popupmenu. Dat is handig, voor bijvoorbeeld C/S of een virusscan of noem maar op. Bij mij werkt het prima tezamen met een registry procedure om het automatisch te laten opstarten. Hier is de code voor de TrayIcon:
Plaats vooraf ShellAPI in de Uses clause, en de variabele :''TrayIconData: TNotifyIconData' in de private van je Form.
En plaats de constante 'WM_ICONTRAY = WM_USER + 100;' in de interface van je Form.
De volgende code komt dan in de OnCreate van je Form.
Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
with TrayIconData do
begin
cbSize := SizeOf(TrayIconData);
Wnd := Handle;
uID := 0;
uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage := WM_ICONTRAY;
hIcon := Application.Icon.Handle;
StrPCopy(szTip, Application.Title);
end;
Shell_NotifyIcon(NIM_ADD, @TrayIconData);
end;
Volgende code is voor de OnDestroy van je Form:
Code:
procedure TForm1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE, @TrayIconData);
end;
We hebben nu een TrayIcon die verder niets doet dan alleen maar laten zien dat ie er is, niet handig dus moeten we hem muisklik available maken dat doen we met de volgende code, maar vooraf zet je een popupmenu component op je form.
Deze procedure in de private van je Form:
Code:
procedure TrayMessage(var Msg: TMessage); message WM_ICONTRAY;
En de volgende in je Implementation:
Code:
procedure TForm1.TrayMessage(var Msg: TMessage);
var
p: TPoint;
begin
case Msg.lParam of
WM_LBUTTONDBLCLK:
begin
WindowState := wsNormal;
SetForegroundWindow(handle);
Show;
[/COLOR]end;
WM_RBUTTONDOWN:
begin
SetForegroundWindow(Handle);
GetCursorPos(p);
PopUpMenu1.Popup(p.x, p.y);
[/COLOR]PostMessage(Handle, WM_NULL, 0, 0);
end;
end;
end;
Ok hij reageerd op klikken, maar je zal toch even je popupmenu moeten maken met bijv: Show, Hide en Close. Hier komt dan de code in de onclick van deze Items:
Code:
procedure TForm1.Show1Click(Sender: TObject);
begin
WindowState := wsNormal;
SetForegroundWindow(handle);
Show;
[/COLOR]end;
procedure TForm1.Hide1Click(Sender: TObject);
begin
Hide;
[/COLOR]end;
procedure TForm1.Close1Click(Sender: TObject);
begin
Close;
[/COLOR]end;
procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
Show1.Enabled := not Visible;
Hide1.Enabled := Visible;
end;
Dat laatste is listig, want hier kun je dus niet klikken wanneer je Form Showed op de ShowItem en andersom, dat is mooi. dacht ik zo, en handig voor meerdere doeleinden
Ok dat was ie dan, veel succes ermee
Bookmarks