الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيفية معرفة الفورمز المفتوحة التابعة لبرنامجي

مغلق
بدأه hitam في 4 سبتمبر 2005 · 18 رد · 1,255 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

ممكن احد يدلني عن كيفية معرفة الفورمز المفتوحة التابعة لبرنامجي ، واغلاقها كلها دون تمييز ، باستثناء الفورم الرئيسي

h_28

#2

هل تستخدم MDI Forms و لا عادي

اذا كنت تستخدم MDI Forms يمكن استخدام الكود التالي لاغلاق جميع النوافذ المفتوحة ضمن الفورم الاب

  for i:= 0 to MdiChildCount - 1 do
    MDIChildren.Close;

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#3

ولكن لاأستخدم في MDIForm

ممكن طريقة في حالة الاستخدام للفورم العادي؟

مع شكري للأخ waeldalol

h_28

#4

اخي الكريم

اليك كيف تفعل ذلك

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:

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#5

اخي العزيز جربتها ولكن لم تعمل هل من محاولة اخرى مع جزيل الشكر

h_28

#6

اخي الكريم اي من الاكود جربت و لم تعمل معك

انا جربتها و عملت 100%

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#7

جرب هذا المثال

Close All.zip

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#8

جربتها كلها اخي الكريم

h_28

#9

انا اعمل على دلفي 6 هل يوجد اختلاف في عمل هذه الدالة مع دلفي 7

h_28

#10

لا يوجد اي اختلاف بين النسختين في هذه الناحية

و لكن اي دالة تقصد لم افهم ارجو التوضيح

ماذا حصل في المثال

ما هي النتائج التي حصلت؟

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#11

هل نسيت ضبط الخاصية Tag على 10

اذا نسيت ذلك لن تعمل

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#12

جربت ولكن دون جدوى اضف ايضا

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

#13

هل طريقة تكوين الفورم لها علاقة بالامر

h_28

#14
hitam كتب:
هل طريقة تكوين الفورم لها علاقة بالامر

نعم

ComponentCount عدد المكونات المجودة داخل الفورم الأول أو المكونة بداخله

جرب أن تضيف

showmessage(inttostr(ComponentCount));

لتفهم الأمر جيدا

مثال مرفق عملته بدلفي5

جربه و أخبرني بالنتيجة :D

CloseAllForms.rar

تم تعديل هذه المشاركة بواسطة DeltaAziz في 5 سبتمبر 2005 في 13:49

d4baa0.gif
#15
اقتباس
جربت ولكن دون جدوى اضف ايضا

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;

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#16

إذا أردت إغلاق كل الفورمات , وليس فقط المنشأة من قبل 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;

ملاحظة كتبتها الآن , ولم اجربها ... ولكن يجب أن تعمل

#17

أسف للتدخل أخي عروة لكنها لن تعمل ...

لأنه عند كتابة

اقتباس
Components

هذا يعني المكونات التابعة للفورم فقط

والصحيح هو

Application.Components
d4baa0.gif
#18

اخي عروة كلامك صحيح 100% وجربتها وهي تعمل

و غاب عن بالي استخدام المعامل is فهو حل المشكلة

ولكن لدي تعليق هو انه لا داعي لفحص Components هل هي نفس الفورم

لانه Component هم ابناء له و لن يحضر الفورم الاب عند المرور عليهم

تعديل بسيط

  for i := 0 to ComponentCount -1 do
  begin
    if Components is TForm then
           (Components as TForm).Close;
  end;

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#19

شكرا اخوتي اصبح الكود يعمل بالطريقة الصحيحة وذلك بفضل الله وبكم واليكم الكود اللدي استعملته في برنامج

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

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…