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

التأكد من حالة ال Form إذا كان Show أم لا

بدأه rober في 24 سبتمبر 2008 · 7 رد · 1,209 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

بدون مقدمات

لنفرض أن لدينا form رئيسي (fsMDIForm) و يحتوي على زر يقوم بفتح form فرعي (fsMDIChild)

أنا أستخدم الطريقة التالية بحيث أقوم بإنشاء الفورم الفرعي عند الضغط على الزر

form2 := tform2.CreateParented(form1.handel);
form2.show;

لكن هناك مشكلة هي عند النقر على الزر مرتين فيقوم بعمل إطارين form2

فما هي طريقة معرفة إن كان الإطار مفتوح أم لا بحيث عند النقر على الزر للمرة الأولى يفتح الإطار و النقر على الزر مرة أخرى يعود لنفس الإطار و لا يفتح إطار جديد

و إن كان هناك طريقة للـ fsMDIForm و fsMDIChild أرجو أن تفدوني بها

و السلام ختام

تم تعديل هذه المشاركة بواسطة rober في 24 سبتمبر 2008 في 16:36

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#2

بشكل سريع:

لأنشاء الفورم نستخدم

  1.  
  2. if form2 = nil then
  3. begin
  4. form2 := Tform2.Create(Application.MainForm);
  5. form2.Show;
  6. end
  7. else
  8. begin
  9. form2.WindowState:= wsNormal;
  10. end;
  11.  

و نضع في الحدث OnClose للفورم ما يلي:

  1.  
  2. procedure Tform2.FormClose(Sender: TObject; var Action: TCloseAction);
  3. begin
  4. Action := cafree;
  5. form2:= nil;
  6. end;
  7.  
  8.  

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

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

#3

يمكنك حفظ حالة النموذج في متغير

فعند إغلاق النموذج يحصل المتغير على القيمة False

وقبل فتح النموذج يتم التحقق , فإن كانت قيمته True فلا يفتح النموذج , وإلا فإنه يفتحه إن كانت القيمة False ثم يتغير إلى True

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#4

مشكورين يا أخوان

وجدت طريقة ربما قد تكون تعمل 100% و قد تكون مفيدة

 if not assigned(form2) then
   form2 := tform2.CreateParented(form1.handle);
form2.show;

Delphawi كتب:
يمكنك حفظ حالة النموذج في متغير

فعند إغلاق النموذج يحصل المتغير على القيمة False

وقبل فتح النموذج يتم التحقق , فإن كانت قيمته True فلا يفتح النموذج , وإلا فإنه يفتحه إن كانت القيمة False ثم يتغير إلى True

أخي Delphawi هذه الطريقة ممكن أن تنفع في حال كان المشروع على يحتوي على عدد كبير من الـ forms لأنه لو كان المشروع فيه أكثر من 10 form هل سيتم عمل متحول لكل form ؟

مشكورين مرة أخرى

تم تعديل هذه المشاركة بواسطة rober في 27 سبتمبر 2008 في 13:26

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#5

اخي roper : هذه الجملة

if not assigned(form2) then

تكافئ:

if form2 = nil then

فالتابع Assigned يقوم بفحص هل الفورم تساوي Nil أم لا.

وهذه الجملة:

begin
form2.WindowState:= wsNormal;
end;

تفيد في حال كانت الفورم المنشئة Minimized تقوم بإظهارها من جديد

شيئ أخر يجب أن تسند للفورم عند إغلاقها القيمة Nil.

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

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

#6

مشكور أخ وائل على التوضيح

و جزاك الله كل الخير

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#7
rober كتب:
أخي Delphawi هذه الطريقة ممكن أن تنفع في حال كان المشروع على يحتوي على عدد كبير من الـ forms لأنه لو كان المشروع فيه أكثر من 10 form هل سيتم عمل متحول لكل form ؟

يمكنك تغيير بيانات المتغير , ليحتوي على اسم النموذج الفعال (أو المفتوح) حالياً .

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#8
اقتباس
begin

if Form2.Showing <> true then

begin

Form2 := TForm2.Create(Application.MainForm);

Form2.ShowModal;

end else

begin

Form2.WindowState:= wsNormal;

end;

end;

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