Hallo,
kann man in VB6 einen CommandButton mit einem Shortcut Key verknüpfen?
Also z.B mit der Pfeiltaste.
Danke.
Gruß
Gunter
Hallo,
kann man in VB6 einen CommandButton mit einem Shortcut Key verknüpfen?
Also z.B mit der Pfeiltaste.
Danke.
Gruß
Gunter
kann man in VB6 einen CommandButton mit einem Shortcut Key
verknüpfen?
Also z.B mit der Pfeiltaste.
Hi Gunter,
wie rum denn?
Bei Klick auf den CB wird simuliert, daß die pfeiltaste, welche? gedrückt wurde.
Oder durch Drücken einer Pfeiltaste soll das Anklicken des CB simuliert werden?
Hilft dir der Hinweis auf Onkey weiter?
Gruß
Reinhard
Hallo,
kann man in VB6 einen CommandButton mit einem Shortcut Key
verknüpfen?
Also z.B mit der Pfeiltaste.
Pfeiltaste wüsste ich nicht, aber ein Zeichen, das in der Beschriftung vorkommt.
Setze die Eigenschaft Caption mal auf ‚&Start‘. Dann wird Dir Start als Beschriftung gezeigt und ‚Strg & S‘ ist Dein ShortCut.
Gruß Rainer
Hi Reinhard,
durch drücken der Pfeiltaste (oder ALT-Pfeiltaste, oder CTRL-Pfeiltaste) soll das Anklicken des CB simuliert werden.
Gruß
Gunter
Hi Gunter,
wie rum denn?
Bei Klick auf den CB wird simuliert, daß die pfeiltaste,
welche? gedrückt wurde.
Oder durch Drücken einer Pfeiltaste soll das Anklicken des CB
simuliert werden?Hilft dir der Hinweis auf Onkey weiter?
Gruß
Reinhard
Hallo Rainer,
dein Tipp funktioniert schon mal ganz gut.
Jetzt suche ich bloß noch eine Lösung für die Pfeiltasten.
Gruß
Gunter
Pfeiltaste wüsste ich nicht, aber ein Zeichen, das in der
Beschriftung vorkommt.
Setze die Eigenschaft Caption mal auf ‚&Start‘. Dann wird Dir
Start als Beschriftung gezeigt und ‚Strg &
S‘ ist Dein ShortCut.Gruß Rainer
Hi Gunter,
dein Tipp funktioniert schon mal ganz gut.
Jetzt suche ich bloß noch eine Lösung für die Pfeiltasten.
das wüsste ich jetzt nicht, wie das gehen soll.
Wie wär’ mit selbst programmieren?
KeyPreview hilft bei den Cursortasten leider nicht, deshalb fällt mir nichts besseres als ein Timer und GetAsyncKeystate ein.
Eventuell hat ja noch Jemand eine bessere Idee.
Gruß Rainer
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Sub Command1\_Click()
Me.Caption = "OK"
End Sub
Private Sub Form\_Load()
Timer1.Interval = 100
Timer1.Enabled = True
End Sub
Private Sub Timer1\_Timer()
If GetAsyncKeyState(37) Then
Command1\_Click
End If
End Sub
Hi Reinhard,
durch drücken der Pfeiltaste (oder ALT-Pfeiltaste, oder
CTRL-Pfeiltaste) soll das Anklicken des CB simuliert werden.
Der Hinweis auf Onkey hilft mir leider nicht.
Gruß
Gunter
Hi Gunter,
wie rum denn?
Bei Klick auf den CB wird simuliert, daß die pfeiltaste,
welche? gedrückt wurde.
Oder durch Drücken einer Pfeiltaste soll das Anklicken des CB
simuliert werden?Hilft dir der Hinweis auf Onkey weiter?
Gruß
Reinhard
durch drücken der Pfeiltaste (oder ALT-Pfeiltaste, oder
CTRL-Pfeiltaste) soll das Anklicken des CB simuliert werden.
Moin Gunter,
getestet mit VB5.0, eine Form, drei CBs:
Option Explicit
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Public intKey As Integer
'
Private Sub Command1\_Click()
Dim Taste, Mldg As String
Taste = Array("links", "hoch", "rechts", "runter")
If intKey \> 0 Then
Mldg = "Command Button 1 wurde durch" & Chr(13) & Chr(13)
Mldg = Mldg & "Pfeitaste " & Taste(intKey - 37) & " ausgelöst"
MsgBox Mldg
End If
End Sub
'
Private Sub Command1\_GotFocus()
Call Pfeil
End Sub
'
Private Sub Command2\_GotFocus()
Call Pfeil
End Sub
'
Private Sub Command3\_GotFocus()
Call Pfeil
End Sub
'
Sub Pfeil()
Dim N As Byte
intKey = 0
For N = 37 To 40
If GetKeyState(N) 0 Then Call Form\_KeyDown(intKey, 0)
End Sub
'
Private Sub Form\_KeyDown(KeyCode As Integer, Shift As Integer)
If intKey \> 0 Then Command1\_Click
End Sub
'
Private Sub Form\_Load()
Me.KeyPreview = True
End Sub
Gruß
Reinhard
Hallo Reinhard,
bei mir funktioniert dein Vorschlag leider nicht.
Wenn ich eine Pfeiltaste betätige, wird die Sub Form_KeyDown
aufgerufen, die Variable intKey ist aber immer 0.
Die Sub Pfeil wird nur einmal ganz am Anfang aufgerufen.
Hast du mir noch einen Tipp?
Danke.
Gruß
Gunter
Hallo Reinhard,
Kommando zurück, es funktioniert doch - vielen Dank.
Gruß
Gunter
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Gunther,
mit sehr sehr vielen rumgetrickse laesst sich das realsieren. Wenn in der Tab Reihenfolge auf der Form keine 2 Buttons oder mehr hintereinander folgen so klappt es wenn du die Key Preview Eigenschaft der Form auf True setzt und dann das KeyDown Ereignis abfangen tust und dort schaust ob die Pfeil Taste gedrueckt wurde. Je nachdem löst du dann das Klick Ereignis des gewuenschten Buttons aus.
Aber ich würde dann schon eher die Variante mit der API vorziehen. Ist einfacher und schneller implementiert Der Aufruf der API in einen anderen Thread und schon hast du kein ausbremsen deines proggis mehr durch die Routine
MfG Alex
Hallo Alex,
ganz so glücklich bin ich mit der API Lösung noch nicht.
Zum einen wird irgendwann mal der Focus auf den MediaPlayer gesetzt und da führen die Pfeiltasten andere Funktionen aus. Zum anderen, wenn ich auf meinem ersten Button angekommen bin, springt der Focus nicht mehr weiter und damit wird auch die Sub Pfeil nicht mehr durchlaufen.
Ein drittes Problem ist, dass ich zu Anfang den Focus auf einem Listview habe und auch da funtionieren die Pfeiltasten ja anders.
Also wie kann ich verhindern, dass beim durchblättern der Focus nicht auf den Mediaplayer geht und wie erreiche ich, dass vom ersten Button wieder auf den letzten gesprungnen wird.
Danke.
Gruß
Gunter
Hallo, Gunter.
Hallo, Gunter.
Hier noch eine Variante mit den Tasten-Kombinationen „Strg+Pfeil“ und „Alt+Pfeil“:
Private Sub Command1\_Click()
Prozedur
End Sub
Private Sub Form\_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case Shift
Case 2, 4 'Strg, Alt
Select Case KeyCode
Case vbKeyLeft, vbKeyUp, vbKeyRight, vbKeyDown
Prozedur
End Select
End Select
End Sub
Private Sub Prozedur()
Beep
End Sub
KeyPreview der Form auf True setzen.
Vielleicht hilft Dir das ja weiter.
VG
Carsten
Hallo Carsten,
danke für die zusätzliche Info.
Gruß
Gunter
Hallo Gunter,
ganz so glücklich bin ich mit der API Lösung noch nicht.
Zum einen wird irgendwann mal der Focus auf den MediaPlayer
gesetzt und da führen die Pfeiltasten andere Funktionen aus.
Das war ja auch nur ein Funktionsbeispiel. Ich habe angenommen, daß Du das etwas umbaust und die Cursortasten in Kombination mit Strg, oder Alt prüfst. Dann haben die Cursortasten keine andere Funktion.
Zum anderen, wenn ich auf meinem ersten Button angekommen bin,
springt der Focus nicht mehr weiter und damit wird auch die
Sub Pfeil nicht mehr durchlaufen.
Für die Tabs ist ja auch die Tab-Taste da. Wenn es unbedingt die Corsortasten sein sollen, dann setze den Focus mit Setfocus selbst.
Ein drittes Problem ist, dass ich zu Anfang den Focus auf
einem Listview habe und auch da funtionieren die Pfeiltasten
ja anders.
Da kannst Du ja die normale Funktion verwenden und für z.B. Strg&Up eine Prozedur starten und den Focus selbst setzen.
Also wie kann ich verhindern, dass beim durchblättern der
Focus nicht auf den Mediaplayer geht
Strg&Cursor für die Sonderfunktion verwenden.
und wie erreiche ich,
dass vom ersten Button wieder auf den letzten gesprungnen
wird.
Entweder mit Setfocus oder die Tabstops richtig bearbeiten.
Für die Liste und andere Steuerelemente, die nicht erreicht werden sollen, könntest Du die Eigenschaft ‚Tabstop‘ auf False setzen. Die Steuerelemente sind dann immer noch aktiv, werden durch Tab aber nicht angesprungen.
Gruß Rainer
Hallo Rainer,
habe jetzt die Funktionen auf die Alt+Pfeil gelegt, dann funktioniert alles bestens ohne weitere Änderungen.
Vielen Dank.
Gruß
Gunter
Das war ja auch nur ein Funktionsbeispiel. Ich habe
angenommen, daß Du das etwas umbaust und die Cursortasten in
Kombination mit Strg, oder Alt prüfst. Dann haben die
Cursortasten keine andere Funktion.
habe jetzt die Funktionen auf die Alt+Pfeil gelegt, dann
funktioniert alles bestens ohne weitere Änderungen.
Hallo Gunter,
zeige mal bitte deinen endgültigen Code. Und zähl mal auf was du da alles an Steuerelementen in der Form hast damit ich den Code besser einschätzen kann.
Gruß
Reinhard
zeige mal bitte deinen endgültigen Code. Und zähl mal auf was
du da alles an Steuerelementen in der Form hast damit ich den
Code besser einschätzen kann.
Hallo Reinhard,
der Code sieht so aus:
Sub Pfeil()
Dim n As Byte
intKey = 0
For n = 37 To 40
If GetKeyState(n) 0 Then Call Form\_KeyDown(intKey, 0)
End Sub
Private Sub Form\_KeyDown(KeyCode As Integer, Shift As Integer)
If Shift = 4 Then
Shift = 0
If KeyCode = 37 Then
Command4\_Click
End If
If KeyCode = 39 Then
Command5\_Click
End If
End If
End Sub
Habe etwa 12 Commands, 4 Comboboxen, 2 Textboxen, einen Mediaplayer und eine Listview.
Warum das ganze funktioniert ist mir nicht klar, da die Sub Pfeil die Sub Form_KeyDown aufruft und ja im 2. Parameter (Shift) eine Null übergibt. Trotzdem ist der Parameter Shift beim betätigen der Alt Taste mit 4 belegt und wird dann richtig ausgewertet.
Gruß
Gunter
[MOD] - Pre-Tag eingefügt
Hallo Gunter.
Sub Pfeil()
Dim n As ByteintKey = 0
For n = 37 To 40
If GetKeyState(n) 0 Then Call Form_KeyDown(intKey, 0)
End SubPrivate Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If Shift = 4 Then
Shift = 0
If KeyCode = 37 Then
Command4_Click
End If
If KeyCode = 39 Then
Command5_Click
End If
End If
End Sub
Warum das ganze funktioniert ist mir nicht klar
Versuche das Ganze doch einfach 'mal ohne die Sub „Pfeil“ und ohne den API-Aufruf „GetKeyState“.
Das Ereignis „Form_KeyDown“ wird aufgerufen, sobald eine der Tasten heruntergedrückt und festgehalten wird (Shift, Ctrl, Alt, AltGr, Pfeil-Tasten, Bild-Tasten).
Normalerweise brauchst Du auch „Shift“ nicht auf Null (0) setzen, „Shift“ wird Null (0), sobald die Taste(n) wieder losgelassen wird.
VG
Carsten
Hallo Carsten,
dein Vorschlag funktioniert wunderbar.
Vielen Dank.
Gruß
Gunter
Versuche das Ganze doch einfach 'mal ohne die Sub „Pfeil“ und
ohne den API-Aufruf „GetKeyState“.Das Ereignis „Form_KeyDown“ wird aufgerufen, sobald eine der
Tasten heruntergedrückt und festgehalten wird (Shift, Ctrl,
Alt, AltGr, Pfeil-Tasten, Bild-Tasten).Normalerweise brauchst Du auch „Shift“ nicht auf Null (0)
setzen, „Shift“ wird Null (0), sobald die Taste(n) wieder
losgelassen wird.VG
Carsten