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

نسخة كاملة : ما سبب عدم استجابة زر إغلاق
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورمضان كريم وتقبل الله منا ومنكم الصيام والقيام آمــــــــــتين
لماذ يتقف عن زر الإغلاق عن الإستجابة مع انني واضع به الكود close
وعدم الإستجابة هذا ليس دائما بل في بعض الأحيان
وعلى ما اظن عند ابقى في الفورم مدة طويلة متوقف عن العمل بها ربما مدة خمس دقائق وهذا فقط تخمين لا اكثر
كيف اتجاوز هذا المشكل كما انه ليس في كل الفورمات الموجودة بالبرنامج مع العلم ان لكل فرم زر اغلاق لكن لا اجد به هذه المشكلة الا في فورم واحد فقط
وشكرا
سؤال مبهم
وضح إن ردت ان يساعدك الأعضاء
وضح أكثر ماذا يحدث في البرنامج
لدي في الفورم رز لإغلاق الفورم
ووضعت هذا الكود في الحدث OnClick للزر
Close;
لكن في بعض الأحيان لا يستجيب
ولا اعرف السبب
وشكرا
هل تستخدم Thread في برنامجك ؟
وضح أكثر : ماطبيعة برنامجك !!
هل الزر لغلق الفورم أو لغلق البرنامج ؟
هل الفورم المراد غلقه Child أم Parent(MainForm) ؟
smp3 كتب :هل تستخدم thread في برنامجك ؟
وضح أكثر : ماطبيعة برنامجك !!
هل الزر لغلق الفورم أو لغلق البرنامج ؟
هل الفورم المراد غلقه child أم parent(mainform) ؟


السلام عليكم
هذه الفورم التي لايستجيب بها زر الإغلاق
واقصد اغلاق الفورم وليس البرنامج
السلام عليكم...

أعتقد أن المشكلة تحدث بعد النقر على أمر القائمة MenuItem1 أو أحد الزرين RzBitBtn2 أو RzBitBtn3 و ذلك بسبب وجود الحلقات التي تمر على كافة سجلات أحد الجداول. إذا كان البرنامج منشغلاً بتنفيذ إحدى الحلقات فإنه سيؤجل عملية الإغلاق إلى ما بعد انتهاء الحلقة.

إذا كان من الممكن مقاطعة الحلقة دون أضرار فضع الجملة Application.ProcessMessages مباشرة قبل نهاية الحلقة، و ربما تحتاج إلى ضبط متغير لمعرفة ما إذا تم النقر على زر الإغلاق أم لا.

سلام.
لكن بعدما وضعت هذا الكود قبل نهاية الحلقة لم يظهر اي شيء وكانني لم اغير شيئ
ووضعته ايضا في مسط الحلقة ولكن لم يحدث اي تغيير
ثم وضعته بعد نهاية الحلقة ونفس الشيء
hamou1982 كتب :السلام عليكم
هذه الفورم التي لايستجيب بها زر الإغلاق
واقصد اغلاق الفورم وليس البرنامج

السبب هو أنه هناك حلقات تأخذ الكثير من الوقت للتنفيذ ==> الحلقات تشتغل ك thread منفصل (غير مباشر)
لحل المشكل هناك العديد من الطرق :
الطريقة الأولى استخدام thread (مباشر ) : يقوم بعمليات الحفظ و التعديل على الجداول .. ثم في حدث الزر غلق الفورم تقوم بانهاء ال thread أولا ثم غلق الفورم
الطريقة الثانية استعمال متغير للخروج من جميع الحلقات
PHP كود :
var Closed :Boolean;
While 
not Table1.Eof do
Begin
....
if 
Closed then Exit; 
end; 
وفي حدث زر الغلق تجعل المتغير Closed = True

الطريقة الثالثة في حدث زر الغلق تقوم باخفاء الفورم أولا ثم غلقه :
PHP كود :
Begin
 Self
.Hide;
 
Close;
end; 
سيتم اغلاق الفورم بعد انتهاء الخروج من جميع الحلقات .
اشكرك احي على هذه المعلومة لقد استعملت الطريقة الثانية
والى حد الآن لم يحد المشكل واظن انه تمام
الا انني احتاج الى التوضيح اكثر للطريقة الأولى
هل استعملها في كلما كان هناك حلقة while في البرنامج
ام كيف
وهل هذه التعليمة
if Closed then Exit;
توضع قبل
table1.Next
ام بعده
اين توضع بالضبط
وشكرا
ما هو thread
ولما يستعمل
وهل المثال الذي ارفقته يوجد به thread
ضع مثال يحتوي على thread من فضلك