15-10-12, 07:57 AM
كاتب الموضوع : أحمد جمال
بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .
السلام عليكم ورحمة الله وبركاته .
الانتظار في البرنامج .
من المناسب دائماً تحسب تضخم قاعدة بيانات البرنامج ، وما ينتج عنها من بطء في الاستخدام ، وبالتالي ضرورة البحث عن أوامر أقل جهداً على المعالج ، وفي حال الضرورة نبحث عن وسيلة لانتظار انتهاء العملية .
لادراك ذلك قم بنسخ السجلات الموجودة في قاعدة البيانات والخاصة بالبضاع حتى يصبح العدد 1000 بضاعة مثلاً . إذا لم يكن حاسبك سريعاً فسوف تلاحظ بطء العرض ووجود فترة انتظار تتراوح بين ( 2 ثانية للكومبيوتر السريع - 15 ثانية للجهاز البطيء ) ، كما أن عليك دائماً توقع الأسوء خصوصاً وأن هذا البرنامج موجه إلى سوبر ماركت ( جهاز كومبيوتر متواضع غالباً ) .
من أجل ذلك سوف نظهر للمستخدم أثناء فترة التحميل رسالة انتظار ، ولنصمم فورم بسيط جداً يحتوي على رسالة ( الرجاء الانتظار قليلاً ) .
ايضاً قم بالضغط على Ctrl+T لتظهر لك شاشة الأدوات ... اختر منها Microsoft Windows Common Coontrol 6.0 ، ثم ارسم الاداة ProgressBar على الفورم .
لا تنس أن تخفي CntrolBox الخاصة بالفورم وأن يظهر في المنتصف .
أخيراً اجعل اسم الفورم Frm_Wait .
سوف نستخدم هذا الفورم منذ الآن ليظهر في جميع العمليات التي قد يوجد بها بعض التأخير . وأول عملية سوف نطبق عليها هذا الفورم هي Refresh_Me .
بعد أن نتأكد من أن RecordCount <> 0 سوف نظهر هذا الفورم بتعليمة Show وبنهاية الامر سوف نخفيه بواسطة Unload Frm_Wait .
والآن جرب البرنامج ...
لو لاحظت حتى الآن لم نتعامل مع أداة ProgressBar وقبل البدء في التعامل معها سوف نذكر ببعض الخصائص المهمة لهذه الأداة .
لادراك ذلك قم بنسخ السجلات الموجودة في قاعدة البيانات والخاصة بالبضاع حتى يصبح العدد 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
كود :
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
كود :
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
والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .
والسلام عليكم ورحمة الله وبركاته .