Saturday, September 29, 2007

Dále následuje část deklarace:

.
.
.
procedure FormCreate(Sender: TObject);
procedure WndProc(var Message: TMessage); override;
procedure Showform1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
IconNotifyData : TNotifyIconData;
end;
.
.
.
Procedura WndProc "odchytává" pokus o minimalizaci aplikace a zařídí její minimalizaci do ikony hlavního panelu. Zároveň se stará o reakce na kliknutí myší na ikonu – buď aplikaci obnoví nebo zobrazí PopupMenu.
procedure TForm1.WndProc(var Message: TMessage);
var
p : TPoint;
begin
case Message.Msg of
WM_SYSCOMMAND:
case Message.WParam and $FFF0 of
SC_MINIMIZE:
begin
Hide;
Exit;
end;
SC_RESTORE: ;
end;
WM_USER + 1:
case Message.lParam of
WM_RBUTTONDOWN:
begin
GetCursorPos(p);
PopupMenu1.Popup(p.x, p.y);
end;
WM_LBUTTONDOWN:
begin
Show;
end;
end;
end;
inherited ;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
with IconNotifyData do
begin
hIcon := Application.Icon.Handle;
uCallbackMessage := WM_USER + 1;
cbSize := sizeof(IconNotifyData);
Wnd := Handle;
uID := 100;
uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
end;
StrPCopy(IconNotifyData.szTip, Application.Title);
Shell_NotifyIcon(NIM_ADD, @IconNotifyData);
Application.ShowMainForm := False;
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
end;

procedure TForm1.Showform1Click(Sender: TObject);
begin
Show;
SetForegroundWindow(Self.handle);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE, @IconNotifyData);
end;
Jako text bublinkové nápovědy u ikony je použit titulek aplikace – viz řádek StrPCopy(IconNotifyData... v události OnCreate hlavního formuláře, ale můžete jej pochopitelně libovolně měnit.
Jak vidíte, přidat si ikonku na hlavní panel není složité ani pracné. I když je tento příklad velmi jednoduchý a má sloužit spíše jako ukázka, základní funkce plní. Přidat některá další vylepšení však není problém. Pokud tedy místo použití hotových komponent dáváte přednost vlastní tvorbě, račte experimentovat.

Labels: