السلام عليكم
ممكن احد يدلني عن كيفية معرفة الفورمز المفتوحة التابعة لبرنامجي ، واغلاقها كلها دون تمييز ، باستثناء الفورم الرئيسي
السلام عليكم
ممكن احد يدلني عن كيفية معرفة الفورمز المفتوحة التابعة لبرنامجي ، واغلاقها كلها دون تمييز ، باستثناء الفورم الرئيسي
h_28
هل تستخدم MDI Forms و لا عادي
اذا كنت تستخدم MDI Forms يمكن استخدام الكود التالي لاغلاق جميع النوافذ المفتوحة ضمن الفورم الاب
for i:= 0 to MdiChildCount - 1 do MDIChildren.Close;
رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.
لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"
اخي الكريم
اليك كيف تفعل ذلك
procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
for i := 0 to ComponentCount -1 do
begin
if Components.ClassNameIs('TForm2') then
TForm(Components).Close;
end;
end;هذا الكود لاغلاق كاقة الفورم المفتوح من Form2
اذا اردت ان تغلق جميع الفورم
ضع اسم Class لها في عبارة Or
procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
for i := 0 to ComponentCount -1 do
begin Components.
if (Components.ClassNameIs('TForm2')) or Components.ClassNameIs('TForm3') then
TForm(Components).Close;
end;
end;ملاحظة : يمكنك استخدام اسم الفورم بدل من اسم الكلاس
وذلك باخذ الخاصية Name بد من ClassName
هذه تعتبر طريقة طويلة اذا كان عندك اكثر من فورم فيجب عليك ذكر جميع الفورم ضمن عبارة Or
يمكنك ايضا استخدام الخاصية Tag لتوفير الكتابة و ذلك كما يلي
قم بضبط الخاصية Tag لكل الفورم الأبناء على الرقم 10 مثلا
ثم قم بكتابة الكود التالي لتقوم بعملية الاغلاق
procedure TForm1.Button2Click(Sender: TObject); var i:integer; begin for i := 0 to ComponentCount -1 do begin if Components.Tag = 10 then TForm(Components).Close; end; end;
ارجو ان يكون الشرح واضح :rolleyes:
رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.
لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"
اخي الكريم اي من الاكود جربت و لم تعمل معك
انا جربتها و عملت 100%
رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.
لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"
جرب هذا المثال
رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.
لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"
لا يوجد اي اختلاف بين النسختين في هذه الناحية
و لكن اي دالة تقصد لم افهم ارجو التوضيح
ماذا حصل في المثال
ما هي النتائج التي حصلت؟
رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.
لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"
هل نسيت ضبط الخاصية Tag على 10
اذا نسيت ذلك لن تعمل
رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.
لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"
جربت ولكن دون جدوى اضف ايضا
for i:=0 to ComponentCount-1 do
begin
if ((Components.ClassNameIs('TForm')) and (Components.Name<>'form1')) then
begin
// ShowMessage('rrrrrrrrrrr');
TForm(Components).Close;
end;
end;
h_28
hitam كتب:هل طريقة تكوين الفورم لها علاقة بالامر
نعم
ComponentCount عدد المكونات المجودة داخل الفورم الأول أو المكونة بداخله
جرب أن تضيف
showmessage(inttostr(ComponentCount));
لتفهم الأمر جيدا
مثال مرفق عملته بدلفي5
جربه و أخبرني بالنتيجة :D
تم تعديل هذه المشاركة بواسطة DeltaAziz في 5 سبتمبر 2005 في 13:49
اقتباسجربت ولكن دون جدوى اضف ايضاfor i:=0 to ComponentCount-1 do begin if ((Components.ClassNameIs('TForm')) and (Components.Name<>'form1')) then begin // ShowMessage('rrrrrrrrrrr'); TForm(Components).Close; end; end;
طبعا هناك خطأ و هو انّ Class Name ليس TForm و لكنه TForm1 لأن الفورم هو Form1
لذلك بدل الكود الى
for i:=0 to ComponentCount-1 do
begin
if (Components.ClassNameIs('TForm1') then
begin
// ShowMessage('rrrrrrrrrrr');
TForm(Components).Close;
end;
end;رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.
لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"
إذا أردت إغلاق كل الفورمات , وليس فقط المنشأة من قبل Form2 , سأقترح تعديل بسيط :
procedure TForm1.Button2Click(Sender: TObject); var i:integer; begin for i := 0 to ComponentCount -1 do begin if Components is TForm then if ( (Components as TForm).name <> self.name) then (Components as TForm).Close; end; end;
ملاحظة كتبتها الآن , ولم اجربها ... ولكن يجب أن تعمل
أسف للتدخل أخي عروة لكنها لن تعمل ...
لأنه عند كتابة
اقتباسComponents
هذا يعني المكونات التابعة للفورم فقط
والصحيح هو
Application.Components
اخي عروة كلامك صحيح 100% وجربتها وهي تعمل
و غاب عن بالي استخدام المعامل is فهو حل المشكلة
ولكن لدي تعليق هو انه لا داعي لفحص Components هل هي نفس الفورم
لانه Component هم ابناء له و لن يحضر الفورم الاب عند المرور عليهم
تعديل بسيط
for i := 0 to ComponentCount -1 do begin if Components is TForm then (Components as TForm).Close; end;
رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.
لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"
شكرا اخوتي اصبح الكود يعمل بالطريقة الصحيحة وذلك بفضل الله وبكم واليكم الكود اللدي استعملته في برنامج
for i:=0 to Application.ComponentCount - 1 do if Application.Components is TForm then with (Application.Componentsas TForm) do if Name<>'Form1' then Close;
تم تعديل هذه المشاركة بواسطة hitam في 5 سبتمبر 2005 في 14:29
h_28
هذا الموضوع مغلق.
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…