تطورت لغات الكمبيوتر من لغة الآلة إلى اللغة عالية المستوى، ومن المعقدة إلى البسيطة (في الواقع ليست بسيطة)، وهو ما يعكس تطور علوم وتكنولوجيا الكمبيوتر. كلما كانت لغة الكمبيوتر أكثر تقدمًا، كلما كانت أكثر تجريدًا وإنسانية، وأقل ارتباطًا بالأجهزة ذات المستوى المنخفض، وأكثر ملاءمة للاستخدام. ولكن مهما كانت لغة الكمبيوتر متقدمة، فهي عبارة عن تجريد لطبقة نظام التشغيل، لذلك يمكننا دائمًا معرفة القواعد الكامنة وراء فهم اللغات عالية المستوى، أي: الرموز المكتوبة باللغات عالية المستوى هي فقط لوصف احتياجات الناس، ويجب أن تمر هذه الرموز على "مترجم" يترجمها إلى شكل لغة الآلة حتى يتمكن الكمبيوتر من التعرف عليها وتنفيذها. هناك طريقتان للترجمة: إحداهما هي طريقة الترجمة، حيث يتم إنشاء التعليمات البرمجية بلغة الآلة بواسطة المترجم مسبقًا، ثم يتم جدولتها وتنفيذها بواسطة نظام التشغيل، مثل لغة دلفي ولغة C++ وما إلى ذلك. والآخر هو طريقة الترجمة الفورية، وهي ميزة في الحساب، ولا يؤثر التفسير والتنفيذ على البرنامج المستهدف، مثل اللغة الأساسية ولغة البرمجة النصية وما إلى ذلك. تتمثل خصائص طريقة التفسير في سرعة التشغيل البطيئة والمتطلبات العالية نسبيًا لأجهزة الكمبيوتر.
تحدد لغات الكمبيوتر القواعد التي تصف احتياجات الأشخاص. وخلف اللغة يوجد مترجم أو مترجم. تتمثل المهمة الرئيسية للمترجم أو المترجم الفوري في ترجمة التعليمات البرمجية وتصبح القناة الرئيسية للتواصل بين البشر وأجهزة الكمبيوتر. بهذه الطريقة، عندما يظل نظام التشغيل دون تغيير، تُظهر أدوات التطوير المختلفة قدراتها الفريدة، ولكن في النهاية يجب عليها إنشاء تعليمات برمجية قابلة للتنفيذ بواسطة الكمبيوتر. لذلك، بغض النظر عن لغة الكمبيوتر التي تمت كتابة البرنامج بها، سواء كان جيدًا أم سيئًا، يعتمد إلى حد كبير على المترجم أو المترجم الفوري لتلك اللغة. لا يزال مترجم دلفي هو المترجم الأكثر تقدمًا والأفضل والأكثر كفاءة في العالم.
من منظور خصائص اللغات عالية المستوى، فهي في الأساس عبارة عن تغليف لواجهات الخدمة التي يوفرها نظام التشغيل، وعلى هذا الأساس تضيف ميزات اللغة الخاصة بها، مثل OOP، والمؤشرات، وأنماط إدارة الذاكرة، وما إلى ذلك.
من بنية لغة دلفي بأكملها، عندما نكتب البرامج، فإننا إما نستخدم VCL مباشرة، أو نتصل بواجهة برمجة التطبيقات (API) التي يوفرها نظام التشغيل، أو نستخدم خدمات Com، أو نستخدم لغة التجميع مباشرة لإكمال عملنا.
جوهر وأعظم شيء في دلفي هو مكتبة المكونات المرئية (VCL - مكتبة المكونات المرئية) ومكتبة المكونات عبر الأنظمة الأساسية (CLX - مكتبة المكونات لـ Cross-Platform)، والتي تشبه Microsoft MFC، لكن بنيتها على الأقل أكثر تقدمًا من MFC بسنتين إلى ثلاث سنوات. عند البرمجة في دلفي، يمكنك اختيار VCL أو عدم البدء من الصفر. لنفترض أنك كتبت برنامجًا يقوم بإنشاء نافذة ويعرض "Hello World". إذا كنت لا تستخدم VCL، فعليك أن تبدأ عن طريق استدعاء CreateWindow الخاص بواجهة برمجة التطبيقات (API). هذا أمر مزعج، لكنه يعتمد على متطلباتك. يوضح هذا أنه ليس من المستحيل استخدام برمجة دلفي بدون VCL، مثل برامج وحدة التحكم.
VCL هي مكتبة فئة قوية، وهي جوهر وبلورة الميزات الموجهة للكائنات في لغة دلفي. هيكل الرسم التخطيطي للفئة هو كما يلي:
هذا هيكل مخطط فئة مختصر، لكنه ممثل للغاية من مخطط الفئة، يمكننا أن نرى أن VCL له جذر واحد فقط - TObjct، وكل فئة مشتقة لها سلف واحد فقط. هذه هي الميزة الموجهة للكائنات في لغة دلفي. السلف الأكثر أصالة لجميع الفئات هو TObjcet، وطريقة الميراث هي الميراث الفردي. ما يحتاج إلى توضيح هو:
l على الرغم من أن تصميم VCL كلاسيكي وضخم، إلا أنه لا يخيفك. بصراحة، إنها مكتبة فئة يتم فيها تجميع العديد من الفئات ذات الصلة معًا لإكمال وظائف معينة. كما ذكرنا سابقًا، يمكننا كتابة برامج باستخدام VCL أو بدونها، مما يعني أن VCL ليس ضروريًا. إذا لزم الأمر، يمكننا أن نرث أيًا من الفئات ونوسعها لجعلها فئة تلبي متطلباتنا الخاصة. على سبيل المثال، إذا أردنا توسيع فئة TPanal، فيمكن تشغيل الأحداث المقابلة (OnMouseEnter/OnMouseLeave) عند دخول الماوس وخروجه، مثل وظيفة لوحة QQ.
u قم بإنشاء وحدة جديدة من [ملف]->[جديد]->[وحدة].
u اكتب الكود كما يلي، ثم احفظ الوحدة باسم MyPanelUnit.
وحدة MyPanelUnit؛
واجهة
يستخدم الفئات، ExtCtrls، الرسائل، عناصر التحكم؛
يكتب
TMouseActionEvent = PROcedure(Sender: TObject) للكائن؛
TMyPanel = فئة (TPanel)
خاص
فونموسينتر، فونموسيليف:
fuseActionEvent;
// اعتراض رسالة إدخال الماوس
الإجراء WMMouseEnter (الرسالة var:
رسالة)؛ رسالة CM_MOUSEENTER؛
// اعتراض رسالة تحريك الماوس
الإجراء WMMouseLeave (الرسالة var:
رسالة)؛
نشرت
الخاصية OnMouseEnter: قراءة TMouseActionEvent
FOnMouseEnter اكتب FOnMouseEnter؛
الخاصية OnMouseLeave: قراءة TMouseActionEvent
FOnMouseLeave اكتب FOnMouseLeave؛
نهاية؛
// لاحظ أن حرف "R" في "التسجيل" يجب أن يكون بالأحرف الكبيرة. هذا هو المكان الوحيد في لغة دلفي الذي يتطلب الاهتمام بالحجم.
سجل الإجراء؛
تطبيق
{TMyPanel}
سجل الإجراء؛
يبدأ
// قم بتسجيل المكون في IDE الخاص بـ Delphi وعرضه على اللوحة "MyControl"
RegisterComponents('MyControl', [TMyPanel]);
نهاية؛
الإجراء TMyPanel.WMMouseEnter(var الرسالة: TMessage);
يبدأ
// تحديد ما إذا كان هناك رمز عند دخول الماوس وما إذا كان يتم تنفيذه
إذا تم تعيينه (FOnMouseEnter) بعد ذلك
FOnMouseEnter(Self);
نهاية؛
الإجراء TMyPanel.WMMouseLeave(var الرسالة: TMessage);
يبدأ
// تحديد ما إذا كان هناك رمز عند دخول الماوس وما إذا كان يتم تنفيذه
إذا تم تعيينه (FOnMouseLeave) بعد ذلك
FOnMouseLeave(Self);
نهاية؛
نهاية.
u ثم انقر فوق [المكون]->[تثبيت المكون...]، كما هو موضح أدناه:
حدد الوحدة التي أنشأناها للتو، MyPanelUnit.pas، في "اسم ملف الوحدة" واترك الخيارات الأخرى كإعداد افتراضي. ثم انقر فوق "موافق"، وحدد "نعم" في "سيتم إنشاء الحزمة dclusr.bpk ثم تثبيتها، هل تريد المتابعة؟" وحفظها بعد التجميع والتثبيت. وبهذه الطريقة، سيتم تثبيت عنصر التحكم TmyPanel في دلفي. قم بتمرير لوحة تحكم دلفي إلى النهاية، ستظهر لك صفحة التحكم MyControl كما هو موضح أدناه:
u ثم أنشئ مشروعًا جديدًا، وانقر فوق [ملف]->[جديد]->[تطبيق]، واسحب MyPanel من صفحة MyControl إلى النموذج، واضغط على المفتاح F11، وانتقل إلى صفحة الأحداث، كما يلي:
قارنه مع TPanel لمعرفة ما إذا كان هناك المزيد من أحداث OnMouseEnter وOnMouseLeave. انقر نقرًا مزدوجًا فوق OnMouseEnter واكتب الكود كما يلي:
الإجراء TForm1.MyPanel1MouseEnter(Sender: TObject);
يبدأ
ShowMessage('يدخل الماوس إلى MyPanel1');
نهاية؛
ثم اضغط F9 للتشغيل، وحرك الماوس إلى MyPanel1، وشاهد النتيجة.
الأمر بهذه البساطة، لقد قمنا بتوسيع TPanel ليتمتع بالقدرة على التعامل مع أحداث إدخال الماوس وإزالته، لذا فإن VCL ليس غامضًا.
تدعم دلفي وراثة الواجهة، والتي تنفذ الوراثة المتعددة، على سبيل المثال، يتم تعريف TComponent على النحو التالي:
TComponent = فئة (TPersistent، IInterface،
IInterfaceComponentReference)
ل لا تقم بإنشاء مثيلات للفئات المجردة. طالما أن إحدى الطرق في الفصل هي طريقة مجردة، فإن الفصل هو فصل مجرد. على سبيل المثال، يتم تعريف TStrings على النحو التالي:
TStream = فئة (TObject)
خاص
…
محمي
…
عام
وظيفة القراءة (var Buffer؛ Count: Longint): Longint virtual؛
وظيفة الكتابة (const Buffer؛ Count: Longint): Longint virtual؛
…
نهاية؛
طالما أن هناك كلمة أساسية مجردة في تعريف الطريقة، فهي طريقة مجردة. لا فائدة من استخدام فئة مجردة لإنشاء مثيل، لأنه لم يتم تنفيذ القراءة والكتابة، وسيظهر مثال إذا تم استدعاؤه.
(غير مكتمل، يرجى الرجوع إلى ما وراء الكواليس في دلفي --- مرجع المبتدئين الجزء 2 (2))
(إذا كنت تريد إعادة الطبع، يرجى الإشارة إلى المصدر والمؤلف http://haitian.myrice.com)