28-02-2009, 01:27 PM
السلام عليكم
من أجل تقليص الكود توجد عدة حلول لاستعمال نفس الحدث لعدة المكونات:
1- أن نرفق نفس الحدث لكل المكونات بتحديد مجموعة المكونات واختيار نفس الحدث المرغوب فيه (من Object Inspector) أو:
2- إنشاء مكون TActionList وتحديد خاصية Action لكل مكون بالحدث المرغوب فيه (وبهذا نستغل خاصية ShortCut مثلا وخصائص أخرى)
وإذا كانت الأحداث متشابهة في الشكل ومختلف في القيم، فنجعل لها إجراء أو دالة مستقل (Fonction أو procedure ) ونعطيه معالم (paramters) نمرر من خلالها القيم المتغيرة.
أنا استعمل الدالة FindComponent مع خاصية Caption والاستفادة من المتغير Sender: TObject
مثلا في برنامج آلة حاسبة لا نكتب في حدث النقر على كل زر
حيث i تمثل رقم الزر الذي تم النقر عليه...، بل نكتفي بكتابة:
في أي زر ونمرر هذا الحدث لباقي أزرار الأرقام في الآلة الحاسبة.
ونكتب في OnKeyPress للنموذج Form1 الأمر:
وهكذا نختصر العشرات من الأسطر.
ولا ننسى عندما نريد وضع عشرة مكونات TButton دفعة واحدة، ننقر على الزر مع الضغط على مفتاح Shift ثم ننقر على النموذج Form1 عشرة مرات.
أيضا ما يلاحظ كثيرا استعمال مثل:
ويمكن اختصاره بـ:
انتظروا...
فاتني التنبيه على أمر مهم جداما يحدث، أحيانا نريد تجربة مكون ما وعند إضافة بعض مكونات في النموذج (Form) يضيف Delphi اسم الوحدة العائدة لذلك المكون، ولكن عند حذفها لا يحذفها الدلفي فيبقى اسم الوحدة في قائمة Uses يثقل حجم البرنامج وقد يستغرب البعض لذلك.
فلا تنسى أن تحذف اسم الوحدات غير المستعملة في برنامجك.
الموضوع مهم، وهناك أشياء كثيرة يمكن قولها في هذا الشأن بعضها أكثر أهمية مما ذكرت، حاليا هذا ما يحضرني الآن.
والله أعلم.
شكرا كثيرا.
من أجل تقليص الكود توجد عدة حلول لاستعمال نفس الحدث لعدة المكونات:
1- أن نرفق نفس الحدث لكل المكونات بتحديد مجموعة المكونات واختيار نفس الحدث المرغوب فيه (من Object Inspector) أو:
2- إنشاء مكون TActionList وتحديد خاصية Action لكل مكون بالحدث المرغوب فيه (وبهذا نستغل خاصية ShortCut مثلا وخصائص أخرى)
وإذا كانت الأحداث متشابهة في الشكل ومختلف في القيم، فنجعل لها إجراء أو دالة مستقل (Fonction أو procedure ) ونعطيه معالم (paramters) نمرر من خلالها القيم المتغيرة.
أنا استعمل الدالة FindComponent مع خاصية Caption والاستفادة من المتغير Sender: TObject
مثلا في برنامج آلة حاسبة لا نكتب في حدث النقر على كل زر
كود :
Edit1.text := Edit1.text +Button[i].captionPHP كود :
Edit1.text := Edit1.text + (Sender as TButton).Caption;
ونكتب في OnKeyPress للنموذج Form1 الأمر:
PHP كود :
if key in ['0'..'9'] then
(FindComponent('Button'+ Key) as TButton).Click;
ولا ننسى عندما نريد وضع عشرة مكونات TButton دفعة واحدة، ننقر على الزر مع الضغط على مفتاح Shift ثم ننقر على النموذج Form1 عشرة مرات.
أيضا ما يلاحظ كثيرا استعمال مثل:
كود :
if CheckBox1.Checked = True then
Edit1.Visible := True else Edit1.Visible := False;PHP كود :
Edit1.Visible := CheckBox1.Checked
انتظروا...
فاتني التنبيه على أمر مهم جداما يحدث، أحيانا نريد تجربة مكون ما وعند إضافة بعض مكونات في النموذج (Form) يضيف Delphi اسم الوحدة العائدة لذلك المكون، ولكن عند حذفها لا يحذفها الدلفي فيبقى اسم الوحدة في قائمة Uses يثقل حجم البرنامج وقد يستغرب البعض لذلك.فلا تنسى أن تحذف اسم الوحدات غير المستعملة في برنامجك.
الموضوع مهم، وهناك أشياء كثيرة يمكن قولها في هذا الشأن بعضها أكثر أهمية مما ذكرت، حاليا هذا ما يحضرني الآن.
والله أعلم.
شكرا كثيرا.

