Tooltip für Menü

  • VB6

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Mad Andy.

    Tooltip für Menü

    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:

    Visual Basic-Quellcode

    1. Option Explicit
    2. Private Sub Form_Load()
    3. Call Init(Me.hwnd) 'Subclassing starten
    4. End Sub
    5. Private Sub Form_Unload(Cancel As Integer)
    6. Call Terminate(Me.hwnd) 'Subclassing beenden
    7. End Sub
    8. Private Sub Auswertung(irgendetwas) 'Soll aus modul1.bas aufgerufen werden
    9. stop
    10. debug.Print irgendetwas
    11. End Sub


    In Modul1.bas:

    Visual Basic-Quellcode

    1. Option Explicit
    2. 'Einsprung-Adresse der bestehenden Fensterprozedur
    3. Private Declare Function SetWindowLong Lib "user32" Alias _
    4. "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex _
    5. As Long, ByVal dwNewLong As Long) As Long
    6. 'Für ursprüngliche Fensterprozedur
    7. Private Declare Function CallWindowProc Lib "user32" Alias _
    8. "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal _
    9. hwnd As Long, ByVal Msg As Long, ByVal wParam As _
    10. Long, ByVal lParam As Long) As Long
    11. 'Windows-Standard Fenster-Prozedur
    12. Private Declare Function DefWindowProc Lib "user32" Alias _
    13. "DefWindowProcA" (ByVal hwnd As Long, ByVal wMsg As _
    14. Long, ByVal wParam As Long, ByVal lParam As Long) _
    15. As Long
    16. 'Konstanten
    17. Const GWL_WNDPROC = (-4&;)
    18. 'Für das Terminieren
    19. Const WM_DESTROY = &H2
    20. 'Menüs
    21. Const WM_MENUCOMMAND = &H126
    22. Const WM_MENUDRAG = &H123
    23. Const WM_MENUGETOBJECT = &H124
    24. Const WM_MENUSELECT = &H11F
    25. 'Adresse der ursprünglichen Fensterprozedur
    26. Dim PrevWndProc&
    27. 'Starten des Subclassings und speichern der alten Einsprungsadresse
    28. Public Sub Init(hwnd As Long)
    29. PrevWndProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf SubWndProc)
    30. End Sub
    31. 'Auflösen Subclassing und Wiederherstellen der
    32. 'Einsprungsadresse der ursprünglichen Fensterprozedur
    33. Public Sub Terminate(hwnd As Long)
    34. Call SetWindowLong(hwnd, GWL_WNDPROC, PrevWndProc)
    35. End Sub
    36. 'Eigene Fensterprozedur
    37. Private Function SubWndProc(ByVal hwnd As Long, ByVal Msg As Long, _
    38. ByVal wParam As Long, ByVal lParam As Long) _
    39. As Long
    40. select case msg
    41. Case WM_MENUCOMMAND
    42. Debug.Print "WM_MENUCOMMAND", Msg
    43. Case WM_MENUDRAG
    44. Debug.Print "WM_MENUDRAG", Msg
    45. Case WM_MENUGETOBJECT
    46. Debug.Print "WM_MENUGETOBJECT", Msg
    47. Case WM_MENUSELECT
    48. Debug.Print "WM_MENUSELECT", Msg, wParam, lParam
    49. End Select
    50. Call Form1.Auswertung(irgendetwas)
    51. 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“ ()