فهم ومعالجة أحداث لوحة المفاتيح في دلفي

أحداث لوحة المفاتيح ، جنبًا إلى جنب مع أحداث الماوس، هي العناصر الأساسية لتفاعل المستخدم مع برنامجك.

فيما يلي معلومات عن ثلاثة أحداث تسمح لك بالتقاط ضربات مفاتيح المستخدم في تطبيق دلفي: OnKeyDown, OnKeyUp و OnKeyPress.

لأسفل ، لأعلى ، اضغط ، لأسفل ، لأعلى ، اضغط...

يمكن لتطبيقات دلفي استخدام طريقتين لتلقي الإدخال من لوحة المفاتيح. إذا كان على المستخدم كتابة شيء ما في تطبيق ما ، فإن أسهل طريقة لتلقي هذا الإدخال هي استخدام أحد عناصر التحكم التي تستجيب تلقائيًا لضغطات المفاتيح ، مثل تحرير.

ومع ذلك ، في أوقات أخرى ولأغراض أكثر عمومية ، يمكننا إنشاء إجراءات في نموذج يعالج ثلاثة أحداث معترف بها بواسطة النماذج وأي مكون يقبل إدخال لوحة المفاتيح. يمكننا كتابة معالجات الأحداث لهذه الأحداث للرد على أي مفتاح أو مجموعة مفاتيح قد يضغط عليها المستخدم في وقت التشغيل.

إليك هذه الأحداث:

OnKeyDown - يتم الاتصال عند الضغط على أي مفتاح على لوحة المفاتيح
OnKeyUp - يتم الاتصال عند تحرير أي مفتاح على لوحة المفاتيح
OnKeyPress - يتم استدعاؤه عند الضغط على مفتاح يتوافق مع حرف ASCII

معالجات لوحة المفاتيح

تحتوي جميع أحداث لوحة المفاتيح على واحدة

instagram viewer
معامل مشترك. ال مفتاح المعلمة هي المفتاح على لوحة المفاتيح وتستخدم لتمرير مرجع قيمة المفتاح المضغوط. ال تحول المعلمة (في OnKeyDown و OnKeyUp الإجراءات) تشير إلى ما إذا كانت مفاتيح Shift أو Alt أو Ctrl مدمجة مع ضغطة المفتاح.

ال معلمة المرسل يشير إلى عنصر التحكم الذي تم استخدامه لاستدعاء الطريقة.

إجراء TForm1.FormKeyDown (المرسل: TObject؛ فار المفتاح: Word؛ التحول: TShiftState) ؛... إجراء TForm1.FormKeyUp (المرسل: TObject؛ فار المفتاح: Word؛ التحول: TShiftState) ؛... إجراء TForm1.FormKeyPress (المرسل: TObject؛ فار المفتاح: Char) ؛ 

لا يتطلب الرد عندما يضغط المستخدم على مفاتيح الاختصار أو التسريع ، مثل تلك المتوفرة مع أوامر القائمة ، كتابة معالجات الأحداث.

ما هو التركيز؟

التركيز هو القدرة على تلقي مدخلات المستخدم من خلال الفأر أو لوحة المفاتيح. يمكن فقط للكائن الذي يوجد به التركيز استقبال حدث لوحة المفاتيح. أيضًا ، يمكن أن يكون مكون واحد فقط لكل نموذج نشطًا ، أو يكون به التركيز ، في تطبيق قيد التشغيل في أي وقت معين.

بعض المكونات ، مثل الصورة, TPaintBox, تبانيل و TLabel لا يمكن الحصول على التركيز. بشكل عام ، المكونات المستمدة من TGraphicControl غير قادرين على تلقي التركيز. بالإضافة إلى ذلك ، المكونات غير المرئية في وقت التشغيل (TTimer) لا يمكن الحصول على التركيز.

OnKeyDown ، OnKeyUp

ال OnKeyDown و OnKeyUp توفر الأحداث أدنى مستوى من استجابة لوحة المفاتيح. على حد سواء OnKeyDown و OnKeyUp يمكن للمعالجات الاستجابة لجميع مفاتيح لوحة المفاتيح ، بما في ذلك مفاتيح الوظائف والمفاتيح المدمجة مع تحول, Altو Ctrl مفاتيح.

أحداث لوحة المفاتيح ليست حصرية بشكل متبادل. عندما يضغط المستخدم على مفتاح ، كلاهما OnKeyDown و OnKeyPress يتم إنشاء الأحداث ، وعندما يقوم المستخدم بتحرير المفتاح ، OnKeyUp يتم إنشاء الحدث. عندما يضغط المستخدم على أحد المفاتيح التي OnKeyPress لا يكتشف فقط OnKeyDown يحدث الحدث ، يليه OnKeyUp حدث.

إذا ضغطت على مفتاح ، فإن OnKeyUp حدث بعد كل OnKeyDown و OnKeyPress وقعت الأحداث.

OnKeyPress

يُرجع OnKeyPress حرف ASCII مختلف لـ "g" و "G" ، لكن OnKeyDown و OnKeyUp لا تميز بين مفاتيح الأحرف الكبيرة والصغيرة.

معلمات المفتاح و Shift

منذ مفتاح يتم تمرير المعلمة حسب المرجع ، يمكن تغيير معالج الأحداث مفتاح بحيث يرى التطبيق مفتاحًا مختلفًا على أنه مشارك في الحدث. هذه طريقة للحد من أنواع الأحرف التي يمكن للمستخدم إدخالها ، مثل منع المستخدمين من كتابة مفاتيح ألفا.

إذا مفتاح في ['a'.. 'z'] + ['A'.. 'Z'] ثم المفتاح: = # 0 

يتحقق البيان أعلاه ما إذا كان مفتاح المعلمة في اتحاد مجموعتين: أحرف صغيرة (أي أ عبر ض) والأحرف الكبيرة (من الألف إلى الياء). إذا كان الأمر كذلك ، فإن البيان يعين قيمة الحرف صفر إلى مفتاح لمنع أي إدخال في تعديل المكون ، على سبيل المثال ، عندما يتلقى المفتاح المعدل.

بالنسبة للمفاتيح غير الأبجدية الرقمية ، WinAPI رموز المفاتيح الافتراضية يمكن استخدامها لتحديد الضغط على المفتاح. يحدد Windows ثوابت خاصة لكل مفتاح يمكن للمستخدم الضغط عليه. فمثلا، VK_RIGHT هو رمز المفتاح الظاهري لمفتاح السهم الأيمن.

للحصول على الحالة الرئيسية لبعض المفاتيح الخاصة مثل التبويب أو PageUp، يمكننا استخدام GetKeyState استدعاء Windows API. تحدد حالة المفتاح ما إذا كان المفتاح لأعلى أو لأسفل أو للتبديل (تشغيل أو إيقاف - بالتناوب في كل مرة يتم الضغط على المفتاح).

إذا HiWord (GetKeyState (vk_PageUp)) <> 0 ثم
ShowMessage ("PageUp - DOWN")
آخر
ShowMessage ('PageUp - UP') ؛ 

في ال OnKeyDown و OnKeyUp الأحداث ، مفتاح هي قيمة Word غير موقعة تمثل مفتاحًا ظاهريًا لـ Windows. من أجل الحصول على قيمة الحرف من مفتاح،نحن نستخدم ال Chr وظيفة. في ال OnKeyPress حدث، مفتاح هو تشار قيمة تمثل حرف ASCII.

على حد سواء OnKeyDown و OnKeyUp تستخدم الأحداث معلمة Shift من النوع TShiftState، مجموعة إشارات لتحديد حالة مفاتيح Alt و Ctrl و Shift عند الضغط على أحد المفاتيح.

على سبيل المثال ، عند الضغط على Ctrl + A ، يتم إنشاء الأحداث الرئيسية التالية:

 KeyDown (Ctrl) // ssCtrl
KeyDown (Ctrl + A) // ssCtrl + 'A'KeyPress (أ) KeyUp (Ctrl + A)

إعادة توجيه أحداث لوحة المفاتيح إلى النموذج

لتعويض ضغطات المفاتيح على مستوى النموذج بدلاً من تمريرها إلى مكونات النموذج ، قم بتعيين النموذج KeyPreview الخاصية إلى True (باستخدام مفتش الكائن). لا يزال المكون يرى الحدث ، ولكن لدى النموذج فرصة للتعامل معه أولاً - للسماح بالضغط على بعض المفاتيح أو عدم السماح بها ، على سبيل المثال.

افترض أن لديك العديد من مكونات التحرير في نموذج و شكل. OnKeyPress يشبه الإجراء:

إجراءTForm1.FormKeyPress (المرسل: TObject ؛ فار المفتاح: Char) ؛ ابدأإذا مفتاح في ['0'..'9'] ثم المفتاح: = # 0. النهاية; 

إذا كان أحد مكونات تحرير لديه التركيز، و ال KeyPreview خاصية النموذج خطأ ، لن يتم تنفيذ هذا الرمز. وبعبارة أخرى ، إذا ضغط المستخدم على 5 المفتاح 5 سيظهر الحرف في مكون التعديل المركّز.

ومع ذلك ، إذا كان KeyPreview تم تعيينه على True ، ثم النموذج OnKeyPress يتم تنفيذ الحدث قبل أن يرى مكون التحرير المفتاح الذي تم الضغط عليه. مرة أخرى ، إذا ضغط المستخدم على 5 المفتاح ، ثم يعين قيمة الحرف صفر إلى المفتاح لمنع الإدخال العددي في مكون التحرير.

instagram story viewer