15-10-12, 07:52 AM
كاتب الموضوع : أحمد جمال
بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .
تصميم شاشة عرض البضائع .
ملحوظة هامة للغاية : هذا الدرس هو الدرس الأكبر والأهم في هذه السلسلة وباقي الدروس سوف تعتمد بنسبة كبيرة على ما فهمناه سوية هنا ، لذا لا تستصعب الأمر وخذ وقتك في فهم الدرس .
السلام عليكم ورحمة الله وبركاته .
تصميم شاشة عرض البضائع .
ملحوظة هامة للغاية : هذا الدرس هو الدرس الأكبر والأهم في هذه السلسلة وباقي الدروس سوف تعتمد بنسبة كبيرة على ما فهمناه سوية هنا ، لذا لا تستصعب الأمر وخذ وقتك في فهم الدرس .
في هذا الدرس سوف نبدأ بعمل شاشة عرض البضائع ، وكما هي العادة عند التصميم فإن كل منا يصمم كما يحلو له ... لكن لا تنس أننا لا بد أن نشترك في المحتويات الرئيسية وهي :
قائمة في الأعلى لاختيار البضائع .
جدول لعرض جميع البضائع الموجودة .
مربعات نص لعرض البضاعة المختارة حالياً .
أزرار أوامر للتعديل والحذف ، وزرين لعملية بيع أو شراء تتصل بالشاشة الخاصة بها والتي سنقوم بعملها عندما يأتي دورها .
وأخيراً تتعين كأحد أبناء Children للفورم MDIForm وذلك عن طريق ضبط خاصية MDIChild = True .
لاضافة الجدول اضغط Ctrl+T واختر Microsoft Flex Grid 6.0 واخترنا هذا الجدول لامكانية التحكم المطلق به ، حيث نقوم بعمل كل شيء فيه ، وحتى لو أردنا عمل DBGrid متطور باستخدامه فسيمكننا ذلك .
لاظهار الشاشة من خلال القائمة نكتب الأمر التالي :
قائمة في الأعلى لاختيار البضائع .
جدول لعرض جميع البضائع الموجودة .
مربعات نص لعرض البضاعة المختارة حالياً .
أزرار أوامر للتعديل والحذف ، وزرين لعملية بيع أو شراء تتصل بالشاشة الخاصة بها والتي سنقوم بعملها عندما يأتي دورها .
وأخيراً تتعين كأحد أبناء Children للفورم MDIForm وذلك عن طريق ضبط خاصية MDIChild = True .
لاضافة الجدول اضغط Ctrl+T واختر Microsoft Flex Grid 6.0 واخترنا هذا الجدول لامكانية التحكم المطلق به ، حيث نقوم بعمل كل شيء فيه ، وحتى لو أردنا عمل DBGrid متطور باستخدامه فسيمكننا ذلك .
لاظهار الشاشة من خلال القائمة نكتب الأمر التالي :
كود :
[align=right]Case 0
If T1.RecordCount = 0 Then
MsgBox " لا توجد أي بضائع لعرضها ، لاضافة بضاعة جديدة اختر اضافة - اضافة بضاعة ", vbExclamation + arabic, "عرض البضائع"
Exit Sub
End If
Frm_Show.Show[/align]
لو ظل الفورم على تصميمه القديم من حيث
BorderStyle=2 فستلاحظ تغير حجم الشاشة - ولكن لو ضبطت الخاصية إلى 1 فلن تحدث هذه المشكلة .
لن ننسى اضافة السطرين التاليين ، حيث يقومان بتوسيط الفورم كما فعلنا مع Frm_Info ، لذلك سنضيفهما في حدث Load للفورم :
كود :
[align=right]Frm_Show.Left = ((MDIForm1.Width - Frm_Show.Width) / 2)
Frm_Show.Top = ((MDIForm1.Height - Frm_Show.Height) / 2) - 800[/align]
لنبدأ الآن سوية في تصميم اجراء Refresh_Me والذي ينطلق عند تشغيل الفورم Form_Load ، وعند كل عملية حذف أو تعديل .
بما أن لدينا كائن T1 يحتوي على معلومات البضائع ، فلم لا نقوم بالدوران على هذا الكائن من البداية إلى النهاية ووضع الاسماء فيه إلى القائمة :
بما أن لدينا كائن T1 يحتوي على معلومات البضائع ، فلم لا نقوم بالدوران على هذا الكائن من البداية إلى النهاية ووضع الاسماء فيه إلى القائمة :
كود :
[align=right]Sub Refresh_Me()
Combo1.Clear
If T1.RecordCount <> 0 Then
T1.MoveFirst
For i = 0 To T1.RecordCount - 1
Combo1.AddItem T1!Name
T1.MoveNext
Next i
End If[/align]
هذا ولكي تعرض البضائع في هذه القائمة مرتبة أبجدياً فإننا نضبط خاصية Sorted للقائمة لتساوي True .
والآن فإننا وبنفس طريقة عرض البيانات في القائمة نريد لكامل البيانات أن تعرض في الجدول ، ولذا سوف نضعهم جميعاً داخل حلقة تكرار واحدة تقليلاً للجهد على الذاكرة . ولكنني أريد أن أشرح كيفية اضافة بيانات في MSFlexGrid .
واجمالاً: توجد خاصيتين على قدر كبير من الأهمية هما Col و Row واللتان تحددان في نقطة التقاءهما خلية Cell لها خصائص أشهرها Text لعرض النص فيها .
هناك أيضاً خاصيتي Rows و Cols واللتان تحددان عدد الصفوف والأعمدة في الجدول ، ووظيفة Clear والتي تقوم بمسح كافة محتويات الجدول .
سوف نقوم بعمل اجراء نسمية Create_Flex وذلك لتهيئة الجدول لنتعامل معه ، يحتوي هذا الأجراء على وضع عدد الأعمدة = 7 ، الصفوف = عدد السجلات + 1 ، ونضيف التعبيرات المناسبة على رأس كل جدول .
لعمل المهمتين الأولتين :
والآن فإننا وبنفس طريقة عرض البيانات في القائمة نريد لكامل البيانات أن تعرض في الجدول ، ولذا سوف نضعهم جميعاً داخل حلقة تكرار واحدة تقليلاً للجهد على الذاكرة . ولكنني أريد أن أشرح كيفية اضافة بيانات في MSFlexGrid .
واجمالاً: توجد خاصيتين على قدر كبير من الأهمية هما Col و Row واللتان تحددان في نقطة التقاءهما خلية Cell لها خصائص أشهرها Text لعرض النص فيها .
هناك أيضاً خاصيتي Rows و Cols واللتان تحددان عدد الصفوف والأعمدة في الجدول ، ووظيفة Clear والتي تقوم بمسح كافة محتويات الجدول .
سوف نقوم بعمل اجراء نسمية Create_Flex وذلك لتهيئة الجدول لنتعامل معه ، يحتوي هذا الأجراء على وضع عدد الأعمدة = 7 ، الصفوف = عدد السجلات + 1 ، ونضيف التعبيرات المناسبة على رأس كل جدول .
لعمل المهمتين الأولتين :
كود :
[align=right]MSFlexGrid1.Clear
MSFlexGrid1.Cols = 7
MSFlexGrid1.Rows = T1.RecordCount + 1[/align]
أما للمهمة الثانية فسوف نتنقل بين الأعمدة ، ونضع على رأس كل عمود القيمة المناسبة له :
كود :
[align=right]MSFlexGrid1.Row = 0
MSFlexGrid1.Col = 0
MSFlexGrid1.Text = "ت"
MSFlexGrid1.Col = 1
MSFlexGrid1.Text = "رقم"
MSFlexGrid1.Col = 2
MSFlexGrid1.Text = " اسم البضاعة"
MSFlexGrid1.Col = 3
MSFlexGrid1.Text = "النوع"
MSFlexGrid1.Col = 4
MSFlexGrid1.Text = "المصنع"
MSFlexGrid1.Col = 5
MSFlexGrid1.Text = "السعر"
MSFlexGrid1.Col = 6
MSFlexGrid1.Text = "العدد"
MSFlexGrid1.Col = 7
MSFlexGrid1.Text = "وحدة/صندوق"[/align]
ولكن ماذا عن توسيط الأعمدة ... نستطيع ذلك من خلال كود كالتالي :
كود :
[align=right]MSFlexGrid1.ColAlignment(0) = 5
MSFlexGrid1.ColAlignment(1) = 3
MSFlexGrid1.ColAlignment(2) = 5
MSFlexGrid1.ColAlignment(3) = 5
MSFlexGrid1.ColAlignment(4) = 5
MSFlexGrid1.ColAlignment(5) = 5
MSFlexGrid1.ColAlignment(6) = 5[/align]
حيث أن 5 ترمز للمنتصف ، أما 3 فترمز إلى المحاذاة إلى اليمين .
نفس الأمر بالنسبة لعرض كل عمود ... ولن نغير سوى في عرض الأعمدة التي لا يناسبنا حجمها الافتراضي وهي الأول ( تسلسل ) والثاني ( اسم البضاعة ) والثالث والرابع ( النوع - المصنع ) :
نفس الأمر بالنسبة لعرض كل عمود ... ولن نغير سوى في عرض الأعمدة التي لا يناسبنا حجمها الافتراضي وهي الأول ( تسلسل ) والثاني ( اسم البضاعة ) والثالث والرابع ( النوع - المصنع ) :
كود :
[align=right]MSFlexGrid1.ColWidth(0) = 500
MSFlexGrid1.ColWidth(1) = 1500
MSFlexGrid1.ColWidth(2) = 1500
MSFlexGrid1.ColWidth(3) = 1500[/align]
وسوف نستدعي هذا الإجراء في بداية Refresh_Me .
ولكن ماذا عن تعبئة الجدول داخل حلقة التكرار ، في الواقع بنفس الطريقة التي كتبنا بها رؤوس الأعمدة سوف نكتب القيم الأخرى ، إلا أن رقم الصف سوف يصبح قيمة المتغير i+1 .
ومن ذلك نستطيع أن نحصل على كود اجمالي لدالة Refresh_Me - مؤقتاً - .
ولكن ماذا عن تعبئة الجدول داخل حلقة التكرار ، في الواقع بنفس الطريقة التي كتبنا بها رؤوس الأعمدة سوف نكتب القيم الأخرى ، إلا أن رقم الصف سوف يصبح قيمة المتغير i+1 .
ومن ذلك نستطيع أن نحصل على كود اجمالي لدالة Refresh_Me - مؤقتاً - .
كود :
[align=right]Sub Refresh_Me()
Combo1.Clear
Create_Flex
If T1.RecordCount <> 0 Then
T1.MoveFirst
For i = 0 To T1.RecordCount - 1
MSFlexGrid1.Row = i + 1
MSFlexGrid1.Col = 0
MSFlexGrid1.Text = T1!Number
MSFlexGrid1.Col = 1
MSFlexGrid1.Text = T1!Name
MSFlexGrid1.Col = 2
MSFlexGrid1.Text = T1!Category
MSFlexGrid1.Col = 3
MSFlexGrid1.Text = T1!Factory
MSFlexGrid1.Col = 4
MSFlexGrid1.Text = T1!price
MSFlexGrid1.Col = 5
MSFlexGrid1.Text = T1.Fields("Count")
MSFlexGrid1.Col = 6
MSFlexGrid1.Text = T1!Box_Count
Combo1.AddItem T1!Name
T1.MoveNext
Next i
End If
End Sub[/align]
لاحظ أنني استخدمت طريقة ثانية في القراءة مع الحقل Count ذلك أنه ينبغي أن يوضع بين علامتي تنصيص لأنها كلمة محجوزة في الفيجوال بيسك .
يتبع ...
يتبع ...