Aplikacja Tray systemowa Delphi

Spójrz na pasek zadań. Widzisz obszar, w którym znajduje się czas? Czy są tam jakieś inne ikony? Miejsce to nazywa się Taca systemowa Windows. Czy chcesz umieścić swój Delfy ikona aplikacji? Czy chcesz, aby ta ikona była animowana - czy odzwierciedlała stan Twojej aplikacji?

Byłoby to przydatne w przypadku programów, które pozostają uruchomione przez długi czas bez interakcji użytkownika (zadania w tle, które zwykle są uruchamiane na komputerze przez cały dzień).

Co możesz zrobić, to sprawić, aby aplikacje Delphi wyglądały tak, jakby minimalizowały się do zasobnika (zamiast do Pasek zadań, bezpośrednio do przycisku Win Start), umieszczając ikonę w zasobniku i jednocześnie tworząc formularz (y) niewidoczny.

Tray It

Na szczęście utworzenie aplikacji działającej w zasobniku systemowym jest dość łatwe - do wykonania zadania potrzebna jest tylko jedna funkcja (API), Shell_NotifyIcon.

Funkcja jest zdefiniowana w Jednostka ShellAPI i wymaga dwóch parametrów. Pierwszy to flaga wskazująca, czy ikona jest dodawana, modyfikowana lub usuwana, a drugi wskaźnik do struktury TNotifyIconData przechowującej informacje o ikonie. Obejmuje uchwyt ikony do wyświetlenia, tekst do pokazania jako podpowiedź, gdy wskaźnik myszy znajdzie się nad ikoną, uchwyt okna, które otrzyma wiadomości z ikoną i typ wiadomości, którą ikona wyśle ​​do tego okno.

instagram viewer

Po pierwsze, w sekcji prywatnej głównego formularza umieść wiersz:
TrayIconData: TNotifyIconData;

rodzaj
TMainForm = klasa(TForm)
procedura FormCreate (Sender: TObject);
prywatny
TrayIconData: TNotifyIconData;
{Prywatne deklaracje}publiczny{Oświadczenia publiczne}koniec;

Następnie w głównej formie OnCreate, zainicjuj strukturę danych TrayIconData i wywołaj funkcję Shell_NotifyIcon:

z TrayIconData dobegin
cbSize: = SizeOf (TrayIconData);
Wnd: = Uchwyt;
uID: = 0;
uFlagi: = NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage: = WM_ICONTRAY;
hIcon: = Aplikacja. Ikona. Uchwyt;
StrPCopy (szTip, aplikacja. Tytuł);
koniec;
Shell_NotifyIcon (NIM_ADD, @TrayIconData);

Parametr Wnd struktury TrayIconData wskazuje na okno, które odbiera powiadomienia związane z ikoną.

HIcon wskazuje na ikonę, którą chcemy dodać do tacy - w tym przypadku używana jest główna ikona aplikacji.
SzTip zawiera tekst podpowiedzi do wyświetlenia dla ikony - w naszym przypadku tytuł aplikacji. SzTip może zawierać do 64 znaków.
Parametr uFlags jest ustawiony tak, aby informował ikonę, aby przetwarzała komunikaty aplikacji, używała ikony aplikacji i jej wskazówki. The uCallbackMessage wskazuje na identyfikator komunikatu zdefiniowany przez aplikację. System używa określonego identyfikatora do powiadomień, które wysyła do okna identyfikowanego przez Wnd, ilekroć wystąpi zdarzenie myszy w prostokącie ograniczającym ikonę. Ten parametr jest ustawiony na stałą WM_ICONTRAY zdefiniowaną w sekcji interfejsu jednostki formularzy i wynosi: WM_USER + 1;

Dodaj ikonę do zasobnika, wywołując funkcję API Shell_NotifyIcon. Pierwszy parametr „NIM_ADD” dodaje ikonę do obszaru zasobnika. Pozostałe dwie możliwe wartości, NIM_DELETE i NIM_MODIFY, służą do usuwania lub modyfikowania ikony w zasobniku - zobaczymy, jak to będzie w dalszej części tego artykułu. Drugim parametrem, który wysyłamy do Shell_NotifyIcon, jest inicjowana struktura TrayIconData.

Weź jeden

Jeśli uruchomisz teraz swój projekt, zobaczysz ikonę w pobliżu zegara na tacy. Zwróć uwagę na trzy rzeczy.

1) Po pierwsze, nic się nie dzieje, gdy klikniesz (lub zrobisz cokolwiek innego za pomocą myszy) na ikonę umieszczoną w zasobniku - jeszcze nie stworzyliśmy procedury (procedury obsługi wiadomości).
2) Po drugie, na pasku zadań znajduje się przycisk (oczywiście nie chcemy go tam).
3) Po trzecie, po zamknięciu aplikacji ikona pozostaje w zasobniku.

Weź dwa

Rozwiążmy to wstecz. Aby usunąć ikonę z zasobnika po wyjściu z aplikacji, musisz ponownie wywołać Shell_NotifyIcon, ale z parametrem NIM_DELETE jako pierwszym parametrem. Robisz to w OnDestroy moduł obsługi zdarzeń dla formularza głównego.

procedura TMainForm. FormDestroy (Sender: TObject);
zaczynać
Shell_NotifyIcon (NIM_DELETE, @TrayIconData);
koniec;

Aby ukryć aplikację (przycisk aplikacji) na pasku zadań, użyjemy prostej sztuczki. W kodzie źródłowym Projekty dodaj następujący wiersz: Aplikacja. ShowMainForm: = False; przed złożeniem wniosku. CreateForm (TMainForm, MainForm); Np. Niech wygląda tak:

...
zaczynać
Podanie. Zainicjuj;
Podanie. ShowMainForm: = False;
Podanie. CreateForm (TMainForm, MainForm);
Podanie. Biegać;
koniec.

I wreszcie, aby ikona zasobnika reagowała na zdarzenia myszy, musimy utworzyć procedurę obsługi wiadomości. Po pierwsze, deklarujemy procedurę obsługi wiadomości w części publicznej deklaracji formularza: procedure TrayMessage (var Msg: TMessage); wiadomość WM_ICONTRAY; Po drugie, definicja tej procedury wygląda następująco:

procedura TMainForm. TrayMessage (var Msg: TMessage);
startcase Msg.lParam z
WM_LBUTTONDOWN:
zaczynać
ShowMessage („Kliknięty lewy przycisk
- POKAŻEMY Formularz! ');
Główna forma. Pokazać;
koniec;
WM_RBUTTONDOWN:
zaczynać
ShowMessage („Kliknięty prawym przyciskiem myszy
- ukrywajmy formularz! ');
Główna forma. Ukryć;
koniec;
koniec;
koniec;

Ta procedura ma na celu obsłużyć tylko naszą wiadomość, WM_ICONTRAY. Pobiera wartość LParam ze struktury komunikatu, która może dać nam stan myszy po aktywacji procedury. Dla uproszczenia będziemy obsługiwać tylko lewy przycisk myszy (WM_LBUTTONDOWN) i prawy przycisk myszy (WM_RBUTTONDOWN). Gdy lewy przycisk myszy znajduje się na ikonie, wyświetlamy główny formularz, a po naciśnięciu prawego przycisku, ukrywamy go. Oczywiście istnieją inne komunikaty wejściowe myszy, które można obsłużyć w procedurze, takie jak przycisk podnoszenia, przycisk podwójnego kliknięcia itp.

Otóż ​​to. Szybko i łatwo. Następnie zobaczysz, jak animować ikonę w zasobniku i jak sprawić, by ikona odzwierciedlała stan twojej aplikacji. Co więcej, zobaczysz, jak wyświetlić menu podręczne w pobliżu ikony.

instagram story viewer