فهم المالك مقابل الوالد في دلفي التطبيقات

في كل مرة تضع فيها لوحة على نموذج وزر على تلك اللوحة ، تقوم بإجراء اتصال "غير مرئي". يصبح النموذج صاحب من الزر ، ويتم تعيين لوحة ليكون لها الأبوين.

كل مكون دلفي لديه خاصية المالك. المالك يعتني تحرير المكونات المملوكة عندما يتم تحريرها.

مشابهة ، ولكن مختلفة ، تشير الخاصية Parent إلى المكون الذي يحتوي على المكون "التابع".

الأبوين

يشير الأصل إلى المكون الذي يوجد به مكون آخر ، مثل TForm أو TGroupBox أو TPanel. إذا كان عنصر تحكم واحد (الأصل) يحتوي على عناصر أخرى ، الضوابط الواردة هي الضوابط الطفل من الوالد.

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

يمكن تعيين الخاصية الأصل وتغييرها أثناء وقت التشغيل.

ليس كل المكونات لديها الأصل. العديد من الأشكال لا تملك أحد الوالدين. على سبيل المثال ، النماذج التي تظهر مباشرة على سطح مكتب Windows لديها Parent مضبوطة على الصفر. عنصر HasParent تقوم الطريقة بإرجاع قيمة منطقية تشير إلى ما إذا كان المكون قد تم تعيين أصل له أم لا.

نحن نستخدم خاصية الأصل للحصول على أو تعيين أصل عنصر التحكم. على سبيل المثال ، ضع لوحة اثنين (Panel1 ، Panel2) في نموذج ووضع زر واحد (Button1) على اللوحة الأولى (Panel1). هذا يعين خاصية الأصل الزر إلى Panel1.

instagram viewer

 Button1.Parent: = Panel2؛ 

إذا وضعت الكود أعلاه في حدث OnClick للوحة الثانية ، فعند النقر فوق Panel2 ، فإن الزر "ينتقل" من Panel1 إلى Panel2: لم يعد Panel1 هو Parent for the Button.

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

ParentThis و ParentThat

إذا حددت زرًا في وقت التصميم ونظرت إلى "عارض الكائنات" ، فستلاحظ العديد من خصائص "معرفة الوالدين". ال ParentFont، على سبيل المثال ، يشير إلى ما إذا كان الخط المستخدم للتعليق التوضيحي للزر هو نفسه المستخدم للوالد الخاص بالزر (في المثال السابق: Panel1). إذا كان ParentFont صحيحًا لجميع الأزرار الموجودة على لوحة ، فإن تغيير خاصية Font للوحة إلى Bold يتسبب في استخدام جميع التسمية التوضيحية للزر في اللوحة لهذا الخط (الغامق).

ضوابط الملكية

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

يمكن استخدام الجزء التالي من التعليمات البرمجية لإخفاء جميع المكونات المضمنة في اللوحة 1:

إلى عن على الثاني: = 0 إلى Panel1.ControlCount - 1 فعل

 Panel1.Controls [ii] .Visible: = false؛


الخدع الخدع

تحتوي عناصر التحكم في النوافذ على ثلاث خصائص أساسية: يمكن أن تتلقى تركيز الإدخال ، وتستخدم موارد النظام ، ويمكن أن تكون أبوية لعناصر تحكم أخرى.

على سبيل المثال ، مكون الزر هو عنصر تحكم في إطارات ولا يمكن أن يكون الأصل لبعض المكونات الأخرى - لا يمكنك وضع مكون آخر عليه. الشيء هو أن دلفي يخفي هذه الميزة منا. مثال على ذلك هو الاحتمالية الخفية لـ TStatusBar أن تحتوي على بعض المكونات مثل TProgressBar.

ملكية

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

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

عندما نستخدم الكلمة الذات كمعلمة لأسلوب إنشاء - الكائن الذي نقوم بإنشائه مملوك للفئة التي تتضمنها الطريقة - والتي عادة ما تكون نموذج دلفي.

من ناحية أخرى ، إذا جعلنا مكونًا آخر (وليس النموذج) هو مالك المكون ، فإننا نجعل ذلك المكون مسؤولًا عن التخلص من الكائن عندما يتم إتلافه.

مثل أي شيء آخر مكون دلفي ، يمكن إنشاء مكون TFindFile مخصص واستخدامها وتدميرها في وقت التشغيل. لإنشاء واستخدام وتحرير عنصر TFindFile عند التشغيل ، يمكنك استخدام مقتطف الشفرة التالي:

الاستخدامات إيجاد ملف؛

...
فار FFile: TFindFile؛

إجراء TForm1.InitializeData؛

ابدأ // form ("Self") هو مالك المكون // لا يوجد Parent لأن هذا // مكون غير مرئي.

 FFile: = TFindFile. خلق (الذات) ؛

 ...

النهاية;

ملاحظة: نظرًا لأن FFile تم إنشاؤه باستخدام مالك (Form1) ، لا نحتاج إلى فعل أي شيء لتحرير المكون - سيتم تحريره عند إتلاف المالك.

مكونات الملكية

جميع المكونات التي تشترك في نفس المالك متاحة كجزء من خاصية المكونات هذا المالك. يتم استخدام الإجراء التالي لمسح كافة مكونات التحرير الموجودة في النموذج:

إجراء ClearEdits (AForm: TForm) ؛

فار

 الثاني: عدد صحيح

ابدأ

إلى عن على الثاني: = 0 إلى شكل. ComponentCount-1 فعل

إذا (شكل. المكونات [ii] يكون تيميت) ثم TEDit (AForm. المكونات [ii]). النص: = ''؛

النهاية; 

"الأيتام"

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

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

instagram story viewer