@איש-פלוני כן, אפשרי בהחלט.
אתה צריך להאזין לאירוע הנקרא "ירידת מקש".
תוסיף את הקוד הבא לטופס:
Private Sub Form_Load()
'Catch keystroke before system does it
Me.KeyPreview = True
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If (Shift = 2 And KeyCode = 68) Then 'Ctrl+D
MsgBox "Hey, You have pressed Ctrl+D!"
'Do not pass over the keystroke to system
KeyCode = 0
Shift = 0
End If
End Sub
הסבר:
- באירוע טעינה של הטופס אני מגדיר את המאפיין
KeyPreviewלהיותTrue, זה גורם לכך שהטופס יוכל "לתפוס" את ההקשה לפני שמערכת ההפעלה תעשה זאת. זה שימושי במקרה שצירוף המקשים שאני רוצה לטפל בו כבר משוייך לאירוע קיים ע"י מערכת ההפעלה, למשלAlt+F4לסגירת הטופס.
קוד זה אופציונאלי. אם הוא יושמט, אז מערכת ההפעלה תטפל בהקשה לפי ראות עיניה. למשל אם לחצת F1 - תיפתח העזרה, וכו'. - באירוע ירידת מקש של הטופס, אני בודק את שני הערכים של
KeyCodeו-Shift. הואיל ובמקרה שלנו אנו מבקשים צירוף של מקשיםCtrl+Dהערכים המתאימים הםShift = 2 And KeyCode = 68. - בסיום הטיפול באירוע, אני מאפס את שני הפרמטרים הללו. גם הקוד הזה הוא אופציונאלי, אם הוא יושמט, מערכת ההפעלה תתיחס אף היא להקשה שלנו ביציאה מהפרוצדורה.
מייקרוסופט פירסמו רשימה של קודים קבועים מראש למקשים נפוצים כאן.