Jak dodać ikonę programu do Traya. ( ikonka obok zegara Windows )
Adam Boduch
Oto kod. Aha, dodaj do listy modułów słowo "ShellAPI
".
- Do sekcji
private
dodaj takie pozycje:
IconNotifyData: TNotifyIconData;
procedure WndProc(var Msg: TMessage); override;
- Teraz w
OnCreate
wpisz taki oto kod:
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;
// Kopiujemy tytuł aplikacji jako "dymek"
StrPCopy(IconNotifyData.szTip, Application.Title);
// Dodajemy ikonę do traya
Shell_NotifyIcon(NIM_ADD, @IconNotifyData);
Następnie uzupełnij procedurę "WndProc
" w taki oto sposób:
procedure TMainFrm.WndProc(var Msg: TMessage);
var
p: TPoint;
begin
{
Ta procedura służy do przechwytywania komunikatów po naciśnięciu przycisku w obrębie ikony.
}
//Jezeli nacisnieto prawym przyciskiem myszy
if (Msg.Msg=WM_USER+1) and (Msg.lParam = WM_RBUTTONDOWN) then
begin
//Nastepuje pobranie pozycji kursora myszki
GetCursorPos(p);
//i wyswietlenie menu
TrayMenu.Popup(p.x, p.y);
end;
//Jezeli nacisnieto lewy przycisk nastepuje wyswietlenie //formy
if Msg.LParam = WM_LBUTTONDOWN then
MainFrm.Show;
inherited;
end;
Dodatkowo przy zamykaniu programu możesz dopisać linie:
Shell_NotifyIcon(NIM_DELETE, @IconNotifyData);
Usuwa ona ikonę z Tray'a.
Zobacz też:
"Prościej jest użyć komponentu: CoolTrayIcon ;> "
Mi to nie działa ten komponent, gdy rozpakowuje package, wyświetla mi komunikat: "Cannot find resource file: <ścieżka/plik.res>. Recreated." OCO TU CHODZI?!?!?!?
Próbowałem znaleźć ten plik w internecie :/, ale ... znalazłem :? Dodałem to tego wszystkiego, wszystko OK, nie wyświetla komunikatu, ale nie moge kliknąć przycisku INSTALL, zablokowany.
POMOCY
w OnClose formy
Action := caNone;
Application.ShowMainForm := False;
ShowWindow(Handle, SW_HIDE);
albo z CoolTrayIcon:
Action := caNone;
CoolTrayIcon1.HideMainForm;
A jak zrobic aby po nacisniciu na krzyżyk(zamknij) program sie zamknoł a ikona w trayu była i jak na nią nacisne to mi sie włączy forma?
Wpisz przed GetCursorPos(p);
SetForegroundWindow(Handle) mi działa
Nie wiem jak pod innymi winami, ale mi pod XP i ten kod i CoolTrayIcon działają źle. W momencie kiedy wyskoczy PopupMenu po kliknieciu na ikonce w Trayu, to znika tylko jeśli kliknę na formę, lub wybiorę pozycję z tego PopupMenu.
W innych aplikacjach, "fabrycznych", po kliknięciu na pulpit, czy gdziekolwiek ten Popup znika.
Wie ktoś jak to zrobić?
a co tu moze nie dzialac?
mi ten kod nie dziala, to z kad moge wziasc ten CoolTrayIcon
znacznie prosciej i ladniej ;)
Prościej jest użyć komponentu: CoolTrayIcon ;>