السلام عليكم
قد تبرمج بنامجا دو مستوى جيد و يطلب منك الزبون أن تجعل البرنامج كله في نافدة واحدة أو تود أن تجعل جميع نوافدك تظهر في نافدة واحدة هدا المثال سيوصل لك الفكرة ان شاء الله.
بالتوفيق.
وعليكم السلام ورحمة الله
مثال جميل 
بشكل عام، في الحالات حيث نريد تمرير متغير يختلف صنفه (هنا 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;
في مثال النماذج، هناك خدعة مشابهة تقريبا بالبحث عن اسم الصنف باستخدام FindClass
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;
وهنا ينبغي تمرير المتغير وصنفه أيضا إذ لا يمكن جلب صنف المتغير باستخدام ClassParent ثم قولبتها بشيء مثل:
PHP كود :
Application.CreateForm(TComponentClass(AForm.ClassParent), TForm(AForm));
لماذا؟ ببساطة لأن نمطه غير معروف!
هذه الطرق سارية على جميع إصدارات دلفي...
هناك حل آخر (أحسن إن أمكن) باستخدام نماذج مورثة:
http://www.delphi4arab.net/forum/showpos...ostcount=2
بالتوفيق.
[color="royalblue"]السلام عليكم و حمة الله تعالى و بركاته
فكرة جميلة اخي هذا من حيث البرمجة
لكن هذه فكرتي [/color]
كود :
procedure TForm1.Button1Click(Sender: TObject);
begin
PageControl1.ActivePageIndex:= 0;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
PageControl1.ActivePageIndex:= 1;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
PageControl1.ActivePageIndex:= 2;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
PageControl1.ActivePageIndex:= 3;
end;
إقتباس :مثال جميل
واظافة أجمل أخي kachwahed
إقتباس :لكن هذه فكرتي
هناك عدة طرق أخي Anter2010 وطريقتك أيضا منطقية.
وجزاكم الله خيرا
السلام عليكم
فكرة رائعة جدا
ولكن هناك مشكل عند فتح مثلا Form2 وبعدها فتح Form3 وبعدها فتحت Form4 ستبقى جميعها مفتوحة وهذا سيجعل البرنامج بطيئ . تخيل لو كانت لديك عدة نوافذ مليئة بالمكونات .ماذا يحصل في رأيك ؟ أكيد البطئ وهذا يؤثر على البرنامج
المهم الفكرة طيبة جدا لكن تنقصها بعض التعديلات لإغلاق النوافذ الأخرى
السلام عليكم
أخي ، إستعمل هذا الكود
أضف هذا عند الضغط على الزر Form3
كود :
if frm2<> nil then frm2.Close;
if frm4 <> nil then frm4.Close;
البرنامج سيكون أسرع
إقتباس :أكيد البطئ وهذا يؤثر على البرنامج
بالطبع أخي AnoirsoftDevloper هدا شيء لا يجب أن يغفل عنه أي مبرمج...لكن هدا مجرد مثال هدفه ايصال الفكرة فقط.
وجزاك الله خيرا
السلام عليكم
والله موضوع في غاية الأهمية رغم أن الدلفي كل شيء فيه مهم
يوجد تطبيقات بها 100 أو أكثر من فورم فلكثرة هته النوافذ تمل
بارك الله فيكم
شكرا بارك الله فيكم على هذه التوضيحات
جاري تجريبها