delphi4arab منتديات دلفي للعرب

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

if key = 'a' then showmessage('Hello team delphi4arab');

بتزبط لكن
لما أستبدل a بـ f1 وجربت VK_F1 وجربت #112
وأضغط F1 من الكيبورد مايظهر المسج
بإنتظار الحلول وشكرا مقدما ^^
وعليكم السلام
قم بضبط KeyPreview في الفورم إلى True
ولا تنسى البحث قبل الطرح أخي الفاضل
http://www.delphi4arab.net/forum/showpos...ostcount=4
السلام عليكم...

هناك نوعان أساسيان من المفاتيح:

1. المفاتيح التي تمثل الرموز الكتابية (الحروف و الأرقام و العلامات) و هذه تمثل جزءاً من رموز جدول شفرة آسكي (ASCII code table) الذي يحتوي أيضاً على بعض الرموز غير المرئية (رموز تحكم). رموز هذا الجدول تسمى المحارف (Characters) و تتم معالجتها في الحدث OnKeyPress و لهذا تجد البارامتر Key من النوع Char (أي Character).
2. المفاتيح الوظيفية: و التي تشمل مفاتيح الأسهم الأربعة و PageDown و PageUp و Delete و Insert و Home و End و Caps Lock و المفاتيح من F1 إلى F12 و غيرها. و هذه لا تمثل رموزاً في جدول آسكي، مع بعض الاستثناءات. هذه المفتايح تتم معالجتها في الحدث OnKeyDown أو OnKeyUp.

* ربما يقول أحد: و لكن لكل مفتاح قيمة أو رقم؟ نعم و لكن تلك الأرقام أو القيم تسمى "شفرات المسح" (Scan Codes) حيث لكل مفتاح في لوحة المفاتيح رقم بصرف النظر عن نوع أو مجموعة المفتاح. مثلاً المفتاح المكتوب عليه حرف "A" بالإنجليزية ("ش" بالعربية) يمكن أن يعطي 3 قيم مختلفة في الحدث OnKeyPress (إذا كانت اللغة إنجليزية فإن Key = a أو Key = A مع Shift أو Caps LockK، و إذا كانت اللغة عربية فإن Key = ش). و لكن من ناحية أخرى فإن لهذا المفتاح رقم ثابت (شفرة المسح - Scan Code) بصرف النظر عن الرمز الذي يمثله. لاحظ مثلاً في اختصارات أوامر القوائم نجد كثيراً أن الاختصار Ctrl+A يستعمل لتحديد كامل النص. هذا الاختصار يعمل دائماً بصرف النظر عما إذا كانت اللغة إنجليزية أو عربية.

* معظم المفاتيح الوظيفية - أو ربما كلها - ممثلة في Windows بأسماء ثوابت تبدأ بـ VK، مثلاً: VK_HOME للمفتاح Home و VK_F5 للمفتاح F5 و هكذا.

* هناك أحياناً توافق للفاتيح التي تمثل قيماً في جدول آسكي (الرموز الكتابية) بين قيمة المفتاح في جدول آسكي و قيمة شقرة المسح. مثلاً المفتاح Tab رقمه في جدول آسكي هو 9 و شفرة المسح له (VK_TAB) أيضاً هي 9. و هذا الأمر نجده أيضاً مع مفاتيح مثل Enter (حيث VK_RETURN = 13) و المفتاح Back Space (حيث VK_BACKSPACE = 8).

* نقطة أخيرة: لن تجد ثابتاً باسم VK_S مثلاً لتمثيل المفتاح S. فماذا لو أردت أن تعالج ضغط المفتاح S في الحدث OnKeyDown أو OnKeyUP؟ - استعمل الصيغة التالية:
كود :
if Key = Ord('S') then // ...
أي باستعمال الدالة Ord مع الشكل الكبير (Capital) للحرف.

*** إجابة سؤالك: للاستجابة لضغط المفتاح F1 استعمل الحدث OnKeyDown أو OnKeyUp:
كود :
if Key = VK_F1 then // ...

آسف على الإطالة، و لكن أردت التوضيح.

نرجو الاستفادة و السلام.
يعطيكم العافية على التفاعل Najy Ibraheem
انا هو الاسف تعبتك معي وافدتني كثير والمشكلة انحلت. شكراً.