delphi4arab منتديات دلفي للعرب

نسخة كاملة : ودع كثرة النوافد المنبثقة
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم

قد تبرمج بنامجا دو مستوى جيد و يطلب منك الزبون أن تجعل البرنامج كله في نافدة واحدة أو تود أن تجعل جميع نوافدك تظهر في نافدة واحدة هدا المثال سيوصل لك الفكرة ان شاء الله.

بالتوفيق.
وعليكم السلام ورحمة الله
مثال جميل Smile
بشكل عام، في الحالات حيث نريد تمرير متغير يختلف صنفه (هنا 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 أو أكثر من فورم فلكثرة هته النوافذ تمل

بارك الله فيكم
شكرا بارك الله فيكم على هذه التوضيحات
جاري تجريبها