Autor Beitrag
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Do 27.03.03 02:55 
Ich versuche mich momentan an NonVCL. Wenn ich ehrlich sein soll, so ist es garnicht so schwer wie ich es gemeint habe. Allerdings steht man hier und da vor kleineren Problemen.

In diesem speziellen Programm erstelle ich ein Programm das kein Formular hat, jedoch ein Tray-Icon. Das Icon ist kein Problem. Allerdings kriege ich es mit der Message nicht hin. Was bei einem normalen Programm kein Problem ist, ist bei dem Formlosen Programm doch eins: Wie fange ich die Message ab? Im speziellen natürlich den Klick links und rechts mit dem Button auf das Tray-Icon.

_________________
Popov
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 27.03.03 08:10 
Lad dir mal mein NetSend-programm von meiner Seite runter. Oder die Tutorials, da müßte auch was mit dem TrayIcon drin sein.

Aber hier noch mal in groben Zügen, wie es geht:
Du hast deien Messageloop und deien Fensterprozedur. Jetzt definierst du dir eien Message:
ausblenden Quelltext
1:
WM_SHELLNOTIFY = WM_USER + 5;					

die du wie jede andere auch in deiner Fensterprozedur abfangen und behandlen kanns:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
    WM_SHELLNOTIFY:
    begin
      if wParam = IDI_TRAY then
        case lParam of
          WM_LBUTTONUP:
          begin
            SetWindowPos(hDlg, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or
              SWP_SHOWWINDOW);
            ShowWindow(hDlg, SW_RESTORE);
            Shell_NotifyIcon(NIM_DELETE, @nid);
          end;
          WM_RBUTTONDOWN:
          begin
            hMenu := LoadMenu(hInstance, MAKEINTRESOURCE(300));
            hSubMenu := GetSubMenu(hMenu, 0);
            GetCursorPos(pt);
            SetForeGroundWindow(hDlg);
            TrackPopupMenu(hSubMenu, TPM_LEFTALIGN or TPM_RIGHTBUTTON, pt.x,
              pt.y, 0, hDlg, NIL);
            DestroyMenu(hMenu);
            DestroyMenu(hSubMenu);
          end;
        end;
    end;

IDI_TRAY ist die ID deines Icons in der TNA, bekommst du im wParam geliefert und im lParam bekommst du gesagt, welcher Mousebutton gedrückt wurde und wie (einfacher Klick, doppelter Klick, gedrückt ode rlosgelassen).
Wie das mit dem Menü geht, siehst du im obigen Code. Das Menü steckt bei mir in diesem Fall in der Ressource. Du kannst es aber auch erst dynamisch zu dem Zeitpunkt erstellen, wen der Klick ausgeführt wird. Die Klicks auf ein Menüitem werden wie üblich in WM_COMMAND behandelt.

Ausführlicher findest du alles in den Tutorials auf meiner Seite.

Viel Spaß noch und mögest du dich ewig an deinem TrayIcon erfreuen. :wink:


Zuletzt bearbeitet von Luckie am Fr 28.03.03 14:49, insgesamt 1-mal bearbeitet
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 28.03.03 14:27 
Aus dem PSDK zu "Shell_NotifyIcon"
Zitat:
Remarks

The taskbar notification area is sometimes erroneously called the "tray."