To może ja się pochwalę swoim modułem dla obsługi TrayIcon pisanym pod kątem WinAPI. Wzorowałem się na kodzie źrodłowym dawo temu znalezionym na torry.net - aktualnie nie mogę znaleźćidentycznego modułu. Najważniejsze to to, że działa pod czystym WinAPI i jeżeli chodzi obsługę komponentu w konstruktorze podajemy Handle głownego okna dialogowego pod WinAPi bądź MainForm.Handle pod VCL. Jeżeli chodzi obsługę zdarzeń to mogę doradzić użycie tymczasowego obiektu w stylu podanym we fragmencie kodu w poniższym przykładzie:
//...
type
TTempObject = class(TObject)
procedure RestoreFromTray(Seder : TObject);
end;
//...
var
WATI : TWATrayIcon;
TmpObj : TTempObject;
//...
procedure TTempObject.RestoreFromTray(Seder : TObject);
begin
WATI.Active := False;
ShowWindow(MaindialogHandle, SW_SHOW);
ShowWindow(MaindialogHandle, SW_RESTORE);
SetforeGroundWindow(MainDialogHandle);
end;
//...
WATI := TWATrayIcon.Create(MainDialogHandle);
with WATI do
begin
Icon := HMainIcon;
ToolTip := App_Title;
PopupMenu := TrayIconMenu;
OnDblClick := TmpObj.RestoreFromTray;
end;
Popupmenu to ma być uchwyt do HMenu tworzoenego przez funkcję CreatePopupMenu
. Natomiast sama TrayIcon ma obsługę komunikatu: TaskbarCreated
, co umożłiwia pokazanie ikonki po ewentualnym ubiciu procesu explorer.exe
i tym podobnych. Aktyność ikonki ustawiamy przez własnośc Active
. W razie dodatkowych pytań - piszcie. Jednak uważam, że źródło jest na tyle przejrzyste, że wszystko powinno być w miarę jasne :) Oczywiście więcej informacji z opisami poszegołnych funkcji na MSDnie. A i miałem nie poblikowac gotowców, ale przydatnych klas z ogsługą funkcji wyłącznie z zastosowaniem WinAPI bez "puchnięcią" exeków jest jak na lekarstwo, także dzielę się tym co sam napisałem na własne potrzeby już kiedyś.