Erstmal benötigen wir eine API-Funktion und ein paar Konstanten. Die Deklaration findet in einem Modul statt:
DefInt A-Z
Global Const NIM_ADD = &H0&
Global Const NIM_MODIFY = &H1
Global Const NIM_DELETE = &H2
Global Const NIF_MESSAGE = &H1
Global Const NIF_ICON = &H2
Global Const NIF_TIP = &H4
Global Const WM_MOUSEMOVE = &H200
Global NI As NOTIFYICONDATA
Type NOTIFYICONDATA
cbSize As Long
hWnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type
Declare Function Shell_NotifyIconA Lib "SHELL32" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
Doch damit das Icon auch wirklich angezeigt wird, muss erst noch die API-Funktion mit den richtigen Parametern
aufgerufen werden. Plazieren Sie den folgenden Codeteil am Besten im
Form_Load-Ereignis Ihrer Startform oder im
Sub Main. Erläuterungen zu den farblich markierten Elementen finden
Sie weiter unten:
NI.cbSize = Len(NI)
NI.hWnd = PictureBox.hWnd
NI.uID = 0
NI.uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
NI.uCallbackMessage = WM_MOUSEMOVE
NI.hIcon = PictureBox.DragIcon
NI.szTip = "Beispieltext" + Chr$(0)
Do
NI.uID = NI.uID + 1
Result = Shell_NotifyIconA(NIM_ADD, NI)
Loop While Result = 0
|
PictureBox =
|
Setzen Sie hier bitte den Namen einer PictureBox ein. Das DragIcon
dieser PictureBox enthält das Icon, das später im SysTray zu sehen sein wird. Dieses Symbol darf jedoch
nur 16 Farben haben. Desweiteren wird diese PictureBox als Eventhandler benutzt. Dazu mehr im nächsten
Abschnitt.
|
|
Beispieltext =
|
Setzen Sie für hier bitte den ToolTipText des Icons ein. Dieser erscheint bei längerem Warten mit dem
Mauscursor auf dem Icon.
|
Denken Sie daran, folgenden Code aufzurufen, wenn das Programm beendet wird (am Besten also im Ereignis
"Form_Unload"), da sonst das Icon im SysTray bleibt:
Call Shell_NotifyIconA(NIM_DELETE, NI)
Das Icon ist nun sichtbar, doch wie kann mit ihm interagieren? Dazu wäre eine Routine gut, die man schon von
anderen Steuerelementen wie dem CommandButton kennt. Kein Problem, fügen Sie einfach folgenden Code in
das Ereignis "PictureBox_MouseMove ein,
wobei "PictureBox" wieder durch den Namen der
verwendeten PictureBox zu ersetzen ist:
Dim Msg As Long
Msg = (X And &HFF) * &H100
Select Case Msg
Case 0 'Mausbewegung auf Icon
'...
Case &HF00 'Linksklick
'...
Case &H1E00 'linke Maustaste losgelassen
'...
Case &H2D00 'Doppelklick links
'...
Case &H3C00 'Rechtsklick
'...
Case &H4B00 'rechte Maustaste losgelassen
'...
Case &H5A00 'Doppelklick rechts
'...
End Select
Da hier vielleicht alles etwas kompliziert und schlecht nachvollziehbar erscheint, können Sie sich das Ganze auch
nochmal als Projekt für Vb6 herunterladen: