طريقة لإنشائ MDIChild
#1
السلام عليكم


نعلم أنه هناك مشكل في إنشاء MDIChild في لازاروس لكني من خلال بحث في اليوتيوب وجدت طريقة لإنشاء MDIChild سوف أحاول أن أشرحها و بتصرف مني
فتح مشروع جديد Application و إضافة إليه Form2 ليكن عندنا نموذجين بحيث نضيف في Unit1 تحت كلمة implementation ما يلي
PHP كود :
uses Unit2 


نضيف لل Form2 أداة Edit1 وأداة Button1 ونغير خصائص النمودج Form2 كما يلي


PHP كود :
BorderStyle bsNone 
PHP كود :
Caption ='' 
وفي حدث Create للـ Form2 نكتب هذا الكود

PHP كود :
[align=left]
Top :=0;
 
Left :=0;[/align


وفي الحدث Show لل Form2 نكتب الكود التالي


PHP كود :
Edit1.Text := Form2.Name
أما بالنسبة لـButton1 نغير الخاصية Caption إلى إغلاق وفي حدث Click نكتب
PHP كود :
Form2.Close 
أما في النمودج الأول نضع أداة MainMenu1 وننشأ القائمة MenuItem1 ونغير الخاصية Caption للقائمة MenuItem1 إلى إظهارالنمودج وفي حدث Click للقائمة MenuItem1 نكتب كما يلي


PHP كود :
[align=left]
Form2:=TForm2.Create(Self);
 
Form1.InsertControl(Form2);
 
Form2.show;[/align


لو ننفذ البرنامج و نضغط على MenuItem1 يظهر نمودج بإسم Form2_1 على شكل­ MDIChild لكن هناك مشكلة وهي كلما ضغطنا على MenuItem1 يظهر نودج أخرة Form2_n ولإقاف ذلك ولنجعل البرنامج يعمل مع نمودج واحدة نغير الكود في Click للقائمة MenuItem1 كما يلي


PHP كود :
[align=left]if Trim(Form2Caption) = '' then
 Begin
 Form2
:=TForm2.Create(Self);
 
Form1.InsertControl(Form2);
 
End;
 
Form2.show[/align
;
وفي الحدث Show لل Form2 نكتب الكود التالي

PHP كود :
[align=left]
Edit1.Text := Form2.Name;
 
Form2Caption := 'إسم النمودج' ;[/align
[-] كل من 3 users say قال شكرا ل العيد1403 على المشاركة المفيدة
  • delphi17, bassem_43, S.FATEH
الرد
#2
إذا كنت تقصد بموضوعك ادراج فورم دخل فورم أخرى اسمح لي أخ العيد أن اقول لك بأن الطريقة التي تتبعها طويلة فالأمر لا يحتاج كل هذا العنى
[-] كل من 1 user says قال شكرا ل delphi17 على المشاركة المفيدة
  • العيد1403
الرد
#3
الموضوع سهل وبسيط  كالتالي :
 في حدث النقر على عنصر القائمة MenuItem في الفورم الأب اكتب الكود التاليك

   
 child_frm.Parent:=main_frm;
     child_frm.BorderStyle:=bsNone;
     child_frm.Align:=alClient;
          child_frm.Show;
[-] كل من 2 users say قال شكرا ل Mohamed Allam على المشاركة المفيدة
  • العيد1403, delphi17
الرد
#4
@Mohamed Allam إجابة أكثر من رائعة
@العيد1403 الموضوع ممتاز لكن تذكر في عالم البرمجة هونك أكثر من طريقة لفعل نفس الشئ لكن هناك طريقة واحدة جيدة او مثالية لفعل الشئ
[-] كل من 1 user says قال شكرا ل delphi17 على المشاركة المفيدة
  • العيد1403
الرد
#5
Huh Huh Blush Idea Idea 

شكرا لكل من  delphi17 و Mohamed Allam
كنت أعتقد أني سأفيد المنتدى من موضوعي فأستفدت أنا من ردودكما بارك الله فيكما وشكرا
[-] كل من 1 user says قال شكرا ل العيد1403 على المشاركة المفيدة
  • delphi17
الرد
#6
بالعكس أخ العيد الموضوع جيد جدا ونقاش حوله مثير للغاية "اعمل بحث في منتدى العازر و سا تلاحظ مدى النقاش الذي اثره هذا الموضوع  " ان روح النفاش هي  ما تنقص هذا المنتدى  الغالي

إطلاع على هذا : من هنا[url=http://www.oocities.org/br/hipernetjr/lmdi/index_ptbr.html][/url]

ملاحظة : إذا كان الغرض من هذ هو  عذم تكرار إنشاء الفورم إذا كانت نشطة كيفي هذا

كود :
if not Assigned(form_name) then
begin
form_name:= Tform_name.Create(self);
form_name.Parent:=Panel;

end;
ipform.Show

اخ العيد مهم كنت ترئ ان الموضوع لا يهم Huh اعرف ان هنك من يهتم   Idea 
مع خلاص التحية والنذكير وفي نقاش أخر إن شاء الله
[-] كل من 1 user says قال شكرا ل delphi17 على المشاركة المفيدة
  • العيد1403
الرد


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


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم