التعليقات

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

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



We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

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

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

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

الأبوين

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

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

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

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

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

Button1.Parent: = Panel2؛

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

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

ParentThis و ParentThat

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

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

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

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

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

Panel1.Controlsii.Visible: = false؛

الخدع الخدع

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

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

ملكية

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

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

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

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

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

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

فار FFile: TFindFile؛

إجراء TForm1.InitializeData.

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

FFile: = TFindFile.Create (Self) ؛

 …

النهاية;

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

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

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

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

فار

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

ابدأ

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

  إذا (AForm.Componentsii هو TEdit) ثم TEdit (AForm.Componentsii). النص: = "؛

النهاية;

"الأيتام"

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

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


شاهد الفيديو: حالات واتس لكل بنت اسم حبيبها مصطفي (أغسطس 2022).