Er der nogen der ved hvordan man kan få sit program til at lægge i tray??
Jeg brugre Delphi 6.
M.V.H. Kim
Jeg har tidligere besvaret et lignende spørgsmål så jeg iler med et kopi af min besvarelse. Du kan naturligvis - som foreslået - benytte en komponent. Men det er så simpel at gøre det selv så hvorfor ikke få en mere dybtgående viden om hvordan det gøres?
A) tilføj ShellAPI i din uses klausul.
B) Opret en selv defineret windows message identifikation , altså eksempelvis:
const WM_TRAYMessage = WM_USER + 1;
C) Tilføj den tilhørende message handle procedure, altså eksempelvis:
procedure TrayMessage(var message: TMessage); message WM_TRAYMESSAGE;
D) Opret en variabel af typen TNotifyIconData, her eksempelvis tray: TNotifyIcondata som variabel i klassen.
E) i formens OnCreate procedure initialiseres den variabel som blev oprettet under pkt D:
with Tray do
begin
cbSize := SizeOf(Tray);
Wnd := Handle;
uID := 0;
uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage:= WM_TRAYMessage;
hIcon := Application.Icon.Handle;
szTip := 'hint message';
end;
Shell_NotifyIcon(NIM_ADD, @Tray);
I den tilhørende destroy metode skal tilføje følgende kald:
Shell_NotifyIcon(NIM_DELETE, @Tray);
F) proceduren fra punkt C kunne se således ud:
procedure TMain.TrayMessage(var message: TMessage);
var
p: TPoint;
begin
case Message.LParam of
WM_RBUTTONDOWN:
begin
SetForegroundWindow(Handle);
GetCursorPos(P);
PopupMenu1.Popup(P.X, P.y);
PostMessage(Handle, WM_NULL, 0,0);
end;
end;
end;
Popup menuen kunne indeholde to menupunkter Vis og skjul. I den tilførende vis metode kaldes Show(), hvilket selvsagt medfører at dit skærmbillede vises, mens omvendt Skjul kalder hide();.
G) i projektfilen skrives eksempelvis:
Application.Initialize;
Application.ShowMainForm := false;
Application.CreateForm(TMain, Main);
Application.Run;
Herefter compiles- og køres programmet. Klik på ikonet i systray (hvilket gerne skulle vises din popup menu) og vælge vis. Dit skærmbilledet skulle herefter gerne dukke frem.
m.v.h.
Jørgen