VBA 2002: Application.Wait vs. Application.OnTime

23/02/2008 - 17:04 von Peter Schleif | Report spam
Hallo.

Ich habe hier ein Verhalten in VBA, dass ich nicht verstehe und wollte
mal fragen, ob mir das jemand erklàren kann:

Drei Funktionen liefern den Status der Steuerungstasten. Jeweils eine
für Shift, Ctrl und Alt.

0 = keine gedrückt
1 = nur links
2 = nur rechts
3 = beide

Zum Überprüfen gibt es die Prozedur status(), welche die drei Status
im Debug-Fenster ausgibt. Damit genug Zeit ist, die Taste(n) zu
drücken, gibt es eine Verzögerung von zwei Sekunden mit
Application.Wait. Aber das funktioniert zumindest für Links-Alt
_nicht_ korrekt.

Shift Ctrl Alt
Soll: 0 0 1
Ist: 0 0 0

Wenn ich die Prozedur status() aber von einer anderen Prozedur
(status2) mit Application.OnTime (auch 2 sec Verzögerung) aufrufe,
dann klappt es.

Woran kann das wohl liegen?

Hier das komplette Modul. Vielen Dank im voraus.

Peter

Option Explicit


Private Declare Function GetKeyState Lib "user32" ( _
ByVal nVirtKey As Long) As Integer


Sub status()
Application.Wait Now + 2 / 86400
Debug.Print StatusShift, StatusCtrl, StatusAlt
End Sub


Sub status2()
Application.OnTime Now + 2 / 86400, "status"
End Sub


Public Function StatusShift() As Integer
StatusShift = IIf(GetKeyState(&HA0) And &HFF80, 1, 0) _
+ IIf(GetKeyState(&HA1) And &HFF80, 2, 0)
End Function


Public Function StatusCtrl() As Integer
StatusCtrl = IIf(GetKeyState(&HA2) And &HFF80, 1, 0) + _
IIf(GetKeyState(&HA3) And &HFF80, 2, 0)
End Function


Public Function StatusAlt() As Integer
StatusAlt = IIf(GetKeyState(&HA4) And &HFF80, 1, 0) + _
IIf(GetKeyState(&HA5) And &HFF80, 2, 0)
End Function
-
 

Lesen sie die antworten

#1 Dr. Eckehard Pfeifer
23/02/2008 - 17:18 | Warnen spam
Hallo, Peter, das Verhalten kann ich nicht erklàren. Aber ich habe
sowas mal mit GetAsyncKeyState statt GetKeyState umgesetzt. Vielleicht
ist das eine Alternative? Noch ein Tipp: Etwas übersichtlicher kann es
mit Verwendung von Konstanten werden, die findest Du in der
win32api.txt, falls die noch irgendwo rum liegt.

MfG EP
Entwicklung - Beratung - Training (www.dr-e-pfeifer.net)
XL-Funktionsverzeichnis (ISBN: 3860636898)
MS Office 2003 - Das Entwicklerbuch (ISBN 3-86063-688-X)

Ähnliche fragen