|
شريط التقدم Progress Bar |
شريط التقدم هو ذلك الشريط الذي يظهر أثناء قيام الحاسب بتنفيذ عملية ما لكي يعرف المستخدم مقدار ما تم إنجازه ، ويظهر في الأكسس إما في شريط المعلومات في الجهة اليمنى السفلية منه أو عن طريق استخدام عنصر تحكم اكتف اكس .
من أمثلة العمليات التي قد نرغب في لإظهار شريط تقدم للمستخدم فيها :
1- إلحاق السجلات بالجدول .
2- حذف سجلات من جدول إذا كانت السجلات كثيرة لأن ذات العدد القليل سيتم حذفها في اجزاء بسيطة من الثانية ولن يمكن ملاحظة الحذف .
3- عند عمل حساب أو تقرير ختامي ختامي .
4- عند أرشفة سجلات أو القيام بعمليات تحديث ضخمة .
في شريط المعلومات انظر الصورة :

باستخدام عنصر اكتف اكس انظر الصورة :

فالقاعدة الأساسية في ذلك أن يكون عدد السجلات كبيراً حتى يمكن رؤية الشريط وهو يتحرك وأن يكون التنفيذ متتالي ، يعني لابد من حلقة تكرارية ، سواء تكرار حذف أو تكرار إلحاق أو تحديث أو غيرها .
يعني مثلاً إذا حذفنا مائة سجل دفعة واحدة باستعلام حذف فلن تستطيع مشاهدة أي شريط تقدم لأن الإجراء يتم مرة واحدة ، لابد من تصور هذا الأمر جيداً .
طبعاً يمكن التلاعب بذلك ووضع حلقة تكرارية وهمية تبدأ بعد أو قبل إنجاز العملية لإظهار أن العملية تتم شيئاً فشيئاً ، وسيأتي بيان ذلك .
لإظهار شريط التقدم أثناء إجراء عملية ما يمكن ذلك بطريقتين :
(1) باستخدام SysCmd .
(2) باستخدام عنصر تحكم ActiveX .
أولا : بالكود
بهذه الطريقة يتم استخدام SysCmd .
لنفرض أننا نريد أن نلحق مائة سجل بجدول موجود في قاعدة البيانات اسمه جدول ويوجد فيه حقلين باسم تسلسل واسم حقل .
1- افتح نموذج جديد .
2- في حدث نقر زر أمر مثلا ضع :
|
Dim str As String
SetOption
"Confirm Action Queries", False |
عند تشغيل هذا الكود قد لاتستطيع مشاهدة شريط التقدم لسرعة تنفيذ العملية -والظاهر أن هناك مشكلة في برمجة الأكسس نفسه- لذلك جعلته يستدعي دالة توقف الإجراء لوقت معين في مثال السابق جعلتها توقف الإجراء 3 من مائة من الثانية ، هذا الزمن بسيط جداً ولكنه كفيل بإظهار شريط التقدم واضحاً على شريط المعلومات .
تحت سطر DoCmd وقبل Next I في الكود السابق ضع :
|
Pause 0.03 |
وفي أسفل الوحدة النمطية الخاصة بالنموذج ضع الإجراء التالي :
Private Sub Pause(ByVal nSecond As Single) |
س: هذا فيما لو كان الإلحاق يتم بصورة تدريجية كما في المثال السابق ، ولكن إذا كان الإلحاق يتم بصورة كاملة مرة واحدة فما العمل ؟
ج: إما أن نضع معيار بحيث تحدث العملية على سجل سجل في الجدول أو نضع حلقة تكرارية وهمية بعد إنجاز العملية والطريقة الأخيرة أسهل .
س: ولكن ألا يؤخر ذلك في إنجاز العملية ما أقصده ألن يزيد ذلك في الوقت المفترض لإنجازها ؟
ج: هذا صحيح لأن الحلقة نفسها تكون بعد نهاية العملية فمن الطبيعي أننا سنضيف وقتاً آخر لوقت إنجاز العملية الأصلي .
س: أريد مثال على ذلك .
ج : استخدم نفس الكود السابق مع الإجراء Pause ولكن ضع الأوامر قبل حلقة التكرار ، مثال ذلك أننا نريد حذف كل سجلات الجدول السابق ، في حدث عند نقر زر أمر ضع الكود التالي :
|
Dim str As String
DoCmd.RunSQL ("DELETE
جدول.* FROM جدول;")
For I = 1 To 100 |
وفي أسفل الوحدة النمطية ضع إجراء الإيقاف المؤقت :
Private Sub Pause(ByVal nSecond As Single) |
كما تشاهد في الكود وضعنا عدد مرات التكرار مائة وإذا أردت أن يكون عدد مرات التكرار هو نفسه عدد السجلات الموجودة في الجدول قبل الحذف فاستخدم دالة Dcount كالتالي :
|
Dim str As String SysCmd acSysCmdRemoveMeter |
ثانياً : باستخدام عنصر تحكم اكتف اكس
[1] يتم في هذه الطريقة استخدام العنصر المسمى MSCOMCTL.OCX وقد تحتاج إلى تسجيل هذا العنصر إذا لم يكن مسجلاً .
يوجد هذا العنصر في المسار C:\Windows\System أو حسب مسار الوندوز عندك .
ولتسجيله انقر قائمة أدوات ثم عناصر تحكم اكتف اكس ثم تسجيل ثم اختر الكائن والموجود في مجلد System للوندوز مي أو مجلد System32 للوندوز اكس بي ثم موافق ثم إغلاق ، انظر الصورة :
[2]
ولإدراج الكائن انقر قائمة إدراج ثم عنصر تحكم اكتف اكس ثم اختر الكائن المسمى :
Micosoft ProgressBa Control Version 6.0
وإذا لم تجده فقد تجد الاصدار الخامس وليس السادس .
انظر الصورة التالية :
بعد ذلك سيظهر هذا العنصر على شكل مستطيل فارغ قم بتعديل ابعاده كما تحب .
[3] الآن لإظهار شريط التقدم له ضع في حدث نقر زر أمر مثلا الكود التالي مع ملاحظة أن اسمع العنصر في الكود هو ProgressBar2 :
|
Dim i As Integer |
لايحتاج هذا العنصر إلى فترة إيقاف مثل السابق .
[4] والآن إليك بعض خصائص هذا الكائن :
(1) خاصية MAX : وهي من أهم الخصائص له حيث تحدد الحد الأقصى له ، ففي مثالنا السابق جعلنا الحد الاقصى للعنصر 100 ، وهي القيمة الافتراضية للعنصر عند إدراجه ، ولكن إذا كان عدد العناصر أكبر أو أقل فيجب أن نغير هذه الخاصية إما من صفحة الخصائص في صفحة التبويب غير ذلك أو بالكود كالتالي :
|
ProgressBar2.Max= رقم |
(2) Min : القيمة الابتدائية للعنصر ، اتركها على القيمة الافتراضية صفر .
(3) MousePointer : لاختيار شكل الماوس أُثناء مروره على العنصر قبل بدء تشغيله .
(4) MouseIcon : لم أجد لها تأثيراً .
(5) BorderStyle : لم أجد لها تأثيراً واضحاً سوى تغير حجم المربعات أثناء أثناء التنفيذ .
(6) Appearance : لها خيارين إما 1-cc3d وهو يشبه خاصية تأثير خاص غاطس لبعض كائنات الأكسس كمربعات النصوص والخيار الثاني هو 0-ccFlat وهو يشبه خاصية غير مفصل .
(7) Orientation : وهي اتجاه العنصر إما أفقي القيمة صفر أو عمودي القيمة واحد .
(8) Scrolling : وهي إما Standard Scrolling وهي أن تظهر خطوط بيضاء أثناء تقدم المؤشر أو Smooth Scrolling بدون ظهور لها .
يوجد لهذا العنصر عدة أحداث وهي :
1- عند التحديث
2- عند الإدخال
3- عند الخروج
4- عند التركيز
5- عند فقدان التركيز
[5] لإظهار معلومات أثناء تنفيذ العملية ، مثال ذلك إذا أردنا أن نظهر معلومات معينة في مربع تسمية اسمه تسمية5 أثناء التنفيذ نستخدم الكود التالي تحت السطر ProgressBar2 = i كالتالي :
|
If
ProgressBar2 = 100 Then |
[6] لوضع نموذج مخصص يمكن استدعاؤه من أي نموذج أو حتى تقرير :
(1) أنشئ نموذج جديد .
(2) اجعل الخواص التاليه له إلى لا :
محددات السجلات
أزرار التنقل
الخطوط المقسمة
تغيير حجم تلقائي
قائمة مختصرة
(3) اجعل نمط الحدود بلا .
(4) اجعل خاصية منبثق إلى نعم وخاصية مشروط إلى نعم .
(5) في حدث عند الفتح له ضع الكود التالي :
|
If
Me.OpenArgs <> "" Then |
(6) في حدث عند عداد الوقت ضع :
|
ProgressBar2.Max =
Me.OpenArgs |
(7) وفي آخر الوحدة النمطية ضع :
|
Private Sub Pause(ByVal
nSecond As Single) |
(8) وعند فتح هذا النموذج فقط مرر له رقم مثل :
|
DoCmd.OpenForm "اسم النموذج",,,,,,100 |
ملاحظة : الأمثلة المرفقة
لاتشمل كل ماتم التكلم عنه هنا .
|
مثال بالأكسس 97 |
كل الملفات مضغوطة تحتاج إلى برنامج فك الضغط انقر هنا لتحميل الملف |
مثال بالأكسس 2000 |
![]()
