مثير للإعجاب

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

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

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

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

أسفل ، أعلى ، الصحافة ، أسفل ، أعلى ، الصحافة ...

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

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

فيما يلي تلك الأحداث:

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

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

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

تشير المعلمة Sender إلى عنصر التحكم الذي تم استخدامه لاستدعاء الأسلوب.

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

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

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

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

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

OnKeyDown ، OnKeyUp

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

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

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

OnKeyPress

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

مفتاح والتغيير المعلمات

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

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

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

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

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

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

في ال عند_ضغط_مفتاح و OnKeyUp أحداث، مفتاح هي قيمة Word غير موقعة تمثل مفتاحًا ظاهريًا لـ Windows. من أجل الحصول على قيمة الحرف من مفتاح, نحن نستخدم ال مركز حقوق الانسان وظيفة. في ال OnKeyPress هدف، مفتاح هو فحم القيمة التي تمثل حرف ASCII.

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

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

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

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

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

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

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

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

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

شاهد الفيديو: طريقة إصلاح مشكلة ظهور اللغة العربية بشكل رموز غريبة (أبريل 2020).