Tastaturabfrage in VB6

Hallo Leute,

kann mir jemand sagen, wie ich in VB6 eine einfache Tastenabfrage programmieren kann?

Genauer: In dem Form klickt man auf einen Startknopf. Dann wird ja die entsprechende Private Sub Command_1 aufgerufen. Darin befindet sich eine kleine mathematische Berechnung, die mit ´goto´ immer wieder neu aufgerufen wird. Diese Endlosschleife soll vom Benutzer abgebrochen werden können. Da der Computer aber auf keine Mausaktion reagiert, solange er sich in dieser Schleife befindet, soll aus der Schleife herausgesprungen werden, sobald der Benutzer eine Taste drückt. Schön wäre, wenn man eine vorher festgelegte Taste abfragen kann.

Ein paar Zeilen weiter oben hatte zwar jemand auch schon das Problem, allerdings im EXcel-VB, und die Idee mit DoEvents() funktioniert bei mir irgendwie nicht.

In QBasic z.B. geht das ja mit der Inkey$-Abfrage. Gibt´s so was ähnliches auch in VB und wie müßte ich das programmieren?

danke schon mal,

Gruß Thomas

Hallo Thomas,

kann mir jemand sagen, wie ich in VB6 eine einfache
Tastenabfrage programmieren kann?

Ja, aber. :wink:

Genauer: In dem Form klickt man auf einen Startknopf. Dann
wird ja die entsprechende Private Sub Command_1 aufgerufen.
Darin befindet sich eine kleine mathematische Berechnung, die
mit ´goto´ immer wieder neu aufgerufen wird. Diese
Endlosschleife soll vom Benutzer abgebrochen werden können.

So weit klar.

Da
der Computer aber auf keine Mausaktion reagiert, solange er
sich in dieser Schleife befindet, soll aus der Schleife
herausgesprungen werden, sobald der Benutzer eine Taste
drückt.

Irrtum! Wenn der Computer keine Befehle von der Maus akzeptiert, bemerkt er auch den Tastendruck nicht.

Schön wäre, wenn man eine vorher festgelegte Taste
abfragen kann.

Kein Proble, kommt später.

Ein paar Zeilen weiter oben hatte zwar jemand auch schon das
Problem, allerdings im EXcel-VB, und die Idee mit DoEvents()
funktioniert bei mir irgendwie nicht.

Hat mit Excel nichts zu tun, das geht mit ‚Do Events‘, Du mußt es nur in die Schleife schreiben. Ohne Do Events wird’s auch mit den Tasten nichts. :wink:

Nun noch einj Beispiel, wie Du mit der ‚Esc‘-Taste das Programm beenden kannst. …

Private Sub Command1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 27 Then
End
End If
End Sub

… KeyDown findest Du als Ereignis für Deinen Button.
Bedingungen, daß das klappt …

1.) In der schleife ist ein Do Events.
2.) Der Button hat den Focus!

Du knnst nur Ereignisse für ein Steuerelement verarbeiten, wenn dieses den Focus hat! Deshalb verbietet sich auch ‚enabled = false‘ …

Ich hoffe das hilft Dir. Wenn ich mich mal wieder unklar ausgedrückt habe, frage einfach.

cu Rainer

kann mir jemand sagen, wie ich in VB6 eine einfache
Tastenabfrage programmieren kann?

Diese
Endlosschleife soll vom Benutzer abgebrochen werden können. Da
der Computer aber auf keine Mausaktion reagiert, solange er
sich in dieser Schleife befindet, soll aus der Schleife
herausgesprungen werden, sobald der Benutzer eine Taste
drückt. Schön wäre, wenn man eine vorher festgelegte Taste
abfragen kann.

Hallo
Im vb geht alles über Ereignisse .
Das heißt , die Tastatur erzeugt Ereignisse in Deinem Code .
Es gibt aber auch im Windows Api Funktionen , welche ich jetzt nicht genau kenne , müßte ich nachschlagen . Da könnte es sowas wie „GetKeyState“ geben .
Aber anders kann man es auch …
Den Automanismus Deiner Routine kannst Du einschschränken :
Eine äußere Variable(public) wird abgefragt , ob sie geändert wurde ,
alle , zum Beispiel alle 20 Aufrufe Deiner Routine stoppt Deine Routine und wird über Timer wieder gestartet , so das „Zeitfenster“ zwischen den Unterprogrammaufrufen entstehen .
Es gibt bestimmt noch mehr Möglichkeiten .
Man könnte auch mal versuchen , den Focus auf einen Button zu stellen .

Es gibt auch die Möglichkeit , Ereignisse aufzurufen , ohne das Sie tatsächlich stattfinden , also Private sub Form_Keypress usw…
Vielleicht gibt das den Tastaturstatus her .

Ist das Problem eine abgestürzte Anwendung , welche sich durch die IDE nicht stoppen läßt , dann kannst Du vorher das Programm abspeichern und über den Task-Manager das VB beenden .
MfG

Hallo,

kann mir jemand sagen, wie ich in VB6 eine einfache
Tastenabfrage programmieren kann?

Schön wäre, wenn man eine vorher festgelegte Taste
abfragen kann.

ich habe bei Programmen, bei denen eine Berechnung abgebrochen werden sollte meist die Funktion GetAsyncKeyState verwendet (zwar meist in C++, aber das ändert ja nichts):

Declare Function GetAsyncKeyState Lib „user32.dll“ (ByVal vKey As Long) As Integer

Sollte eigentlich funktionieren, wenn man damit jeden zehnten Schleifendurchlauf überprüft, ob z.B. ESC gedrückt wird und dann eine Abbruchbeding einbaut.

Ein kleines Beispiel mit Code kann man auf http://www.vb-magazin.de/new/contentid-109.html nachlesen

mfg Carsten

vielen Dank…
für Eure Antworten. Ich war vielleicht verblüfft, als die Anweisung mit dem Command1_Keydown auf Anhieb funktioniert hat. Der Computer ist sofort aus der Schleife rausgesprungen. Toll.

vielen Dank an Euch

Thomas