Menü-Punkt: Shift oder ähnliches abfragen

DrMueller

Erfahrenes Mitglied
Hallo Leute,

ein Menüpunkt (Tools --> Menu-Editor) enthält ja nur einen Event und dieser gibt nur den Index mit an. Ist es irgendwie möglich dort mitzugeben, dass Shift, ALT oder ähnliches gedrückt wurde? Form Key_Down scheint hier leider nicht zu funktionieren.

Vielen Dank im Voraus


Müller Matthias
 
Wenn ich dich richtig verstanden habe, willst du wissen, ob man abfragen kann, wenn jemand im Menü auf "Datei - Speichern unter..." clickt aber gleichzeitig die SHIFT, ALT oder sonstwas gedrückt hält?

Eigentlich müsste Keydown feuern, wenn man clickt, da KeyCode bekanntlich auch vbKeyLButton sein kann.

Mach doch mal nen Test im KeyDown-Event der Form, und schau mal ob das feuert, wenn du im Menü was clickst

Visual Basic:
    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
        'make sure KeyPreview is True on Form Properties
        On Error Resume Next
        Select Case KeyCode
            Case vbKeyLbutton
                 debug.print "Linke Maustaste im KeyDown"
            Case Else

        End Select
    End Sub

Weil wenn das funktioniert, ist es ja relativ einfach per Boolean-Variable dann im Click-Event des Menüs das abzufragen.
 
Ich versteh das eher so, dass er erfahren will wenn jemand einfach so SHIFT drückt, ohne eine andere Taste.
 
Ich bin ein Trottel: Ich meinte natürlich MouseDown-Event der Form

Visual Basic:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
 On Error Resume Next
        Select Case Shift
            Case 1
                 Debug.Print "Shift im MouseDown"
            Case 2
                Debug.Print "STRG im MouseDown"
            Case 4
                Debug.Print "ALT im MouseDown"
                
            Case Else
 
        End Select

End Sub
 
Zuletzt bearbeitet:
Eine Idee ist mir jetzt doch gekommen: Frag doch im Menü-Click-Event GetAsyncKeyState ab.

Visual Basic:
Private Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Long

Private Const VK_SHIFT = &H10  ' Shift Taste
Private Const VK_CONTROL = &H11  ' STRG Taste
Private Const VK_MENU = &H12  ' Alt Taste

Private Sub Menu1_Click()

  Dim Retval As Long
 
  ' Überprüfen ob seit dem letzten Funktionsaufruf die Taste STRG gedrückt wurde
  Retval = GetAsyncKeyState(VK_CONTROL)
 
  ' Auswerten des Ergebnisses
  If CBool(Retval And &H8000) Then
    MsgBox "Die Taste ""STRG"" ist momentan gedrückt."
 
  ElseIf CBool(Retval And &H1) Then
    MsgBox "Die Taste ""STRG"" wurde seit dem letztem Check gedrückt."
 
  Else
    MsgBox "Die Taste ""STRG"" wurde seit der letzten Überprüfung nicht gedrückt." 
  End If
End Sub
 

Neue Beiträge

Zurück