السلام عليكم و رحمة الله و بركاته
الوراثة Inheritance مصطلح له علاقة وثيقة بالـ OOP اختصارا Object Oriented Programming عربيا البرمجة غرضية التوجه
دلفي يوفر منذ زمن قديم VFI اختصارا للـ Visual Form Inheritance ما الذي يعنيه هذا ؟ VFI هو نوع من انواع إعادة الإستخدام للفورم ما الذي يعنيه هذا ؟ يمكنك في دلفي تنشئ فورم و تقوم بحفضه الى المستودع Repository و كلما احتجت الى ذلك الفروم في مشاريع اخرى تقوم باستخدامه مرة اخرى ...إبدأ مشروع جديد بالدلفي
File -> New - >Windows VCL Application - Delphi
قم بإنشاء فورم و ليكن كاتالي و قم بحفظه...
سنستخدم فقط حدث البحث أو الفلترة لتوضيح الفكرة..
PHP كود :
procedure TfrmBaseForm.edtSearchChange(Sender: TObject);
begin
TFDQuery(DataSource1.DataSet).Filtered := False;
TFDQuery(DataSource1.DataSet).Filter := 'Name like ' + QuotedStr('%' + edtSearch.Text + '%');
TFDQuery(DataSource1.DataSet).Filtered := True;
end;
لا تقم بربط الـ DataSource1 مع اي DataSet
حدد الفروم إظغط يمين ثم Add to Repository
ستظهر النافذة التالية
اختر عنوان للفروم الذي نريد إظافته للـ Repository و قم باختيار المكان الذي سنجد الفورم الخاص بنا و ليكن Inhertable Items كما في الصورة
في المشروع الذي تريد إستخدام الفورم قم باظافة وحدة الـ BaseForm
...Project -> Add to Project
ثم من دلفي
...File -> New -> Others
لاحظ الجزء 3
دلفي يوفر لنا ثلاثة طرق لإستخدام الفورم الذي حفظناه سابقا
- Copy إنشاء نسخة من الفورم
- Inherit وراثة و هو الذي يهمنا
- Use إستخدام الفورم
PHP كود :
TfrmBaseForm1 = class(TfrmBaseForm)
procedure edtSearchChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
دلفي قام بتوريث الفورم الناشئ من TfrmBaseForm
- قم بربط الـ DataSource1 مع الـ DataSet التي تريد
- قم بربط الـ DBGrid مع الـ DataSource1
- أضف الحقول الى DBGrid
قم بالذهاب الى الحدث OnChange للـ Edit الخاصة بالفلترة باختصار إضغط مرتين على Edit الفلترة
نلاحظ ضهور كلمة جديد Inherited
PHP كود :
procedure TfrmBaseForm1.edtSearchChange(Sender: TObject);
begin
inherited;
end;
ما الذي يعنيه جربنا الفلترة من قبل دون كتابة ادنى سطر ببساطة لاننا ورثنا الكود الموجود في BaseForm يمكنك توسعة / تمديد الكود
PHP كود :
procedure TfrmBaseForm1.edtSearchChange(Sender: TObject);
begin
inherited;
ShowMessage('Filtered');
end;
يمكنك التغيير في مكان استدعاء كود الأب
PHP كود :
procedure TfrmBaseForm1.edtSearchChange(Sender: TObject);
begin
ShowMessage('Filtered');
inherited;
end;
أو عمل Override للكود تماما و ذلك بحذف كلمة Inherited !
PHP كود :
procedure TfrmBaseForm1.edtSearchChange(Sender: TObject);
begin
ShowMessage('Filtered');
end;
حسنا جميل جدا الأجمل من هذا إذهب الى BaseForm و قم بإظافة زر Button إذهب الى الفورم المورث منه ستجد أن الزر قد أضيف أوتماتيكيا لو كان عندنا 20 فورم مورث منه سيتم إضافة الزر الى 20 فورم في حالة تم إضافته الى BaseForm و الأمر طبعا ينطبق على الكود في حالة أضفنا زر الى فورم ما مورث من الـ BaseForm لن يحدث العكس أي لن تتم إظافة الزر الى الـ BaseForm أي يمكنك التوسعة في الفرومات المورثة كما تشاء
الشيئ الوحيد الذي لا يمكنك فعله هو حذف مكون من الفورمات المورثة بمعنى انه لا يمكننا ان نحذف الـ DBGrid من الفرومات المورثة اذا اردنا حذفها نحذفها في الـ BaseForm
و السلام عليكم و رحمة الله و بركاته
و لرب نازلة يضيق لها الفتى ذرعا و عند الله منها المخرج
ضاقت فلما استحكمت حلقاتها فرجت و كنت اضنها لا تفرج
ضاقت فلما استحكمت حلقاتها فرجت و كنت اضنها لا تفرج


![[-]](https://delphi4arab.net/forum/D4A2020/collapse.png)