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

نسخة كاملة : لماذا البرنامج يتجمد عند عمليات For في Listview وماهو الحل لتخطي هذه المشكلة ؟
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله وبركاته ..

لماذا البرنامج يتجمد عند عمليات For I := 0 to Listview1.items.count Do

وماهو الحل المناسب لتخطي هذا التجمد ؟

جزاكم الله كل خير
الحل هو انشاء ثريد Thread جديد
السبب في حدوث التجمد هو عند انشاءك لبرنامج فهو يحتوي على Thread واحد على الاقل وعند الدخول الى حلقة تكرارية فان الثريد يشتغل لاتمام الحلقة التكرارية و لهذا يتجمد البرنامج
شكراً جزيلاً اخي هل من الممكن شرح لآنشاء ثيرد ؟ وكيف التعامل معه وجزاك الله خيراً

حيث اني حاولت سابقاً التعامل مع ثيرد وفشلت للأسف
يمكنك استخدام CreateThread لهذا الغرض أو يمكنك استخدام Class TThread لهدا الغرض أيضا
هدا مشروع يوضح كيفية استخدام CreateThread
كود :
http://www.gulfup.com/?ULkNuh
هذا رابط من msdn لشرح مدخلات الدالة
http://msdn.microsoft.com/en-us/library/...85%29.aspx

وهذا مشروع اخر يوضح كيفية التعامل مع TThread (المهم موجود في Unit2 )
أبحث أكثر في الأمر لان هذه المشاريع لا أظن بأنها ستقرب الفكرة
كود :
http://www.gulfup.com/?OB1Olg
أخي الكريم ليس بوسعي قول الا جزاك الله كل خير
الكود يجب ان يكون بهذا الشكل

كود :
For I := 0 to Listview1.items.count - 1 Do
اعتقد يمكن استعمال
application.processmessages

لتخفيف التجميد لاكن يبقى ثريد افضل
الاخوان افادوك من ناحية الثريد(Thread)
لكن لدي إضافة تخص الـTListview

عندما تريد تحديث أو اضافة عناصر جديدة في المكون تضع هذه الأوامر :
PHP كود :
try
      
Listview1.Items.BeginUpdate;
      for 
i := 0 to Listview1.items.count-1 do
      
begin
        
/////
        ///// write your code 
        /////
      
end;
    finally
      
Listview1.Items.EndUpdate;
      
Listview1.Refresh;
    
end; 

ويكون الكود الخاص بك داخل الـ try

حيث الأمر :
PHP كود :
Listview1.Items.BeginUpdate; 
يتيح لك التعديل في القائمة بدون حصول أخطاء أو تعليق
أما الأمر :
PHP كود :
Listview1.Items.EndUpdate; 
يغلق عملية التعديل على القائمة

أتمنى اني أفدتك , والسلام عليكم ورحمة الله وبركاتة