مدخل للوراثة Inheritance عن طريق الـ VFI
#1
السلام عليكم و رحمة الله و بركاته 

الوراثة 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(SenderTObject);
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(SenderTObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end

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

  1. قم بربط الـ DataSource1 مع الـ DataSet التي تريد 
  2. قم بربط الـ DBGrid مع الـ DataSource1 
  3. أضف الحقول الى DBGrid
بدون كتابة أي سطر جرب الفلترة ! الفلترة تشتغل عادي دون كتابة أي سطر !!

قم بالذهاب الى الحدث OnChange للـ Edit الخاصة بالفلترة باختصار إضغط مرتين على Edit الفلترة 

نلاحظ ضهور كلمة جديد Inherited

PHP كود :
procedure TfrmBaseForm1.edtSearchChange(SenderTObject);
begin
  inherited
;

end

ما الذي يعنيه جربنا الفلترة من قبل دون كتابة ادنى سطر ببساطة لاننا ورثنا الكود الموجود في BaseForm يمكنك توسعة / تمديد الكود 

PHP كود :
procedure TfrmBaseForm1.edtSearchChange(SenderTObject);
begin
  inherited
;
  ShowMessage('Filtered');
end

يمكنك التغيير في مكان استدعاء كود الأب 

PHP كود :
procedure TfrmBaseForm1.edtSearchChange(SenderTObject);
begin
  ShowMessage
('Filtered');
  inherited;
end

أو عمل Override للكود تماما و ذلك بحذف كلمة Inherited !

PHP كود :
procedure TfrmBaseForm1.edtSearchChange(SenderTObject);
begin
  ShowMessage
('Filtered');
end

حسنا جميل جدا الأجمل من هذا إذهب الى BaseForm و قم بإظافة زر Button إذهب الى الفورم المورث منه ستجد أن الزر قد أضيف أوتماتيكيا لو كان عندنا 20 فورم مورث منه سيتم إضافة الزر الى 20 فورم في حالة تم إضافته الى BaseForm و الأمر طبعا ينطبق على الكود في حالة أضفنا زر الى فورم ما مورث من الـ BaseForm لن يحدث العكس أي لن تتم إظافة الزر الى الـ BaseForm أي يمكنك التوسعة في الفرومات المورثة كما تشاء 
الشيئ الوحيد الذي لا يمكنك فعله هو حذف مكون من الفورمات المورثة بمعنى انه لا يمكننا ان نحذف الـ DBGrid من الفرومات المورثة اذا اردنا حذفها نحذفها في الـ BaseForm 

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


الملفات المرفقة
.png   4.png (الحجم : 18.42 KB / التحميلات : 23)
.png   3.png (الحجم : 15.84 KB / التحميلات : 23)
.png   2.png (الحجم : 22.72 KB / التحميلات : 23)
.png   1.png (الحجم : 17.37 KB / التحميلات : 23)
و لرب نازلة يضيق لها الفتى ذرعا و عند الله منها المخرج
ضاقت فلما استحكمت حلقاتها فرجت و كنت اضنها لا تفرج
[-] كل من 5 users say قال شكرا ل S.FATEH على المشاركة المفيدة
  • B.M.AbdelAziZ, bassem_43, delphi17, h-farid, أبو معاذ
الرد


التنقل السريع :


مستخدمين يتصفحوا هذا الموضوع: 1 ضيف