אירועי מקלדת, יחד עם אירועי עכבר, הם המרכיבים העיקריים באינטראקציה של המשתמש עם התוכנית שלך.
להלן מידע על שלושה אירועים המאפשרים לך לתפוס את הקשות המשתמש של המשתמש ביישום דלפי: OnKeyDown, OnKeyUp ו OnKeyPress.
למטה, למעלה, לחץ, למטה, למעלה, לחץ...
יישומי דלפי יכולים להשתמש בשתי שיטות לקבלת הקלט מהמקלדת. אם משתמש צריך להקליד משהו ביישום, הדרך הקלה ביותר לקבל קלט זה היא להשתמש באחד מהפקדים המגיבים אוטומטית ללחיצות מקשים, כגון עריכה.
אך בתקופות אחרות ולמטרות כלליות יותר, אנו יכולים ליצור נהלים בצורה המטפלת בשלושה אירועים המוכרים על ידי טפסים ועל ידי כל רכיב שמקבל קלט מקלדת. אנו יכולים לכתוב מטפלים באירועים לאירועים אלה כדי לענות על כל מפתח או שילוב מקשים שהמשתמש עשוי ללחוץ עליו בזמן ריצה.
להלן האירועים האלה:
OnKeyDown - נקרא כאשר לוחצים על מקש כלשהו במקלדת
OnKeyUp - נקרא כאשר כל מקש במקלדת משתחרר
OnKeyPress - נקרא כאשר לוחצים על מקש המתאים לתו ASCII
מטפלים במקלדות
לכל אירועי המקלדת יש אחד פרמטר במשותף. ה מפתח פרמטר הוא המקש במקלדת ומשמש לעבור על ידי התייחסות לערך של המקש הנלחץ. ה הסטה פרמטר (בפרק OnKeyDown ו OnKeyUp נהלים) מציין אם מקש Shift, Alt או Ctrl משולבים עם הקשה.
ה פרמטר שולח מפנה לבקרה ששימשה לכינוי השיטה.
תהליך TForm1.FormKeyDown (שולח: TObject; var מפתח: מילה; Shift: TShiftState);... תהליך TForm1.FormKeyUp (שולח: TObject; var מפתח: מילה; Shift: TShiftState);... תהליך TForm1.FormKeyPress (שולח: TObject; var מפתח: char);
תגובה כאשר המשתמש לוחץ על מקשי קיצור או מאיץ, כמו אלה המסופקים עם פקודות תפריט, אינה דורשת כתיבת מטפלים באירועים.
מה זה פוקוס?
המיקוד הוא היכולת לקבל קלט משתמש דרך ה- עכבר או מקלדת. רק האובייקט שיש בו המיקוד יכול לקבל אירוע מקלדת. כמו כן, רק רכיב אחד בכל טופס יכול להיות פעיל, או להתמקד בו, ביישום פועל בכל זמן נתון.
ישנם רכיבים, כגון תמונה, TPaintBox, TPanel ו תווית לא יכול לקבל מיקוד. באופן כללי, רכיבים הנגזרים מ TGraphicControl אינם מסוגלים לקבל פוקוס. בנוסף, רכיבים בלתי נראים בזמן ריצה (טימר) לא יכול לקבל מיקוד.
OnKeyDown, OnKeyUp
ה OnKeyDown ו OnKeyUp אירועים מספקים את הרמה הנמוכה ביותר של תגובת המקלדת. שניהם OnKeyDown ו OnKeyUp מטפלים יכולים להגיב לכל מקשי המקלדת, כולל מקשי פונקציה ומפתחות בשילוב עם הסטה, אלט, ו Ctrl מפתחות.
אירועי המקלדת אינם בלעדיים זה מזה. כאשר המשתמש לוחץ על מקש, שניהם OnKeyDown ו OnKeyPress אירועים נוצרים, וכאשר המשתמש משחרר את המפתח, OnKeyUp נוצר אירוע. כאשר המשתמש לוחץ על אחד המקשים ש OnKeyPress לא מגלה, רק את OnKeyDown אירוע מתרחש, ואחריו OnKeyUp אירוע.
אם החזק את מקש, המקש OnKeyUp אירוע מתרחש אחרי כל OnKeyDown ו OnKeyPress אירועים התרחשו.
OnKeyPress
OnKeyPress מחזיר תו ASCII שונה עבור 'g' ו- 'G', אך OnKeyDown ו OnKeyUp אל תבדיל בין מקשי אלפא אותיות רישיות.
פרמטרים של מפתח ושינוי
מאז מפתח הפרמטר מועבר על ידי הפניה, מטפל האירועים יכול להשתנות מפתח כך שהיישום רואה במפתח אחר שהוא מעורב באירוע. זוהי דרך להגביל את סוגי התווים שהמשתמש יכול להזין, כמו למנוע ממשתמשים להקליד מקשי אלפא.
אם מפתח בתוך ['a'.. 'z'] + ['A'.. 'Z'] לאחר מכן מפתח: = # 0
ההצהרה לעיל בודקת אם מפתח הפרמטר הוא באיחוד של שתי קבוצות: אותיות קטנות (כלומר א דרך ז) ותווים גדולים (א-ת). אם כן, ההצהרה מקצה את ערך התו של אפס ל מפתח כדי למנוע קלט כלשהו ל- ערוך רכיב, למשל, כאשר הוא מקבל את המפתח ששונה.
עבור מפתחות שאינם אלפא-נומריים, WinAPI קודי מפתח וירטואליים ניתן להשתמש כדי לקבוע את המקש לחוץ. Windows מגדיר קבועים מיוחדים עבור כל מקש שהמשתמש יכול ללחוץ עליו. לדוגמה, VK_RIGHT הוא קוד המפתח הווירטואלי של מקש החץ הימני.
כדי לקבל את מצב המפתח של כמה מפתחות מיוחדים כמו לוח או גלול למעלה, אנו יכולים להשתמש ב- GetKeyState שיחת ממשק API של Windows. מצב המקש מציין אם המקש למעלה, למטה או מופעל (מופעל או כבוי - מתחלף בכל לחיצה על המקש).
אם HiWord (GetKeyState (vk_PageUp)) <> 0 לאחר מכן
ShowMessage ('PageUp - DOWN')
אחר
ShowMessage ('PageUp - UP');
בתוך ה OnKeyDown ו OnKeyUp אירועים, מפתח הוא ערך Word שלא חתום המייצג מפתח וירטואלי של Windows. על מנת לקבל את ערך התו מפתחאנו משתמשים ב- Chr פונקציה. בתוך ה OnKeyPress אירוע, מפתח הוא Char ערך המייצג תו ASCII.
שניהם OnKeyDown ו OnKeyUp אירועים משתמשים בפרמטר Shift, מהסוג TShiftState, ערכת דגלים לקביעת מצב מקשי Alt, Ctrl ו- Shift כאשר מקש לחיצה על מקש.
לדוגמה, כשאתה לוחץ על Ctrl + A, נוצרים אירועי המפתח הבאים:
KeyDown (Ctrl) // ssCtrl
KeyDown (Ctrl + A) // ssCtrl + 'A'KeyPress (A) KeyUp (Ctrl + A)
הפניית אירועי מקלדת לטופס
כדי ללכוד הקשות ברמת הטופס במקום להעביר אותם לרכיבי הטופס, קבע את הטפסים תצוגה מקדימה של מפתח נכס ל- True (באמצעות מפקח עצמים). הרכיב עדיין רואה את האירוע, אך לטופס יש הזדמנות לטפל בו תחילה - לאפשר או לא לאפשר לחיצה על מקשים, למשל.
נניח שיש לך כמה רכיבי עריכה בטופס וב- טופס. OnKeyPress הנוהל נראה כמו:
תהליךTForm1.FormKeyPress (שולח: TObject; var מפתח: char); התחלאם מפתח בתוך ['0'..'9'] לאחר מכן מפתח: = # 0. סוף;
אם אחד ממרכיבי העריכה כולל את ה- פוקוס, וה תצוגה מקדימה של מפתח המאפיין של טופס שגוי, קוד זה לא יבוצע. במילים אחרות, אם המשתמש לוחץ על 5 מפתח, 5 תו יופיע ברכיב העריכה הממוקד.
עם זאת, אם תצוגה מקדימה של מפתח מוגדר כ- True, ואז הטופס OnKeyPress האירוע מבוצע לפני שמרכיב העריכה רואה את המקש שנלחץ עליו. שוב, אם המשתמש לחץ על 5 ואז הוא מקצה את ערך התו של אפס למפתח כדי למנוע קלט מספרי לרכיב עריכה.