وعليكم السلام ورحمة الله
مثال جميل
بشكل عام، في الحالات حيث نريد تمرير متغير يختلف صنفه (هنا TForm2, TForm3, TForm4)
يمكننا مبدئيا استعمال أحد الطريقتين:
1- تمرير الصنف نفسه صنفه class of TForm في هذا مثال
معرف مسبقا باسم TFormClass في المكتبة Forms
في مثال النماذج، هناك خدعة مشابهة تقريبا بالبحث عن اسم الصنف باستخدام FindClass
Creating a Delphi Form from a String
في هذه الحالة لا يمكن فحص إنشاء النموذج مباشرة... لذلك نلجأ إلى طريقة ثانية:
2- تمرير متغير غير ذي نمط Untyped Reference
لأجل نفس المثال السابق مثلا:
وهنا ينبغي تمرير المتغير وصنفه أيضا إذ لا يمكن جلب صنف المتغير باستخدام ClassParent ثم قولبتها بشيء مثل:
لماذا؟ ببساطة لأن نمطه غير معروف!
هذه الطرق سارية على جميع إصدارات دلفي...
هناك حل آخر (أحسن إن أمكن) باستخدام نماذج مورثة:
http://www.delphi4arab.net/forum/showpos...ostcount=2
بالتوفيق.
مثال جميل

بشكل عام، في الحالات حيث نريد تمرير متغير يختلف صنفه (هنا TForm2, TForm3, TForm4)
يمكننا مبدئيا استعمال أحد الطريقتين:
1- تمرير الصنف نفسه صنفه class of TForm في هذا مثال
معرف مسبقا باسم TFormClass في المكتبة Forms
PHP كود :
procedure CreateAForm(ClassForm: TFormClass);
var
AForm: TForm;
begin
AForm := ClassForm.Create(Application);
AForm.Parent := Form1.Panel1;
AForm.Width:= 380;
AForm.Height:= 500;
AForm.Top:=0;
AForm.Left:= 0;
AForm.Show;
end;
Creating a Delphi Form from a String
PHP كود :
http://delphi.about.com/library/weekly/aa080905a.htm
2- تمرير متغير غير ذي نمط Untyped Reference
لأجل نفس المثال السابق مثلا:
PHP كود :
procedure CreateAndCheck(var AForm; FormClass: TFormClass);
begin
with TForm(AForm) do
if not Assigned(TForm(AForm)) then begin
Application.CreateForm(FormClass, TForm(AForm));
Parent := Form1.Panel1;
Width:= 380;
Height:= 500;
Top:=0;
Left:= 0;
end else
Show;
end;
PHP كود :
Application.CreateForm(TComponentClass(AForm.ClassParent), TForm(AForm));
هذه الطرق سارية على جميع إصدارات دلفي...
هناك حل آخر (أحسن إن أمكن) باستخدام نماذج مورثة:
http://www.delphi4arab.net/forum/showpos...ostcount=2
بالتوفيق.

