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


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


الملفات المرفقة
.rar   Unit1.rar (الحجم : 1.54 ك ب / التحميلات : 37)
الرد
#6
السلام عليكم...

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

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

سلام.
الرد
#7
لكن بعدما وضعت هذا الكود قبل نهاية الحلقة لم يظهر اي شيء وكانني لم اغير شيئ
ووضعته ايضا في مسط الحلقة ولكن لم يحدث اي تغيير
ثم وضعته بعد نهاية الحلقة ونفس الشيء
الرد
#8
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; 
سيتم اغلاق الفورم بعد انتهاء الخروج من جميع الحلقات .
Open Your Source .. Open Your Mind
الرد
#9
اشكرك احي على هذه المعلومة لقد استعملت الطريقة الثانية
والى حد الآن لم يحد المشكل واظن انه تمام
الا انني احتاج الى التوضيح اكثر للطريقة الأولى
هل استعملها في كلما كان هناك حلقة while في البرنامج
ام كيف
وهل هذه التعليمة
if Closed then Exit;
توضع قبل
table1.Next
ام بعده
اين توضع بالضبط
وشكرا
الرد
#10
ما هو thread
ولما يستعمل
وهل المثال الذي ارفقته يوجد به thread
ضع مثال يحتوي على thread من فضلك
الرد


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


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