delphi4arab منتديات دلفي للعرب
مدخل للوراثة Inheritance عن طريق الـ VFI - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : دروس دلفي للمبتدئين (https://delphi4arab.net/forum/forumdisplay.php?fid=13)
+--- الموضوع : مدخل للوراثة Inheritance عن طريق الـ VFI (/showthread.php?tid=10326)



مدخل للوراثة Inheritance عن طريق الـ VFI - S.FATEH - 23-07-2019

السلام عليكم و رحمة الله و بركاته 

الوراثة Inheritance مصطلح له علاقة وثيقة بالـ OOP اختصارا Object Oriented Programming عربيا البرمجة غرضية التوجه
دلفي يوفر منذ زمن قديم VFI اختصارا للـ Visual Form Inheritance ما الذي يعنيه هذا ؟ VFI هو نوع من انواع إعادة الإستخدام للفورم ما الذي يعنيه هذا ؟ يمكنك في دلفي تنشئ فورم و تقوم بحفضه الى المستودع Repository و كلما احتجت الى ذلك الفروم في مشاريع اخرى تقوم باستخدامه مرة اخرى ...
إبدأ مشروع جديد بالدلفي 

File -> New - >Windows VCL Application - Delphi

قم بإنشاء فورم و ليكن كاتالي و قم بحفظه...

[صورة: attachment.php?aid=4026]

سنستخدم فقط حدث البحث أو الفلترة لتوضيح الفكرة..

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

[صورة: attachment.php?aid=4027]

ستظهر النافذة التالية 

[صورة: attachment.php?aid=4028]

اختر عنوان للفروم الذي نريد إظافته للـ Repository و قم باختيار المكان الذي سنجد الفورم الخاص بنا و ليكن Inhertable Items كما في الصورة 


في المشروع الذي تريد إستخدام الفورم قم باظافة وحدة الـ BaseForm 

...Project -> Add to Project

ثم من دلفي

...File -> New -> Others

[صورة: attachment.php?aid=4029]

لاحظ الجزء 3
دلفي يوفر لنا ثلاثة طرق لإستخدام الفورم الذي حفظناه سابقا
  1. Copy إنشاء نسخة من الفورم 
  2. Inherit وراثة و هو الذي يهمنا 
  3. Use إستخدام الفورم
إضغط على Ok لنلاحظ ماذا قدم لنا دلفي 

PHP كود :
TfrmBaseForm1 = class(TfrmBaseForm)
    procedure edtSearchChange(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end; 

دلفي قام بتوريث الفورم الناشئ من TfrmBaseForm 

  1. قم بربط الـ DataSource1 مع الـ DataSet التي تريد 
  2. قم بربط الـ DBGrid مع الـ DataSource1 
  3. أضف الحقول الى 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 

و السلام عليكم و رحمة الله و بركاته