Hallo NG,
suche eine Möglichkeit, TooltipTexte für Menüs anzeigen zu lassen.
Die HelpContextID aus dem Menü-Editor wollte ich dafür nicht verwenden,
da mir die Erstellung einer Hilfe-Datei zu umständlich ist.
Menü-Beispiel in Form1:
Test1 (mnuTest1)
...Test1a (mnuTest1a)
...Test1b (mnuTest1b)
Test2 (mnuTest2)
...Test2a (mnuTest2a)
...Test2b (mnuTest2b)
Wenn man jetzt mit den Mauszeiger auf Test1, Test2 bewegt, wird der Menüpunkt
hervorgehoben, bzw. weitere Untermenüpunkte nach Anklicken markiert. Es müssen also Windows-Ereignisse (vllt. MouseOver ?) stattgefunden haben.
Jetzt wollte ich eben diese MouseOver-Ereignisse auswerten und einen entspr. Tooltip anzeigen,
wenn so ein Menüpunkt mit dem Mauszeiger berührt wird.
In diversen Beispielen wird zur Auswertung immer die Konstante WM_MENUSELECT herangezogen.
Das funktioniert jedoch nicht so wie gewünscht. Erst nach einem Mausklick auf Test1 bzw. Test2 in diesem Beispiel kommt ein Ergebnis mit WM_MENUSELECT.
In Form1:
In Modul1.bas:
Habe es noch mit den Konstanten WM_MENUCOMMAND, WM_MENUDRAG und
WM_MENUGETOBJECT versucht. Das klappt leider auch nicht.
Wäre dankbar für einen Hinweis. Welche Konstante(n) werden dafür benötigt.
gruss
Edit by Agent: VB-Tag eingefügt
suche eine Möglichkeit, TooltipTexte für Menüs anzeigen zu lassen.
Die HelpContextID aus dem Menü-Editor wollte ich dafür nicht verwenden,
da mir die Erstellung einer Hilfe-Datei zu umständlich ist.
Menü-Beispiel in Form1:
Test1 (mnuTest1)
...Test1a (mnuTest1a)
...Test1b (mnuTest1b)
Test2 (mnuTest2)
...Test2a (mnuTest2a)
...Test2b (mnuTest2b)
Wenn man jetzt mit den Mauszeiger auf Test1, Test2 bewegt, wird der Menüpunkt
hervorgehoben, bzw. weitere Untermenüpunkte nach Anklicken markiert. Es müssen also Windows-Ereignisse (vllt. MouseOver ?) stattgefunden haben.
Jetzt wollte ich eben diese MouseOver-Ereignisse auswerten und einen entspr. Tooltip anzeigen,
wenn so ein Menüpunkt mit dem Mauszeiger berührt wird.
In diversen Beispielen wird zur Auswertung immer die Konstante WM_MENUSELECT herangezogen.
Das funktioniert jedoch nicht so wie gewünscht. Erst nach einem Mausklick auf Test1 bzw. Test2 in diesem Beispiel kommt ein Ergebnis mit WM_MENUSELECT.
In Form1:
Visual Basic-Quellcode
In Modul1.bas:
Visual Basic-Quellcode
- Option Explicit
- 'Einsprung-Adresse der bestehenden Fensterprozedur
- Private Declare Function SetWindowLong Lib "user32" Alias _
- "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex _
- As Long, ByVal dwNewLong As Long) As Long
- 'Für ursprüngliche Fensterprozedur
- Private Declare Function CallWindowProc Lib "user32" Alias _
- "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal _
- hwnd As Long, ByVal Msg As Long, ByVal wParam As _
- Long, ByVal lParam As Long) As Long
- 'Windows-Standard Fenster-Prozedur
- Private Declare Function DefWindowProc Lib "user32" Alias _
- "DefWindowProcA" (ByVal hwnd As Long, ByVal wMsg As _
- Long, ByVal wParam As Long, ByVal lParam As Long) _
- As Long
- 'Konstanten
- Const GWL_WNDPROC = (-4&;)
- 'Für das Terminieren
- Const WM_DESTROY = &H2
- 'Menüs
- Const WM_MENUCOMMAND = &H126
- Const WM_MENUDRAG = &H123
- Const WM_MENUGETOBJECT = &H124
- Const WM_MENUSELECT = &H11F
- 'Adresse der ursprünglichen Fensterprozedur
- Dim PrevWndProc&
- 'Starten des Subclassings und speichern der alten Einsprungsadresse
- Public Sub Init(hwnd As Long)
- PrevWndProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf SubWndProc)
- End Sub
- 'Auflösen Subclassing und Wiederherstellen der
- 'Einsprungsadresse der ursprünglichen Fensterprozedur
- Public Sub Terminate(hwnd As Long)
- Call SetWindowLong(hwnd, GWL_WNDPROC, PrevWndProc)
- End Sub
- 'Eigene Fensterprozedur
- Private Function SubWndProc(ByVal hwnd As Long, ByVal Msg As Long, _
- ByVal wParam As Long, ByVal lParam As Long) _
- As Long
- select case msg
- Case WM_MENUCOMMAND
- Debug.Print "WM_MENUCOMMAND", Msg
- Case WM_MENUDRAG
- Debug.Print "WM_MENUDRAG", Msg
- Case WM_MENUGETOBJECT
- Debug.Print "WM_MENUGETOBJECT", Msg
- Case WM_MENUSELECT
- Debug.Print "WM_MENUSELECT", Msg, wParam, lParam
- End Select
- Call Form1.Auswertung(irgendetwas)
- End Sub
Habe es noch mit den Konstanten WM_MENUCOMMAND, WM_MENUDRAG und
WM_MENUGETOBJECT versucht. Das klappt leider auch nicht.
Wäre dankbar für einen Hinweis. Welche Konstante(n) werden dafür benötigt.
gruss
Edit by Agent: VB-Tag eingefügt
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Agent“ ()