المنتدي التعليمي والترفيهي
عزيزي الزائر / عزيزتي الزائرة يرجي التكرم بتسجبل الدخول اذا كنت عضو معنا
او التسجيل ان لم تكن عضو وترغب في الانضمام الي اسرة المنتدي
سنتشرف بتسجيلك
شكرا
ادارة المنتدي


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

نتائج البحث
 
Rechercher بحث متقدم
المواضيع الأخيرة
» نكات مساطيل
الثلاثاء يناير 24, 2012 4:12 pm من طرف فاطمة عبدالله بابكر

» تفضل هنا عزيزي الزائر
السبت أغسطس 27, 2011 4:39 pm من طرف bee55

» يلا نبني مصر بجد
السبت أغسطس 27, 2011 4:38 pm من طرف bee55

» مصر تنادي هل من مجيب معاً لبناء مصر
الجمعة يوليو 01, 2011 10:00 am من طرف hobaaa2010

» فرصة عظيمة لشباب مصر منحة مجانية لتعلم اللغة الانجليزية
الثلاثاء يناير 18, 2011 1:51 am من طرف bee55

» فلم دارفور [you]
الجمعة ديسمبر 17, 2010 12:06 pm من طرف bee55

» ثنائي الوصلة – الدايود - Diod
الثلاثاء ديسمبر 14, 2010 12:00 pm من طرف bee55

» سجل حضورك بالصلاة علي النبي
الأحد ديسمبر 12, 2010 10:52 am من طرف bee55

» ازاعة القرآن الكريم
الأحد ديسمبر 12, 2010 8:15 am من طرف bee55

ازرار التصفُّح
 البوابة
 الصفحة الرئيسية
 قائمة الاعضاء
 البيانات الشخصية
 س .و .ج
 بحـث

شاطر | 
 

 الدرس العاشر: شاشة عرض البضائع

اذهب الى الأسفل 
كاتب الموضوعرسالة
bee55
صول
avatar

عدد المساهمات : 110
نقاط : 3452
التقييم : 8
تاريخ التسجيل : 02/05/2010
العمر : 27

مُساهمةموضوع: الدرس العاشر: شاشة عرض البضائع   الجمعة أكتوبر 22, 2010 9:58 am

الكاتب احمد جمال
بسم الله الرحمن الرحيم .
[right]السلام عليكم ورحمة الله وبركاته .



تصميم شاشة عرض البضائع .

ملحوظة هامة للغاية : هذا الدرس هو الدرس الأكبر والأهم في هذه السلسلة وباقي الدروس سوف تعتمد بنسبة كبيرة على ما فهمناه سوية هنا ، لذا لا تستصعب الأمر وخذ وقتك في فهم الدرس .



في هذا الدرس سوف نبدأ بعمل شاشة عرض البضائع ، وكما هي العادة عند التصميم فإن كل منا يصمم كما يحلو له ... لكن لا تنس أننا لا بد أن نشترك في المحتويات الرئيسية وهي :


قائمة في الأعلى لاختيار البضائع .
جدول لعرض جميع البضائع الموجودة .
مربعات نص لعرض البضاعة المختارة حالياً .


أزرار أوامر للتعديل والحذف ، وزرين لعملية بيع أو شراء تتصل بالشاشة الخاصة بها والتي سنقوم بعملها عندما يأتي دورها .
وأخيراً تتعين كأحد أبناء Children للفورم MDIForm وذلك عن طريق ضبط خاصية MDIChild = True .

لاضافة الجدول اضغط Ctrl+T واختر Microsoft Flex Grid 6.0 واخترنا هذا الجدول لامكانية التحكم المطلق به ، حيث نقوم بعمل كل شيء فيه ، وحتى لو أردنا عمل DBGrid متطور باستخدامه فسيمكننا ذلك .

لاظهار الشاشة من خلال القائمة نكتب الأمر التالي :


رمز:
Case 0
If T1.RecordCount = 0 Then
MsgBox " لا توجد أي بضائع لعرضها ، لاضافة بضاعة جديدة اختر اضافة - اضافة بضاعة ", vbExclamation + arabic, "عرض البضائع"
Exit Sub
End If
Frm_Show.Show


لو ظل الفورم على تصميمه القديم من حيث
BorderStyle=2 فستلاحظ تغير حجم الشاشة - ولكن لو ضبطت الخاصية إلى 1 فلن تحدث هذه المشكلة .

لن ننسى اضافة السطرين التاليين ، حيث يقومان بتوسيط الفورم كما فعلنا مع Frm_Info ، لذلك سنضيفهما في حدث Load للفورم :


رمز:
Frm_Show.Left = ((MDIForm1.Width - Frm_Show.Width) / 2)
Frm_Show.Top = ((MDIForm1.Height - Frm_Show.Height) / 2) - 800

لنبدأ الآن سوية في تصميم اجراء Refresh_Me والذي ينطلق عند تشغيل الفورم Form_Load ، وعند كل عملية حذف أو تعديل .

بما أن لدينا كائن T1 يحتوي على معلومات البضائع ، فلم لا نقوم بالدوران على هذا الكائن من البداية إلى النهاية ووضع الاسماء فيه إلى القائمة :


رمز:
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


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

والآن فإننا وبنفس طريقة عرض البيانات في القائمة نريد لكامل البيانات أن تعرض في الجدول ، ولذا سوف نضعهم جميعاً داخل حلقة تكرار واحدة تقليلاً للجهد على الذاكرة . ولكنني أريد أن أشرح كيفية اضافة بيانات في MSFlexGrid .



واجمالاً: توجد خاصيتين على قدر كبير من الأهمية هما Col و Row واللتان تحددان في نقطة التقاءهما خلية Cell لها خصائص أشهرها Text لعرض النص فيها .

هناك أيضاً خاصيتي Rows و Cols واللتان تحددان عدد الصفوف والأعمدة في الجدول ، ووظيفة Clear والتي تقوم بمسح كافة محتويات الجدول .

سوف نقوم بعمل اجراء نسمية Create_Flex وذلك لتهيئة الجدول لنتعامل معه ، يحتوي هذا الأجراء على وضع عدد الأعمدة = 7 ، الصفوف = عدد السجلات + 1 ، ونضيف التعبيرات المناسبة على رأس كل جدول .
لعمل المهمتين الأولتين :


رمز:
MSFlexGrid1.Clear
MSFlexGrid1.Cols = 7
MSFlexGrid1.Rows = T1.RecordCount + 1

أما للمهمة الثانية فسوف نتنقل بين الأعمدة ، ونضع على رأس كل عمود القيمة المناسبة له :


رمز:
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 = "وحدة/صندوق"


ولكن ماذا عن توسيط الأعمدة ... نستطيع ذلك من خلال كود كالتالي :


رمز:
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

حيث أن 5 ترمز للمنتصف ، أما 3 فترمز إلى المحاذاة إلى اليمين .
نفس الأمر بالنسبة لعرض كل عمود ... ولن نغير سوى في عرض الأعمدة التي لا يناسبنا حجمها الافتراضي وهي الأول ( تسلسل ) والثاني ( اسم البضاعة ) والثالث والرابع ( النوع - المصنع ) :


رمز:
MSFlexGrid1.ColWidth(0) = 500
MSFlexGrid1.ColWidth(1) = 1500
MSFlexGrid1.ColWidth(2) = 1500
MSFlexGrid1.ColWidth(3) = 1500

وسوف نستدعي هذا الإجراء في بداية Refresh_Me .
ولكن ماذا عن تعبئة الجدول داخل حلقة التكرار ، في الواقع بنفس الطريقة التي كتبنا بها رؤوس الأعمدة سوف نكتب القيم الأخرى ، إلا أن رقم الصف سوف يصبح قيمة المتغير i+1 .
ومن ذلك نستطيع أن نحصل على كود اجمالي لدالة Refresh_Me - مؤقتاً - .


رمز:
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


لاحظ أنني استخدمت طريقة ثانية في القراءة مع الحقل Count ذلك أنه ينبغي أن يوضع بين علامتي تنصيص لأنها كلمة محجوزة في الفيجوال بيسك
[/right]

_________________
لا تنسي ان تدعو اصدقائك لهذا المنتدي
لا تنسي ان تضيفنا الي المفضلة
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://learn.ahladalil.com
bee55
صول
avatar

عدد المساهمات : 110
نقاط : 3452
التقييم : 8
تاريخ التسجيل : 02/05/2010
العمر : 27

مُساهمةموضوع: رد: الدرس العاشر: شاشة عرض البضائع   الجمعة أكتوبر 22, 2010 9:59 am

ترتيب البضائع في الجدول .

بالتأكيد قد مر بك هذان الأمران خلال الدروس سابقاً :


رمز:
MSFlexGrid1.ColAlignment(0) = 5

MSFlexGrid1.Col = 6
MSFlexGrid1.Text = T1!Box_Count

ذكرت بهذين الامرين فقط لتدرك أننا حينما نريد تطبيق جميع خصائص التنسيق على هذه الأداة فإننا نستخدم أحد طريقتين - حسب الخاصية فإما إن نذكر اسم الأداة MSFlexGrid1 ثم الخاصية ، وأخيراً نضع رقم هذا العمود بين قوسين ، أو نذكر رقم العمود أو الصف - أو كليهما - ثم نطبق عليه هذه الخاصية وهو مثل خاصية Sort والتي تقوم بالترتيب ، لذا فلترتيب الحقول حسب عمود الاسم فإننا نكتب الكود التالي :


رمز:
MSFlexGrid1.Col = 1
MSFlexGrid1.Sort = 7

ومعنى الرقم 7 واضح لمن اطلع على الدرس على الرابط السابق ...

ولكن ربما تكون قد لاحظت ان الأرقام لم تعد مرتبة ، هل هذا صحيح ؟
حل هذه المشكلة أن نضع عداداً جديداً كلياً وصفاً جديداً آخراً يحتوي على التسلسل غير الرقم ، فلنر كيف نقوم بذلك .
أولاً قم بزيادة عدد الأعمدة بمقدار عمود واحد ... أيضاً قم بتحويل رقم كل عمود إلى الرقم + 1 .
قم بذلك وشاهد النتيجة ، ستجد ظهور صف فارغ على اليمين من الجدول .
سنغير الآن من اسم عمود الرقم ليصبح ( الرقم ) فيما يصبح العمود الجديد ( ت ) .

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


ولذلك نضع الكود التالي بعد الترتيب :


رمز:
MSFlexGrid1.Col = 0
For i = 0 To T1.RecordCount - 1
MSFlexGrid1.Row = i + 1
MSFlexGrid1.Text = i + 1
Next i

وضع أسماء الموردين والأنواع بدلاً من أرقامها .

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


رمز:
MSFlexGrid1.Col = 3
MSFlexGrid1.Text = T1!Category
MSFlexGrid1.Col = 4
MSFlexGrid1.Text = T1!Factory

وسنرى الآن كيف نقوم بهذه المهمة .
هل تتذكر كيف قمنا بفتح قاعدة T1 في البداية :


رمز:
Set T1 = D1.OpenRecordset("Tb_Product", dbOpenTable)

لكننا لا نحتاج إلى فتحها بهذه الطريقة ، بل إننا نريد أن نقوم بفتح قاعدة بجملة استعلام للعلاقات التي بين الجداول ، لهذا الغرض سوف نستخدم T4 وذلك بالشكل التالي :


رمز:
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)


تقوم جملة الاستعلام هذه باستخراج جميع المعلومات من الجداول الثلاثة مع دمج كل معلومات المصانع والأنواع جنباً إلى جنب مع معلومات البضائع ، ولتتكون لديك نظرة أكثر تركيزاً قم بتجربة هذه الجملة في Access .

وإذا كنت تود معرفة المزيدعن مثل هذه الجمل ، وكيف تمت كتابتها ، فبامكانك مراجعة الدروس الخاصة بجمل الاستعلام على هذا الرابط :

http://www.vb4arab.com/vb/forumdisplay.php?f=23


وسيوضع هذا الأمر في حدث Refresh_Me .

الآن لا تنس أن تقوم بتحويل كل T1 إلى T4 في جميع هذه النافذة .
والآن لنر أسماء لحقول مثل Number و Name فإننا عندما نضعها فأيهما نقصد ، هل تلك التي في جدول البضائع أم التي في جدول المصانع أم الأنواع ، لذا فإننا لا بد أن نذكر مكان الحقل قبل اسمه ، ومن أجل ذلك أيضاً فإننا نغير أسلوب العرض من T1!Name إلى


رمز:
T1.Fields("Tb_Product.name")

وكذا الأمر بالنسبة لحقل Number .

الهدف الأول من هذه العمليةهو عرض اسم المصنع والنوع بدلاً من رقمه ولذا سنحول أول كود ذكرناه في هذا الدرس إلى الشكل التالي :


رمز:
MSFlexGrid1.Col = 3
MSFlexGrid1.Text = T4.Fields("tb_category.name")
MSFlexGrid1.Col = 4
MSFlexGrid1.Text = T4.Fields("tb_factory.name")

أيضاً لا تنس أن تغلق T4 بنهاية هذه الدالة

_________________
لا تنسي ان تدعو اصدقائك لهذا المنتدي
لا تنسي ان تضيفنا الي المفضلة
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://learn.ahladalil.com
bee55
صول
avatar

عدد المساهمات : 110
نقاط : 3452
التقييم : 8
تاريخ التسجيل : 02/05/2010
العمر : 27

مُساهمةموضوع: رد: الدرس العاشر: شاشة عرض البضائع   الجمعة أكتوبر 22, 2010 10:01 am

عرض السجل الذي تم النقر عليه في مربع النص والقائمة .



بما أننا نريد أن نعرض بيانات أي حقل بمجرد النقر عليه ، فإننا نحتاج بمجرد النقر عليه للحصول على رقمه ، ولنر سوية هذا الامر .
عندما انقر على أي خلية فإن خاصيتي Col و Row يتم ضبطهما طبقاً للوضع الجديد ، وبهذه الطريقة تستطيع الحصول على رقم الصف والعمود بعد أي نقرة باضافة الأمر التالي في حدث Click للجدول :

MsgBox "Row : " & MSFlexGrid1.Row & " Col : " & MSFlexGrid1.Col

وبنفس الطريقة يمكننا الحصول على محتويات الخلية التي قمنا بالنقر عليها بواسطة أمر كهذا :


رمز:
MsgBox MSFlexGrid1.Text

ولكننا لا نريد محتويات هذه الخلية ، بل إننا نحتاج محتويات خلية الرقم في نفس الصف للبحث عنها وعرضها ... لذا فإننا نقوم بالتحول إلى خلية الرقم :


رمز:
MSFlexGrid1.Col = 1
MsgBox MSFlexGrid1.Text


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


سنبدأ الآن بكتابة جملة استعلام نبحث من خلالها عن السجل الذي له هذا الرقم ، تذكر أننا سوف نقوم بذلك من خلال استعلام مزدوج لأننا نريد معرفة اسم المصنع والنوع وليس أرقامهما ، لذلك سوف يكون مثل الاستعلام في الدرس السابق لكن مع اضافة شرط آخر ل Where بحيث يصبح and Number = MSFlexGrid1.Text حيث أننا لا نريد سوى سجل واحد فقط .


رمز:
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 and tb_product.number =" & MSFlexGrid1.Text & ""


وبنفس طريقة الجدول سوف نضع البيانات المناسبة في مربعات النص :


رمز:
If T4.RecordCount <> 0 Then
T4.MoveFirst

Text7.Text = T4.Fields("tb_product.Number")
Text1.Text = T4.Fields("tb_product.name")
Text2.Text = T4.Fields("tb_category.name")
Text3.Text = T4.Fields("tb_factory.name")
Text4.Text = T4!price
Text5.Text = T4.Fields("Count")
Text6.Text = T4!Box_Count



وماذا أيضاً ... نحتاج لأن تشير القائمة إلى البضاعة الحالية ، وبما أننا نتعامل في القائمة مع Tb_Product.name فسيصبح الأمر بالشكل التالي :


رمز:
Combo1.Text = T4!.Fields("tb_product.name")

ولكن بما أننا سنستخدم هذا الأمر لاحقاً فسوف نضعه في اجراء جديد ونسميه ShowData ... وبذلك يصبح الأمر بالشكل التالي :


رمز:
Private Sub ShowData()
Text7.Text = T4.Fields("tb_product.Number")
Text1.Text = T4.Fields("tb_product.name")
Text2.Text = T4.Fields("tb_category.name")
Text3.Text = T4.Fields("tb_factory.name")
Text4.Text = T4!price
Text5.Text = T4.Fields("Count")
Text6.Text = T4!Box_Count
End Sub

أخيراً لا تنس أن تغلق قاعدة البيانات T4 .


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


رمز:
Private Sub Combo1_Click()
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 and tb_product.name ='" & Combo1.Text & "'"
Set T4 = D1.OpenRecordset(SQL, dbOpenDynaset)

If T4.RecordCount <> 0 Then
T4.MoveFirst
Call ShowData
End If

T4.Close
End Sub


ما زالت أمامنا خطوة واحدة ، وهو عند حدث البداية للفورم ، فما هي المحتويات التي ستظهر في مربعات النصوص ... مثلاً سوف تكون عن أول بضاعة ، لذا فسوف نضع الأمر التالي :


رمز:
Combo1.ListIndex = 0

وبالتالي سوف ينفذ حدث Click للقائمة تلقائياً .


حل آخر لنقل المعلومات إلى مربعات النص عند النقر على الجدول .

بالتأكيد أنت لا زلت تتذكر الطريقة التي عرضنا فيها البيانات عند النقر على الجدول ، وكانت اجمالاً بالشكل التالي :

ولو لاحظت أننا نضع البيانات الموجودة في الجدول ... أليس كذلك ؟
إذاً فلماذا نقوم بعملية استعلام رغم أن بإمكاننا قراءة المعلومات من الجدول .
في الطريقة السابقة كنا نقرأ الرقم فقط بالكود التالي :


رمز:
MSFlexGrid1.Col = 1

لكننا في نفس الوقت نستطيع الانتقال إلى العمود الثاني والثالث والرابع وحتى الأخير ووضع المعلومات بهم في مربعات النصوص ... انظر الكود التالي :


رمز:
MSFlexGrid1.Col = 1
Text7.Text = MSFlexGrid1.Text
MSFlexGrid1.Col = 2
Text1.Text = MSFlexGrid1.Text
MSFlexGrid1.Col = 3
Text2.Text = MSFlexGrid1.Text
MSFlexGrid1.Col = 4
Text3.Text = MSFlexGrid1.Text
MSFlexGrid1.Col = 5
Text4.Text = MSFlexGrid1.Text
MSFlexGrid1.Col = 6
Text5.Text = MSFlexGrid1.Text
MSFlexGrid1.Col = 7
Text6.Text = MSFlexGrid1.Text

هل يبدو الأمر سهلاً ؟ عموماً لك مطلق الحرية في استخدام ما تراه مناسباً وقد أرفقت الكودين في البرنامج لاختيار ما تريد .

وماذا بعد ؟ تخيل أن مربعات النصوص لدينا بها خاصية

Index تبدأ من 0 وتنتهي بـ 6 ولهم جميعاً اسم Text1 .

هل تستطيع تخيل مدى بساطة الكود السابق في هذه الحالة :


رمز:
For i = 0 To 7
MSFlexGrid1.Col = i + 1
Text1.Text(i) = MSFlexGrid1.Text
Next i

لكن هذا الأمر لن يناسبنا في هذه الشاشة لأننا قمنا بعمل مربعات النصوص Text1,Text2,......,Text7 . ولكننا سوف نتذكر ذلك في تصميم الشاشات القادمة .


سيتم ارفاق الملف بعد الدرس المقبل ...

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

_________________
لا تنسي ان تدعو اصدقائك لهذا المنتدي
لا تنسي ان تضيفنا الي المفضلة
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://learn.ahladalil.com
 
الدرس العاشر: شاشة عرض البضائع
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
المنتدي التعليمي والترفيهي :: علوم الحاسوب :: البرمجة-
انتقل الى: