PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Commandbuttons in VB mit Tastatur Tasten belegen ?



Roll_.
20.06.2005, 11:09
Guten Morgen roboternetz
Fahre im Moment mit meinem Roboter/Auto mit der Maus ... bzw den commandbuttons bei visual basic 6

würde aber gerne mit der tastatur beschleunigen
und wenn es noch möglich die lenkung mit der maus zu steuern

im vorhinein tausend dank

Johannes
21.06.2005, 12:43
Der einfachste Weg ist folgender. Du nimmst irgend eine leere Form und verwendest dort das KeyDown-Ereignis. Wenn die Form aktiviert ist und du Tasten drückst, wird dieses Ereignis aufgerufen. Dann musst du überprüfen, welche Taste gedrückt wurde und je nach dem bewegst du dann den Roboter. komplizierter wird es, wenn du auf der Form andere Steuerelemente hast. Dann erreicht das KeyDown-Ereignis nämlich nicht die Form sondern das Steuerelement, das gerade den Fokus hat.

Die Steuerung mit der Maus kannst du mit dem MouseMove-Ereignis machen.

Gruß
Johannes

Trabukh
21.06.2005, 15:53
Falls mehrere Steuerelemente da sind, kann man das auch so machen:

Private Sub Form_LostFocus()
Form1.SetFocus
End Sub

Gruß, Trabukh

commander7
21.06.2005, 21:21
hallo roll_.

ich habe dir ein Beispiel, wie ich das gemacht habe um auf meinem Form anstatt auf den Drucken Commandbutton zu klicken ich einfach nur noch Alt + D auf der Tastatur eingeben musste. Ich bin sicher du kannst das passend für dich umschreiben.



Private Sub cmdDrucken_KeyPress(KeyAscii As Integer)
Do
DoEvents
vbKeyAltD = Me.cmdDrucken
Loop
End Sub


gruss commander7

recycle
21.06.2005, 21:30
@Trabukh


Falls mehrere Steuerelemente da sind, kann man das auch so machen:

Code:Private Sub Form_LostFocus()
Form1.SetFocus
End Sub

Kann man die anderen Steuerelemente denn dann noch benutzen?
Ich stell es mir etwas schwierig vor, z.b. in eine Textfeld einen Text einzugeben oder einen Scrollbar zu bedienen, wenn dem Ding ständig der Focus entzogen wird. Sooo langsam ist VB doch bestimmt nicht ;-)

Trabukh
22.06.2005, 13:51
@recycle: Ja ne, ist klar! ;-) Aber das sollte ja auch nur die Idee dahinter aufzeigen, das ganze könnte man dann noch mehr oder weniger elegant mit einem Timer verknüpfen: Fokus verloren - Timer starten - Bei Ablauf von sagen wir mal einer 1/4 Sekunde wieder Fokus zurück... easy! :-D

Gruß, Trabukh

Johannes
22.06.2005, 13:56
Naja, die beste Methode ist es, jedes Key-Down-Ereignis aller Controls auf eine Prozedur umzulenken, falls es sich um die Steuertasten handelt. Dann kann man immernoch etwas in die Textbox schreiben oder mit der Tabtaste zwischen den Steuerelementen wechseln und diese dann mit Enter betätigen. Und dann ist es egal, wo der Fokus liegt, die Steuertasten werden immer erkannt.

Gruß
Johannes

lowlevel89
19.07.2006, 22:04
Es gäb noch ne mäglichkeit in der der Fokus egal ist:
Und zwar gibt es die Win32-API-Funktion "GetAsyncKeyState" mit der man jeder Zeit den Zustand einer Taste abfragen kann, man müsste dann im Hintergrund in einem extra Thread oder mit nem Timer immer die Tasten abfragen die in Frage kommen.
Deklaration:
Declare Function GetAsyncKeyState Lib "user32" ( _
ByVal vKey As Long) As Integer

Hier ein Beispiel: http://www.activevb.de/tipps/vb6tipps/tipp0070.html

mfG
LowLeveL

plusminus
20.07.2006, 00:16
Naja, die beste Methode ist es, jedes Key-Down-Ereignis aller Controls auf eine Prozedur umzulenken, falls es sich um die Steuertasten handelt.

Ob das die beste Lödung ist, wage ich zu bezweifeln...

Such dir doch ein Hotkey.ocx, das ein paar tasten überwacht, dann muss deine Form nichtmal aktiv/im vordergrudn sein.

Falls du solch ein OCX brauchst aber keines findest, sag grad, dann such ichs raus...

Sommer
04.08.2006, 16:40
Hi,

schau dir mal die Beispiele auf meiner Seite an.
Da habe ich auch die Steuerung über Maus und Tastatur.
Eine Weiterentwicklung des Programmes ist dadurch besser möglich.

Bye Ulli