![]() |
|
Parent, Sender,Owner, ControlCount, ComponentCount - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : دروس دلفي للمبتدئين (https://delphi4arab.net/forum/forumdisplay.php?fid=13) +--- الموضوع : Parent, Sender,Owner, ControlCount, ComponentCount (/showthread.php?tid=5553) الصفحات:
1
2
|
Parent, Sender,Owner, ControlCount, ComponentCount - S.FATEH - 14-09-2013 السلام عليكم و رحمة الله و بركاته
Parent, Sender,Owner, ControlCount, ComponentCount
ما هو Sender المرسل ؟ تحتوي جميع احداث دلفي على الوسيط Sender لكن ما هو هذا الوسيط و كيف نستفيد منه الوسيط Sender هو من النمط TObject و هو الاب لجميع الانماط في الدلفي لذلك يمكن ان يحمل اي نمط مورث منه... فكر في Sender على انه طريقة لمعرفة من استدعى الحدث... كيف نستفيذ منه ؟ يوفر الوسيط Sender طريقة لمعرفة من استدعى الحدث لذلك ستكون لديك مرونة كبيرة في حالة كان الكود يتكرر في العديد من الاماكن الفورم اعلاه يحتوي على مجموعة من TSpeedButton تمت اعادة تسميتها بالطريقة btn_0, btn_1, btn_2 الخ و كما هو واضح الفورم عبارة عن آلة حاسبة بسيطة نريد عندما ننقر على الارقام كتابتها في Edit1 تماما مثل الالة الحاسبة ليس الهدف برمجة الة حاسبة نريد فقط توضيح الفكرة مبرمجنا لا يوضف الـ Sender لذلك سيكتب الكود عند حدث النقر على الزر btn_0 : PHP كود : procedure TForm1.btn_0Click(Sender: TObject);شيئ بسيط و سنحصل على الكود التالي لجميع الازرار PHP كود : procedure TForm1.btn_0Click(Sender: TObject);لاحظ الالم في تكرير الكود يقوم تقريبا بنفس العمل لنوضف الـ Sender في حدث الضغط على الزر btn_0 اكتب PHP كود : procedure TForm1.btn_0Click(Sender: TObject);حدد جميع الازرار اذهب ObjectInspector -> Events الحدث OnClick تصفح القائمة ستجد btn_0Click اختره الذي قمنا به هو اننا اسندنا الحدث btn_0Click الى الازرار btn_1, btn_2, btn_3 ... اي عندما نضغط على btn_1 كأننا ضغطنا على btn_0 كما قلنا يمكننا ان نعرف عن طريق الـ Sender الزر الذي طلب الحدث و بالتالي الاستجابة حسبه ... فبدل العشر اسطر سنحصل على سطر واحد نظيف و في مكان واحد ما هو Owner المالك ؟ Owner المالك هو المسؤول عن تحرير الذاكرة لجميع المكونات التي يملكها لنلاحظ المثال التالي: PHP كود : procedure TForm1.Button1Click(Sender: TObject);باني Constructor للغرظ TOpenDialog يحتوي على وسيط AOwner اي يمكن تمرير مالك للـ TOpenDialog سيكون مسؤول عن تحرير الغرض من الذاكرة عندما يتحرر بدوره من الذاكرة لذلك لا داعي لاستخدام Free قمنا بتمرير Self الى الوسيط, Self هنا تعود للـ TForm1 اي عند استدعاء هادم TForm1 عن طريق Free مثلا سيتم استدعاء هادم TOpenDialog ما هو الـ Parent الاب ؟ ليس كل المكونات يمكن لها ان تكون اباء هناك فئة من المكونات التي يمكن لها ان تكون اباء لمكونات اخرى نذكر منها TPanel, TForm, TPageControl, TTabSheet, TGroupBox و مثل في الحياة يمكن للابناء ان يحملو صفات الاباء فمثلا زر موجود على Panel1 يمكن له ان يحمل نفس لون Parent و يمكن للـ Parent ان يغير جميع نوع الخط حجم الخط لجميع الابناء يكفي فقط ان تكون خاصية ParentFont = True للابن PHP كود : Button1.ParentFont := True; [ComponentCount, Components[Index ؟ كما يمكن الوصول الى خصائص المكونات عن طريق اسم المكون مثل Edit1.Text يمكن الوصول الى المكونات عن طريق Index رقم المكون او رتبته الخاص بها جميع المكونات على الفورم لديها Index خاص بها فمثلا فورم يحتوي فقط على مكون Edit1 سيكون Index الخاص بالـ Edit1 هو 0 و بالتالي يمكن الوصول الى المكون Edit1 عن طريق معرفة Index السطرين التالين متكافئان و يقومان بنفس الامر PHP كود : Edit1.Text := 'Delphi4Arab';لنفترض لدينا مجموعة من الـ Edits و نريد عمل Reset افراغ جميع المكونات من النصوص مبرمج لا يضف ComponentCount سيكتب شيئ مثل PHP كود : procedure TForm1.Button1Click(Sender: TObject);و مرة اخرى الم كبير في تكرير الكود باستخدام الـ ComponentCount يمكننا عمل حلقة على جميع مكونات الفورم التحقق اذا كانت من النمط TEdit اذا كانت كذلك نقوم بعملية تسمى Type Casting و نقوم باجراء ما نريد و سيكون لدينا كود انضف بكثير PHP كود : procedure TForm1.Button1Click(Sender: TObject);لكن ماذا لو كان لدينا جميع Edits موجودة على Panel اي PHP كود : Edit1.Parent <> nil عندها الكود اعلاه لن يعمل حاول ذلك و لن يعمل ما العمل دلفي يوفر طريقة اخرى [ControlCount,Controls[Index ؟ اذا كان المكونات لديها Parent نستخدم ControlCount بدل من ComponentCount PHP كود : procedure TForm1.Button1Click(Sender: TObject);[Screen.FormsCount, Forms[Index ؟ ماذا لو اردنا ان نغير جميع الـ Captions لجميع الفرومات في مشروعنا او خواص اخرى يمكننا ذلك عن طريق FormsCount التابعة للنمط Screen مثال: PHP كود : procedure TForm1.Button1Click(Sender: TObject);ان شاء الله اكون قد وفقت في الطرح ان اصبت فمن الله و ان أخطأت فمن نفسي و الشيطان و السلام عليكم Parent, Sender,Owner, ControlCount, ComponentCount - alouma - 14-09-2013 بارك الله فيك لمسات برمجية مميزة Parent, Sender,Owner, ControlCount, ComponentCount - seddik_xp - 19-09-2013 رائع تلميحات و أفكار رائعة في البرمجة الكائنية التوجه. حقا اللغة قوية جدا و لها مميزات تكاد تخفى على الكثيرين. شكرا على الدرس . Parent, Sender,Owner, ControlCount, ComponentCount - karika2 - 25-05-2015 درس مليئى بالدسم بارك الله فيك
Parent, Sender,Owner, ControlCount, ComponentCount - Mr.DOS - 27-05-2015 بارك الله فيك اخ فاتح RE: Parent, Sender,Owner, ControlCount, ComponentCount - Mohamed Allam - 27-07-2018 جميل .. بارك الله فيك RE: Parent, Sender,Owner, ControlCount, ComponentCount - h-farid - 27-07-2018 بارك الله لك صنعك و جعله علما ينتفع به و أعانك على المزيد من العطاء. RE: Parent, Sender,Owner, ControlCount, ComponentCount - taha moh - 27-07-2018 بارك الله فيك RE: Parent, Sender,Owner, ControlCount, ComponentCount - zouaidahmed - 15-08-2018 بارك الله فيك RE: Parent, Sender,Owner, ControlCount, ComponentCount - invocker - 24-06-2019 بارك الله فيك اخ فاتح |