المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : ملف مفتوح .. توظيف شريط حالة تقدم progress عند فك ضغط أي ملف مضغوط بشكل دقيق ( مميز )


Haitham.2012
24-12-2011, 04:45 PM
http://www.alheweny.org/mages2/salam.gif

تحياتي لكم جميعا .. من المهم جدا أن يكون هناك شئ يوضح للمستخدم مدى تقدم بعض الوظائف مثل عملية النسخ أو النقل أو فك الضغط ( وهو محور موضوعنا )

بمعنى أن يظهر للمستخدم شريط progress يوضح له مدى تقدم العملية الحالية

فعندما فكرت في عمل شريط progress يوضح مدى تقدم عملية فك الضغط لاحظت شئ غريب وهو أن البرنامج يقوم أولا بفك الضغط ثم يقوم بتحريك شريط ال progress أي لا فائدة لشريط ال progress

مبدئيا كنت أستخدم هذا الكود لتحريك شريط ال progress مع عملية فك الضغط

zip_contents = Zip.GetContents("Data\\Docs\\file.zip", true);
count = Table.Count(zip_contents);
for i=1, count do
Progress.SetCurrentPos("Progress1", i*100/count);
Zip.Extract("Data\\Docs\\PNG.zip", {zip_contents[i]}, _DesktopFolder, true, true, "", ZIP_OVERWRITE_ALWAYS, nil);
end


ولكن كما وضحت سابقا أنه لا يحرك شريط ال progress إلا بعد أن ينتهي من عملية فك الضغط فعليا


طيب لماذا ظهرت هذه المشكله ..


الفضل لله أولا ثم لأخي النصل القاطع وضح لي نقطه وهي كالتالي


نفترض أن لديك مجلد اسمه ( مجلد 1 ) و به 10 ملفات ومن ضمنهم مجلد اسمه ( مجلد 2 ) ويوجد داخل ( مجلد 2 ) مجموعه من الملفات


فعندما يقوم البرنامج بفك الضغط سوف يعتبر المجلد الثاني ( مجلد 2 ) كأنه ملف ( على الرغم انه سوف يقوم بفك الملفات التي بداخله أيضا وبشكل عادي ) ولكن هذا سوف يسبب مشكلة تاخر تقدم شريط ال progress



طيب .. لو لاحظنا في هذا الكود الخاص بمعرفة محتويات الملف المضغوط .. سنجد به حقل إختياري ( إذا كنت تريد أن تشمل المجلدات ام لا )

Zip.GetContents("Data\\Docs\\file.zip", true);


وهنا true أي اشمل المجلدات

و false أي لا تشمل المجلدات


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


لأنك لو استخدم الطريقه الأولى فقط وهي أن تشمل المجلدات


سوف تحدث مشكله وهي :

1 - حلقات التكرار ستزيد بعدد المجلدات ( يعني لو الملف المضغوط يحتوي على 10 ملفات و 5 مجلدات فإن حلقات التكرار ستكون 15 حلقه )

2 - المشكله التي تحدثنا عنها وهي فك الضغط أولا ثم تحريك شريط ال progress


ولو استخدمت الطريقه الثانية فقط وهي أن لا تشمل المجلدات

سوف تحدث مشكله وهي :

الملفات التي سوف يتم فك ضغطها ستنقص بعدد المجلدات بمعنى ( لو الملف المضغوط يحتوي على 10 ملفات و3 مجلدات سوف يتم فك ضغط 7 ملفات فقط ويترك ال 3 ملفات الباقيه )



وهنا علينا أن نستخدم الطريقتين


نستخدم الطريقه الاولى وهي أن تشمل المجلدات وذلك لمعرفة عدد المجلدات فقط ( ولكن بطريقه غير مباشرة وسنستخدم طريقه معينه لنعرف بها عدد المجلدات ) ستجدوا الكود في الملف


والطريقه الثانيه وهي أن لا تشمل المجلدات لكي نستخدمها في عملية فك الضغط الحقيقية


بمعنى ذكرنا في الطريقه الثانيه يتم فك ضغك الملفات ولكنها تنقص بعدد المجلدات وبالتالي سوف نحتاج لنزيد حلقات التكرار بعدد المجلدات حتى يتم فك ضغط كل الملفات وهذا ما حصلنا عليه في الطريقه الاولى


أتمنى أن تكون وضحت الفكره وهذا الملف المفتوح قد يسهل عليكم الأمر


http://img205.imageshack.us/img205/2457/44204469.png

كل ودي وتقديري

رابط الملف


http://www.mediafire.com/?3f22ztfa7azk95a

للعلم : ضع أولا أي ملف مضغوط داخل مجلد Docs حتى لا تظهر رسالة خطأ عند الضغط على الزر

مع مراعاة اسم الملف داخل المجلد واسمه في اكواد البرمجه

أبو يوسف
24-12-2011, 07:57 PM
جزاك الله خيرا أخانا هيثم إسماعيل وبارك الله فيك

azizsoft
24-12-2011, 11:38 PM
جزاكم الله خيرا أخانا الفاضل هيثم

abohmam
25-12-2011, 01:24 AM
بارك الله فيك اخانا هيثم

:shokr:

ايموتة
12-06-2015, 01:42 AM
بارك الله فيك ’ جزاك الله خيرا