Rubrik: Oberfläche · Menüs | VB-Versionen: VB5, VB6 | 04.12.07 |
Menü mit _KeyDown-Event Das Menü in VB besitzt leider kein _KeyDown() -Event. Hier nun ein Script mit dem Sie diesen "Fehler" ausbügeln können. | ||
Autor: Jürgen Fienau | Bewertung: | Views: 9.467 |
computer.net-berlin.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Das Menü in VB besitzt leider kein _KeyDown() -Event. Wie kann man aber nach Ausklappen eines Menüs bspw. die Shift-Taste auswerten?
Nachfolgend eine Möglichkeit, die zeigt, wie's geht.
Benötigt wird hierzu ein Timer-Control, in dem die Shift- und Strg-Tasten über die API-Funktion GetAsyncKeyState abgefragt und in einer globalen Variable gespeichert werden. Der Timer wird immer dann gestartet, wenn ein Menüeintrag in der obersten Ebene (Menüleiste) angeklickt wurde.
Option Explicit ' benötigte API-Deklarationen Private Declare Function GetAsyncKeyState Lib "user32.dll" ( _ ByVal nVirtKey As Long) As Integer Dim bShift As Boolean Dim bStrg As Boolean
Private Sub MenuFile_Click() ' Timer starten tmrHotKey.Interval = 10 tmrHotKey.Enabled = True End Sub
Private Sub tmrHotKey_Timer() bShift = False bStrg = False ' Prüfen, ob Shift-Taste gedrückt If GetAsyncKeyState(vbKeyShift) And 1 = 1 Then bShift = True ' Prüfen, ob Strg-Taste gedrückt If GetAsyncKeyState(vbKeyControl) And 1 = 1 Then bStrg = True End Sub
Im Click-Event des jeweiligen Eintrags des Menüs können Sie dann den Status der Shift und Strg-Taste abfragen:
Private Sub mnuFileNew_Click() ' Wichtig! Timer wieder ausschalten tmrHotKey.Enabled = False If bShift Then ... If bStrg Then ... ... End Sub