تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الدرس الحادي عشر - الإنتظار في البرنامج
#1
كاتب الموضوع : أحمد جمال

بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .


الانتظار في البرنامج .


من المناسب دائماً تحسب تضخم قاعدة بيانات البرنامج ، وما ينتج عنها من بطء في الاستخدام ، وبالتالي ضرورة البحث عن أوامر أقل جهداً على المعالج ، وفي حال الضرورة نبحث عن وسيلة لانتظار انتهاء العملية .

لادراك ذلك قم بنسخ السجلات الموجودة في قاعدة البيانات والخاصة بالبضاع حتى يصبح العدد 1000 بضاعة مثلاً . إذا لم يكن حاسبك سريعاً فسوف تلاحظ بطء العرض ووجود فترة انتظار تتراوح بين ( 2 ثانية للكومبيوتر السريع - 15 ثانية للجهاز البطيء ) ، كما أن عليك دائماً توقع الأسوء خصوصاً وأن هذا البرنامج موجه إلى سوبر ماركت ( جهاز كومبيوتر متواضع غالباً ) .


من أجل ذلك سوف نظهر للمستخدم أثناء فترة التحميل رسالة انتظار ، ولنصمم فورم بسيط جداً يحتوي على رسالة ( الرجاء الانتظار قليلاً ) .


ايضاً قم بالضغط على Ctrl+T لتظهر لك شاشة الأدوات ... اختر منها Microsoft Windows Common Coontrol 6.0 ، ثم ارسم الاداة ProgressBar على الفورم .
لا تنس أن تخفي CntrolBox الخاصة بالفورم وأن يظهر في المنتصف .

أخيراً اجعل اسم الفورم Frm_Wait .


سوف نستخدم هذا الفورم منذ الآن ليظهر في جميع العمليات التي قد يوجد بها بعض التأخير . وأول عملية سوف نطبق عليها هذا الفورم هي Refresh_Me .

بعد أن نتأكد من أن RecordCount <> 0 سوف نظهر هذا الفورم بتعليمة Show وبنهاية الامر سوف نخفيه بواسطة Unload Frm_Wait .

والآن جرب البرنامج ...


لو لاحظت حتى الآن لم نتعامل مع أداة ProgressBar وقبل البدء في التعامل معها سوف نذكر ببعض الخصائص المهمة لهذه الأداة .

Scrolling
: وتحدد أسلوب العرض .

Max
: وتحدد القيمة القصوى للشريط .

Min
: وتحدد القيمة الصغرى ... غالباً 0 .

Value
: وتحدد القيمة الحالية للشريط .

والآن سوف نرى ما هي القيم التي نحتاج إليها في الكود .
العملية التي سنحتاج إلى اظهار هذه الشاشة فيها هي عملية تعبئة الجدول حيث أنها تأخذ الوقت الأكبر . ولذا :
Max
= عدد السجلات .

Min
= صفر .

Value
: تأخذ قيماً من 0 وحتى عدد السجلات حسب رقم السجل الحالي .


لن نتأخر في الشرح كثيراً وسنبدا في الكود مباشرة .
في Frm_Show وبعد أن تظهر Frm_Wait مباشرة قم بكتابة .



كود :
Frm_Wait.Show
Frm_Wait.ProgressBar1.Max = T1.RecordCount
Frm_Wait.ProgressBar1.Min = 0
Frm_Wait.ProgressBar1.Value = 0
والآن ... نعلم أن قيم هذا الشريط سوف تتغير مع كل سجل ، فتبدأ مع أول سجل = 0 ، ثم تزيد حتى آخر سجل . لذلك سنكتب بعد حلقة التكرار التي سوقف تملئ البيانات في الجدول :



كود :
Frm_Wait.ProgressBar1.Value = Frm_Wait.ProgressBar1.Value + 1
DoEvents

السطر الأول واضح لكن السطر الثاني يعطي فرصة للمعالج لكي يقوم بعملية الزيادة - جرب ازالتها ولاحظ الفرق - .



بنهاية هذا الدرس يصبح حدث Form_Load بالشكل التالي :



كود :
Private Sub Form_Load()
Frm_Show.Height = 5520
Frm_Show.Width = 8145
Frm_Show.Left = ((MDIForm1.Width - Frm_Show.Width) / 2)
Frm_Show.Top = ((MDIForm1.Height - Frm_Show.Height) / 2) - 400
Me.Show
Refresh_Me
End Sub
وحدث Refresh_Me :



كود :
Sub Refresh_Me()
SQL = "select tb_product.*,tb_category.*,tb_factory.* from tb_product,tb_factory,tb_category where tb_product.category=tb_category.number and tb_product.factory=tb_factory.number"
Set T4 = D1.OpenRecordset(SQL, dbOpenDynaset)

If T4.RecordCount = 0 Then Exit Sub

Frm_Wait.Show
Frm_Wait.ProgressBar1.Max = T1.RecordCount
Frm_Wait.ProgressBar1.Min = 0
Frm_Wait.ProgressBar1.Value = 0

T4.MoveLast
T4.MoveFirst

Combo1.Clear
Create_Flex

If T4.RecordCount <> 0 Then
T4.MoveFirst
For i = 0 To T4.RecordCount - 1
Frm_Wait.ProgressBar1.Value = Frm_Wait.ProgressBar1.Value + 1
DoEvents
MSFlexGrid1.Row = i + 1
MSFlexGrid1.Col = 1
MSFlexGrid1.Text = T4.Fields("tb_product.Number")
MSFlexGrid1.Col = 2
MSFlexGrid1.Text = T4.Fields("tb_product.name")
MSFlexGrid1.Col = 3
MSFlexGrid1.Text = T4.Fields("tb_category.name")
MSFlexGrid1.Col = 4
MSFlexGrid1.Text = T4.Fields("tb_factory.name")
MSFlexGrid1.Col = 5
MSFlexGrid1.Text = T4!price
MSFlexGrid1.Col = 6
MSFlexGrid1.Text = T4.Fields("Count")
MSFlexGrid1.Col = 7
MSFlexGrid1.Text = T4!Box_Count

Combo1.AddItem T4.Fields("tb_product.name")
T4.MoveNext
Next i

MSFlexGrid1.Col = 2
MSFlexGrid1.Sort = 7


MSFlexGrid1.Col = 0
For i = 0 To T4.RecordCount - 1
MSFlexGrid1.Row = i + 1
MSFlexGrid1.Text = i + 1
Next i
End If

T4.Close
Combo1.ListIndex = 0

Unload Frm_Wait
End Sub
والملف مرفق ...



والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .


الملفات المرفقة
.zip   prog7.zip (الحجم : 194.76 ك ب / التحميلات : 219)
}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الدرس الرابع والثلاثون والأخير - نبذة عن العملية العكسية + تجهيز البرنامج على Cd RaggiTech 0 11,112 15-10-12, 09:10 AM
آخر رد: RaggiTech
  الدرس الثالث والثلاثون - كيفية عمل اعداد Setup للبرنامج RaggiTech 0 3,979 15-10-12, 09:08 AM
آخر رد: RaggiTech
  الدرس الثاني والثلاثون - التحويل إلى exe RaggiTech 0 4,065 15-10-12, 09:07 AM
آخر رد: RaggiTech
  الدرس الحادي والثلاثون - تعددية المستخدمين - البحث وطباعة الفواتير - التعليمات ... RaggiTech 2 4,952 15-10-12, 09:05 AM
آخر رد: RaggiTech
  الدرس الثلاثون - التعامل مع شريط الأدوات ToolBar RaggiTech 0 3,822 15-10-12, 08:59 AM
آخر رد: RaggiTech
  الدرس التاسع والعشرون - التعامل مع أشرطة الحالة Statues Bar RaggiTech 0 3,602 15-10-12, 08:57 AM
آخر رد: RaggiTech
  الدرس الثامن والعشرون -الطباعة في البرنامج . RaggiTech 4 5,293 15-10-12, 08:56 AM
آخر رد: RaggiTech
  الدرس السابع والعشرون - مقدمة إلى التعامل مع التقارير من خلال DataReport RaggiTech 2 6,107 15-10-12, 08:45 AM
آخر رد: RaggiTech
  الدرس السادس والعشرون - التقارير اليومية ، والتقارير بين تاريخين RaggiTech 1 4,347 15-10-12, 08:39 AM
آخر رد: RaggiTech
  الدرس الخامس والعشرون - الإحصائيات والرسوم البيانية RaggiTech 0 3,766 15-10-12, 08:37 AM
آخر رد: RaggiTech

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


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