מאת זיו קרייזלמן (28/07/2007): השאלה: כיצד ניתן לזהות לחיצת על מקש במקלדת?
תשובה: על מנת לדעת שמקש כלשהו במקלדת נלחץ, נשתמש בפונקציית API בשם GetAsyncKeyState (לקריאה נוספת על פונקציות API לחצו כאן).
קודם כל יש להצהיר על הפונקציה GetAsyncKeyState באזור ההגדרות (באזור העליון של הקוד):
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
הפונקצייה GetAsyncKeyState בודקת האם המקש במצב 'לחוץ' או 'לא לחוץ',
לכן נצטרך לבדוק בכל רגע נתון האם המקש לחוץ בעזרת לולאה:
Do
If GetAsyncKeyState(key) < 0 Then
'The key was clicked
End If
DoEvents
Loop
הסבר הקוד:
1: פתיחת הלולאה.
2: שאילתת If - האם המקש (key) לחוץ?
3: כאן יש לכתוב את הפקודות שיתבצעו לאחר שהמקש נלחץ.
4: סגירת השאילתה.
5: קריאה לפונקציה DoEvents (להסבר על הפונקציה DoEvents לחצו כאן).
6: סגירה הלולאה.
במקום שבו כתוב "key" יש לרשום את קוד המקש (KeyCode).
למשל:
ערך ה-KeyCode של מקש "Enter" הוא 13 (ניתן לכתוב "vbKeyReturn" במקום 13, שזהו קבוע המייצג את הערך 13).
גם לכפתורי העכבר יש KeyCode משלהם.
הקבועים המייצגים את ה-KeyCode של כפתורי העכבר הם:
vbLeftButton - עבור הכפתור השמאלי.
vbRightButton - עבור הכפתור הימני.
vbMiddleButton - עבור הכפתור האמצעי.
להרחבה על זיהוי לחיצה על כפתור העכבר (הדומה מאוד לאופן זיהוי הלחיצה על מקש במקלדת) פנו לתשובה בשו"ת: כיצד ניתן לזהות לחיצה על כפתור בעכבר?
ניתן למצוא את ה-KeyCode של כל מקש על-ידי הקוד הבא:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
MsgBox KeyCode
End Sub
כאשר תלחצו על המקש בזמן ריצה, תקבלו הודעה בה כתוב ה-KeyCode של המקש.
הערה: יש לוודא כי ערך המאפיין (תכונה) KeyPreview של הטופס הוא True.
כדי לבדוק האם שני מקשים או יותר נלחצו, אין סיבה ליצור שתי לולאות, הקוד הבא יבדוק האם מקש כלשהו נלחץ, או key1 או key2:
Private Sub CheckKeys()
Do
If GetAsyncKeyState(key1) < 0 Then
'Key1 was clicked
End If
If GetAsyncKeyState(key2) < 0 Then
'Key2 was clicked
End If