remxx
| موضوع: تعلم فجول بيسك 6 بالتفصيل الممل 8/5/2010, 19:22 | |
| الفصل الأول : كيف تكتب برنامجك الأول ؟ مقدمة :- هذا الفصل مخصص للمبتدئين في استخدام وسائل البرمجة بواسطة V.basic حيث يشرح كيفية كتابة برنامج V.basic بسيط ليعمل تحت بيئة Windows 95 وما يليه . تتم عملية كتابة أي برنامج في 4 مراحل ، هي :- 1. مرحلة البرمجة المرئية Visual Programming أي مرحلة تصميم نوافذ البرنامج . 2. مرحلة كتابة الشفرة Code Programming وهي مرحلة كتابة عبارات وجمل اللغة التي تؤدي إلى تنفيذ الغرض من البرنامج . 3. مرحلة تتبع الأخطاء Tracing Bugs وذلك باختبار البرنامج للتأكد من تحقيق الهدف من البرنامج ، وصحة البرنامج من الناحية الهيكلية . 4. مرحلة الترجمة Compiling أي إنشاء نسخة تنفيذية لها الامتداد *.EXE فلا تحتاج إلى تشغيل لغة V.basic لتنفيذ البرنامج . كيف تنشئ مشروع جديد ؟ تستطيع إنشاء مشروع جديد سواء إذا كانت اللغة عاملة بالذاكرة أو سيتم تشغيلها وذلك بإتباع الخطوات التالية :- • أبدأ بتشغيل برنامج V.Basic فيظهر صندوق حوار New Project ويحتوي على 3 صفحات هي :- • صفحة New وتستخدم لإنشاء مشروع جديد من عدة أنواع توفرها لك اللغة بالإضافة إلى معالج يقوم بإنشاء برنامج كامل له كل المميزات التي تحقق الهدف حسب رغبات المبرمج دون تدخل من المبرمج إلا عند كتابة الكود المناسب لتحقيق الهدف . • صفحة Existing وتستخدم لفتح مشروع قائم بالفعل وموجود على وسط التخزين Hard Disk . • صفحة Recent وتستخدم لفتح أحد المشاريع التي تم التعامل معها مؤخراً . كما يحتوي صندوق حوار New Project على صندوق اختيار Check Box والحالة المبدئية Not Checked وعند وضع علامة × داخله لا يظهر صندوق حوار New Project عند تشغيل V.basic ويمكن إعادة إظهاره من خلال اختياره من داخل صفحة Eniveroment أي بيئة تشغيل وذلك من الأمر Option الموجود بالقائمة المنسدلة Tools ، كما يمكن إنشاء مشروع جديد حتى ولغة V.baisc محملة بالذاكرة وذلك باختيار الأمر New من القائمة المنسدلة File أو نقر أيقونة New من شريط الأيقونات . بينما يمكن فتح مشروع قائم بواسطة الأمر Open من نفس القائمة المنسدلة أو بنقر أيقونة Open من شريط الأيقونات . مجموعة الأشرطة والنوافذ المساعدة :- يقدم برنامج V.basic عدو أشرطة ونوافذ مساعدة تؤدي لتنفيذ الغرض المطلوب بسهولة ، ومنها :- 1. النافذة Form وتمثل النافذة المبدئية التي تحول إلى شكل النافذة التي تحقق الهدف من البرنامج وذلك بإضافة أدوات وكائنات Tools And Objects تؤدي الغرض . 2. شريط الأدوات ToolBar ويحتوي على عدة أدوات وكائنات تنقل على النافذة للتنفيذ الغرض من النافذة . وذلك بالنقر نقر مزدوج على الأداة أو النقر مرة واحدة على الأداة ثم النقر داخل النافذة والسحب بدون الإفلات حتى تصل إلى الحجم المناسب فنفلت الفارة . 3. مستعرض المشاريع Project Explorer ويستخدم في التنقل ما بين النوافذ المختلفة لنفس المشروع أو لعدة مشاريع داخل نفس البرنامج ليعرض شكل النافذة عند نقر أيقونة View أو عرض نافذة الشفرة لأي نافذة عند نقر أيقونة View Code من داخل المستعرض . 4. صندوق الخصائص Propties وتستخدم لتغير خواص وصفات وسلوك الأدوات عند تنفيذ البرنامج لتناسب الغرض منها وترتب هذه الخصائص ترتيب هجائيا Alphabtic أو ترتيب حسب الوظيفة Categorized ، وهناك 3 أشكال لخلايا هذه الخصائص تظهر هذه الأشكال من خلال النقر على الخلية المجاورة للخاصية ، وهي كما يلي :- • ينتقل المؤشر إلى هذه الخلية المجاورة للخاصية استعداد لتغيير الخاصية . • يظهر مربع به مثلث صغير على يمين الخلية المجاورة لخلية الخاصية وتعبر عن وجود قائمة منسدلة تحتوي على قيم مبدئية للخاصية يمكن تغيرها أحيانا وأحيانا أخر لا . • يظهر مربع به 3 نقط على يمين الخلية المجاورة لخلية الخاصية وتعبر عن وجود مربع حوار لإدخال قيمة الخاصية . الخاصية هي صفة أو شكل أو سلوك الأداة عند تنفيذها للغرض منها . البرنامج Greeting في البداية علينا إنشاء مشروع جديد كما سبق أوضحنا . الوظيفة • عند نقر مفتاح مرحبا تظهر رسالة ( السلام عليكم ) • عند نقر مفتاح وداع تظهر رسالة ( مع السلامة ) البرمجة المرئية Object Property Settings Object Property Settings Form Name FrmGreetings CommandButton Name CBGreeting-CBBye-CBExit BorderStyle 4 Font MoveAble F Caption التحية – الوداع - خروج StartUpPosition Style AutoRedraw Default Caption Cancel Height Height Left Left Top Top TextBox Name TXBGreetings Width Alignment Font Height Left Top Width
كتابة الشفرة كتابة الشفرة الخاصة بالنقر على الزر خروج Private Sub CBExit_Click() Beep End End Sub تقوم الشفرة السابقة بإصدار صوت تنبيهي من السماعة الداخلية للجهاز ثم إنهاء البرنامج كتابة الشفرة الخاصة بالنقر على الزر التحية Private Sub CBGreeting_Click() TXBGreetings.Text=” السلام عليكم ورجمة الله وبركاته “ End Sub تؤدي الشفرة السابقة إلى طباعة العبارة " السلام عليكم ورحمة الله وبركاته " داخل صندوق النصوص كتابة الشفرة الخاصة بالنقر على الزر الوداع Private Sub CBBye_Click() TXBGreetings.Text = " مع السلامة " End Sub الآن البرنامج جاهز للتشغيل وذلك بنقر أيقونة Play من شريط الاختصارات أو ضغط مفتاح F5 والذي يمثلان الأمر RUN أو ضغط مفتاح F8 الذي ينفذ البرنامج سطر بسطر مع كل ضغطه للمفتاح F8 أو اختيار الأمر RUN من القائمة المنسدلة RUN . بعد التأكد من صحة البرنامج وتنفيذه للغرض منه علينا حفظه على القرص وذلك باختيار الأمر Save Project من القائمة File فيظهر مربع حوار حفظ لحفظ النافذة وخصائصها واسمها المبدئي هو Form1 ولها الامتداد .FRM غير اسم النافذة إلى Greetings واضغط مفتاح الإدخال فيظهر مربع حوار حفظ لحفظ المشروع الذي يحوي هذه النافذة واسمه المبدئي هو Project1 وله الامتداد .VBP غير اسم المشروع إلى Greetings واضغط مفتاح الإدخال فيم حفظ البرنامج ونستطيع تحويله الآن إلى نسخة تنفيذية امتدادها .EXE وذلك باختيار الأمر Make Greetings.EXE من القائمة المنسدلة File فيظهر مربع حوار إنشاء الملف التنفيذي وعلينا تحديد المكان الذي سيحفظ به النسخة .EXE ملاحظات • بعض الكائنات والأدوات يمكن رؤية التعديلات المباشرة في خصائصها والبعض الآخر لا يقبل ذلك . • لإسناد قيمة ما إلى خاصية أحد الأدوات نستخدم الصيغة التالية :- ObjectName.Property = New Value حيث ObjectName هو أسم الأداة التي نتعامل بواسطتها داخل الشفرة و Property هي الخاصية المطلوب تعديل قيمتها و New Value هي القيمة الجديدة للخاصية . • يمكن تجزئة أي جملة أو عبارة من جمل وعبارات اللغة بترك مسافة بعد آخر حرف ثم كتابة ( _ ) وهي UnderScore وبذلك نجزئ العبارة أو الجملة على عدة أسطر .
الفصل الثاني : إنشاء النوافذ والنوافذ المتعددة مقدمة : سنتعلم في هذا الفصل كتابة برامج تعتمد على النوافذ المتعددة Multi Forms بالإضافة إلى كيفية إنشاء المتغيرات المختلفة والتعامل معها . البرنامج MyMulti الوظيفة • عند نقر الزر About يظهر صندوق حوار About القياسي لإظهار معلومات حول البرنامج . • عند نقر الزر SetData1 يظهر صندوق إدخال لإدخال جملة وبالموافقة تظهر داخل النافذة الرئيسية . • عند نقر الزر SetData2 يظهر صندوق إدخال ندخل به جملة وبالموافقة يظهرها داخل النافذة الرئيسية وذلك باستخدام عدة طرق مختلفة لنقل الجملة من صناديق الإدخال إلى النافذة الرئيسية . البرمجة المرئية للنافذة الرئيسية MyMulti Object Property Settings Object Property Settings Form Name FRMMyMulti CommandButton Name CBAbout-CBSetData1-CBSetData2-CBExit BorderStyle Caption معلومات - بيانات 1 - بيانات 2 - خروج MoveAble Style 1 StartUpPosition Default T – F – F – F Caption متعدد النوافذ Cancel F – F – F – T Height Height Left Left Top Top Width Width كتابة الشفرة الخاصة بالنافذة الرئيسية MyMulti كتابة الشفرة الخاصة بالنقر على زر خروج Private Sub CBExit_Click() End End Sub كتابة الشفرة الخاصة بالنقر على زر معلومات Private Sub CBAbout_Click() MsgBox “ مصمم هذا البرنامج هو المهندس / عادل عبده أمين عبدالماجد “ ,VBInformation,” معلومات عن البرنامج متعدد النوافذ ” End Sub تؤدي هذه الشفرة إلى ظهور صندوق رسائل من صناديق الحوار القياسية التي يقدمها لك النظام وتحوي 3 معاملات الأول هو رسالة للأعلان والتعريف بالشئ والثاني هي أيقونة جاهزة تعبر عن مضمون المعامل الأول والثالث يعبر عن عنوان صندوق الرسائل الجاهز . كتابة الشفرة الخاصة بالنقر على زر بيانات 1 Private Sub CbSetData1_Click() Dim TxtEntered TxtEntered = InptBox (“ أكتب شيئا هنــا :“,” الحصول على عبارة من المستخدم “,” هذه عبارة مبدئية “ Print “ لقد كتبت : “+ TxtEntered End Sub تستخدم الشفرة السابقة طريقة مربعات الإدخال القياسية التي تقدمها اللغة للإستخدام . فيتم تعريف متغير جديد بإستخدام الكمة المحجوزة Dim تستخدم لتخزين قيمة يستقبلها من صندوق الإدخال InputBox والتي تؤدي لظهور مربع حوار يتكون من 3 معاملات الأول هو رسالة تعبر عن المطلوب من المستخدم والثاني هو عنوان مربع الحوار والثالث هو كقيمة مبدئية . والآن فلنقوم بتصميم النوافذ التي تقوم بنفس العمل الأعمال السابقة البرمجة المرئية للنافذة الفرعية معلومات
Object Property Settings Object Property Settings Form Name FRMAbout CommandButton Name CBOK BorderStyle Caption موافق MoveAble Style 1 StartUpPosition Default T Caption معلومات متعدد النوافذ Font Height Height Left Left Top Top Width Width Label Name LBLMesAbout Alignemt 2 Font Caption مصمم هذا البرنامج مهندس / عادل عبده أمين كتابة الشفرة الخاصة بالنقر على الزر About في نافذة البرنامج الرئيسية Private Sub CBAbout_Click() FrmAbout.Show 1 End Sub نستبدل الشفرة التي قمنا بكتابتها في البداية بالشفرة السابقة التي تظهر النافذة الفرعية التي قمنا بتصميمها FRMAbout كتابة الشفرة الخاصة بالنقر على الزر بيانات 2 Private Sub CBSetData2_Click() FRMSetData2.Show 1 FrmMyMulti.CLS Print “ لقد كتبت :” + FrmSetData2.TXBMes.Text End Sub تقوم الشفرة السابقة بإظهار النافذة الفرعية SetData2 ثم مسح أي جمل أو رسائل مطبوعة على النافذة الرئيسية باستخدام العبارة CLS ثم تقوم بطباعة العبارة التي أدخلها المستخدم في النافذة الفرعية SetData2 باستخدام صندوق النصوص TXBMes وذلك بالصيغة FRMSetData2.TXBMes.TEXT كتابة الشفرة الخاصة بالنقر على الزر موافق في النافذة الفرعية معلومات Private Sub CBOk_Click() FrmAbout.Hide End Sub البرمجة المرئية للنافذة الفرعية SetData2 Object Property Settings Object Property Settings Form Name FRMSetData2 CommandButton Name CBOK – CBCancel BorderStyle Caption موافق – إلغاء MoveAble Style 1 StartUpPosition Default T – F Caption مدخل البيانات 2 Cancel F – T Height Height Left Left Top Top Width Width TextBox Name TXBMsg MultiLine T Font Height Left Top Width كتابة الشفرة الخاصة بالنافذة الفرعية SetData2 كتابة الشفرة الخاصة بالنقر على الزر موافق Private Sub CBOk_Click() Unload Me End Sub كتابة الشفرة الخاصة بالنقر على الزر إلغاء Private Sub CBCancel_Click() TXBMes.Text = “ “ FrmSetData2.Visiable = False End Sub ملاحظات • هناك طريقتين لعرض أي نافذة على الشاشة فلا تختلف إحداهما عن الآخر في التأثير ، وهما :- اسم النافذة.Show اسم النافذة.Visible = True بينما توجد 3 طرق لآخفاء هذه النافذة من الشاشة وأيضا لا تختلف هذه الطرق عن بعضها في التأثير ، وهم :- اسم النافذة.Hide اسم النافذة.visible = False Unload Me فتعبر الكلمة المحجوزة Me عن العنصر Object أوالأداة والمقصود هنا هو النافذة Form . • باستخدام الأمر Show يمكنك عرض النافذة أكثر من مرة في نفس الوقت ( أي يسمح بالتنقل إلى نوافذ أخر والتعامل معها أيضا وقد يتم عرض هذه النافذة مرات ومرات ) بهذا تشغل الذاكرة وهذا ما لايحمد عقباه . لذلك نستخدام الأمر Show بالصيغة التالية Show 1 فلا يسمح بالتعامل مع أي نافذة أخر بينما النافذة المعروضة تم عرضها بهذه الصيغة فينقل التحكم إليها حتى تنتهي من التعامل معها ويغلقها هنا فقط فيسمح بالتعامل مع النوافذ الأخرى .
الفصل الثالث : القوائم وأشرطة الأدوات وأشرطة الحالة مقدمة سنتعلم في هذا الفصل كيفية بناء عناصر أساسية لأي تطبيق وهي القوائم وأشرطة الأدوات وأشرطة الحالة . البرنامج MyMenu الوظيفة • بالنقر على أي لون من قائمة Color فتلون به النافذة ( منطقة العمل Client Area ) ولا يتاح هذا اللون للإستخدام إلا بعد إختيار لون آخر للتلوين . ويمكن أداء نفس العمل بإختيار اللون من شريط الأدوات ( الألوان ) . • عند إزالة تعليم صندوق الإختيار Check Box المسمى Color Menu تختفي قائمة Color من داخل شريط القوائم . وتظهر ثانية بإعادة تعليم صندوق الإختيار ويمكن تعليمه أو إزالة التعليم بضغط مفتاح المسافة Space Bar أو بالنقر عليه بواسطة الفارة . • عند إزالة تعليم عنصر القائمة ToolBars من قائمة Tool And Status Bars تختفي أشرطة الأدوات وتظهر هذه الأشرطة ثانية بإعادة التعليم لعنصر القائمة . • عند إزالة تعليم عنصر القائمة StatusBars من القائمة Tool And Status Basrs تختفي أشرطة الحالة وتظهر ثانية بإعادة التعليم لعنصر القائمة . البرمجة المرئية Object Property Settings Object Property Settings Form Name FRMMyMenu PictureBox Name PicToolBar1 BorderStyle Align 1 MoveAble F Height StartUpPosition PictureBox Name PicGreen – PicBlue Caption برنامج القائمة Align 0 AutoRedraw T BackColor Green – Blue Height Height Left Left Top Top Width Width PictureBox Name PicToolBar2 PictureBox Name PICStatusBar1 Align 1 Align 2 Height Height PictureBox Name PICRed CheckBox Name CHKColorMenu Align 0 Caption إظهر قائمة الألوان BackColor Red Value Height Height Left Left Top Top Width Width PictureBox Name PICStatusBar2 Align Height CommandButton Name CBExit Caption خروج Cancel T Height Left Top Width والآن علينا إدراج قائمة من أيقونة Menu Editor Menu Caption Remarks ملف MnuFile … خروج MnuExit ألوان MnuColor … أخضر MnuGreen … أزرق MnuBlue … أحمر MnuRed أشرطة الحالة والأدوات MnuToolStatusBars … أشرطة الأدوات MnuToolBars Checked = True … أشرطة الحالة MnuStatusBars Checked = True كتابة الشفرة كتابة الشفرة الخاصة بتعليم صندوق الآختيار ( إظهر قائمة الألوان ) Private Sub CHKColorMenu_Click() If CHKColorMenu.Value = 0 Then MnuColor.Visible = False Else MnuColor.Visible = True End If End Sub تختبر الشفرة السابقة قيمة الخاصية Value التابعة لصندوق الإختيار فإذا كانت هذه القيمة = 0 ( غير معلم UnChecked ) تختفي قائمة Color وإذا كانت هذه القيمة = 1 ( معلم Checked ) أو قيمتها = 2 ( مظللة وتعني أن صندوق الإختيار معلم ولا يمكن إزالة التعليم من داخله ) تظهرقائمة Color . كتابة الشفرة الخاصة بإختيار العنصر ( خروج ) من القائمة ( ملف ) Private Sub MnuExit_Click() End End Sub كتابة الشفرة الخاصة بالنقر على العنصر ( أزرق ) من القائمة ( ألوان ) Private Sub MnuBlue_Click() FRMMyMenu.BackColor = QBColor (1) MnuBlue.Enabled = False MnuGreen.Enabled = True MnuRed.Enabled = True End Sub تؤدي الشفرة السابقة إلى تلوين النافذة FRMMyMenu باللون الأزرق ثم تعطيل العنصر ( أزرق ) في القائمة ( ألوان ) . كتابة الشفرة الخاصة بالنقر على العنصر ( أخضر ) من القائمة ( ألوان ) Private Sub MnuGreen_Click() FRMMyMenu.BackColor = QBColor (2) MnuBlue.Enabled = True MnuGreen.Enabled = False MnuRed.Enabled = True End Sub كتابة الشفرة الخاصة بالنقر على العنصر ( أحمر ) من القائمة ( ألوان ) Private Sub MnuRed_Click() FRMMyMenu.BackColor = QBColor (4) MnuBlue.Enabled = True MnuGreen.Enabled = True MnuRed.Enabled = False End Sub تؤدي الشفرتين السابقتين إلى نفس عمل الشفرة الخاصة بالنقر على العنصر ( أزرق ) من القائمة ( ألوان ) ولكن مع إختلاف اللون فالأولى تؤدي إلى التلوين باللون الأخضر والثانية باللون الأحمر . كتابة الشفرة الخاصة بالنقر على أيقونة اللون الأزرق من شريط الأدوات Private Sub PICBlue_Click() MnuBlue_Click End Sub كتابة الشفرة الخاصة بالنقر على أيقونة اللون الأخضر من شريط الأدوات Private Sub PICGreen_Click() MnuGreen_Click End Sub كتابة الشفرة الخاصة بالنقر على أيقونة اللون الأحمر من شريط الأدوات Private Sub PICRed_Click() MnuRed_Click End Sub تؤدي كل شفرة من الشفرات الثلاث السابقة إلى تنفيذ الشفرة التي تمثلها من الشفرات الخاصة بالنقر على العنصر ( أزرق – أخضر – أحمر ) من القائمة ( ألوان ) على الترتيب . كتابة الشفرة الخاصة بإختيار العنصر ( أشرطة أدوات ) من القائمة ( أشرطة الحالة والأدوات ) Private Sub MnuToolBars_Click() If MnuToolBars.Checked = True Then PicToolBar1.Visible = False PicToolBar2.Visible = False MnuToolBars.Checked = False Else PicToolBar1.Visible = True PicToolBar2.Visible = True MnuToolBars.Checked = True End if End Sub كتابة الشفرة الخاصة بإختيار العنصر ( أشرطة الحالة ) من القائمة ( أشرطة الحالة والأدوات ) Private Sub MnuStatusBars_Click() If MnuStatusBars.Checked = True Then PicStatusBar1.Visible = False PicStatusBar2.Visible = False MnuStatusBars.Checked = False Else PicStatusBar1.Visible = True PicStatusBar2.Visible = True MnuStatusBars.Checked = True End if End Sub تختبر الشفرة السابقة قيمة الخاصية Checked ( تعليمة ) للعنصر ( أشرطة أدوات ) فإذا كانت القيمة صحيحة يخفي أشرطة الأدوات ToolBars1 و Tool Bar2 ويزيل التعليمة من أمام العنصر وبالمثل يختبر قيمة الخاصية Check للعنصر ( أشرطة الحالة ) فإذا كانت القيمة صحيحة أزال التعليمة وأخفى أشرطة الحالة من أمام العنصر . البرنامج MenuGrow الوظيفة • عند نقر الزر ( إضافة عنصر ) يضاف عنصر قائمة إلى القائمة ( ملف ) • عند نقر الزر( حذف عنصر ) يحذف عنصر قائمة من القائمة ( ملف ) • عند إختيار أحد عناصر القائمة الجدد يرسم الشكل المناسب له مع ظهور رسالة " لقد إخترت رسم العنصر رقم : " بالإضافة إلى رقم العنصر . البرمجة المرئية Object Property Settings Object Property Setting Form Name FRMMenuGrow CommandButton Name CBAdd – CBRemove BorderStyle Caption إضافة عنصر- حذف عنصر MoveAble F Default T – F – F StartUpPosition Style 1 Caption القائمة المتزايدة Height AutoRedraw T Left Height Top Left Width Top Shape Name SHPShape Width BorderWidth Label Name LBLMessage FillColor Alignment 2 FillStyle Border Height Height Left Left Top Top Width Width Shap والآن علينا إدراج قائمة من أيقونة Menu Editor Menu Caption Remarks ملف MnuFile … خروج MnuExit … - MnuDynamic Index = 0 كتابة الشفرة نبدأ كتابة شفرتنا بالتصريح عن متغير عام داخل قسم التصريحات العامة لنستطيع التعامل معه من داخل أي شفرة Option Explicit Dim MenuIndex كتابة شفرة تحميل النافذة Private Sub Form_Load() MenuIndex = 0 End Sub نبدأ بقيمة مبدئية نلحقها بعداد العناصر وهي القيمة = 0 كتابة الشفرة الخاصة بالنقر على الزر ( إضافة عنصر ) Private Sub CBAddItem_Click() If MenuIndex = 5 Then MsgBox " هناك 5 عناصر قائمة بالفعل ، لذا لن نضيف هذا العنصر الجديد " Exit Sub Else MenuIndex = MenuIndex + 1 Load MnuDynamic(MenuIndex) MnuDynamic(MenuIndex).Caption = Str$(MenuIndex) End If End Sub تختبر الشفرة السابقة عدد العناصر المضافة فإذا كان هناك 5 عناصر مضافة تظهر رسالة تحذيرية بوجود 5 عناصر مضافة ثم ينهي الشفرة وإذا كان هناك أقل من 5 عناصر يزيد عداد العناصر MenuIndex بمقدار ( 1 ) وتستخدم العبارة Load لإضافة العنصر الجديد ويتم تسمية هذا العنصر بإستخدام الخاصية Caption . كتابة الشفرة الخاصة بالنقر على الزر ( حذف عنصر ) Private Sub CBRemove_Click() If MenuIndex = 0 Then MsgBox " آسف لا يوجد عناصر قائمة لتحذف ." Exit Sub Else UnLoad MnuDynamic(MenuIndex) MenuIndex = MenuIndex – 1 End If End Sub تختبر الشفرة السابقة عدد العناصر المضافة فإذا كان عدد العناصر المضافة ( 0 ) تظهر رسالة تحذيرية بأنه لا يوجد عناصر ثم ينهي الشفرة وإلا استخدم العبارة UnLoad لحذف العنصر الحالي ثم ينقص عداد العناصر MenuIndex بمقدار ( 1 ) . كتابة الشفرة الخاصة بإختيار أحد العناصر المضافة Private Sub MnuDynamic_Click(Index as Integer) LBLMessge.Caption = " لقد إختارت العنصر : " + Str$(Index) SHPShape.Shape = Index End Sub تؤدي الشفرة السابقة لظهور العبارة ( لقد إختارت العنصر : ) بالإضافة إلى ترتيب هذا العنصر ثم رسم الشكل الذي يناسب هذا الترتيب . كتابة الشفرة الخاصة بإختيار العنصر ( خروج ) من القائمة ( ملف ) Private Sub MnuExit_Click() End End Sub البرنامج PopUp الوظيفة عند نقر الزر الأيمن للفارة داخل النافذة تظهر قائمة منبثقة تحتوي على 3 عناصر بإختيار أحداها تظهر الصورة المقابلة لهذا العنصر . البرمجة المرئية Object Property Settings Object Property Settings Form Name FRMPopUp Imageox Name IMGViewer BorderStyle Stretch T MoveAble F Height StartUpPosition Left Caption القائمة النبثقة Top AutoRedraw T Width Height ImageBox Name IMGPC – IMGClock – IMGTel Left Visible F Top Picture Width والآن يجب عليك إدراج الصور الثلاث التي تمثل العناصر الثلاث للقائمة المنبثقة ( حاسب – منبه – تليفون ) على الترتيب .
والآن علينا إدراج قائمة من أيقونة Menu Editor Menu Caption Remarks ملف MnuFile … خروج MnuExit عارض الصور MnuDisplayImages Visible Check Box = False … حاسب MnuPc … منبه MnuClock … تليفون MnuPhone كتابة الشفرة كتابة شفرة تحميل النافذة Private Sub Form_Load() FrmPopUp.PopUpMenu MnuDisplayImages End Sub تستعمل الشفرة السابقة المنهج PopUpMenu لإظهار محتويات القائمة DisplayImages في شكل قائمة منبثقة . كتابة الشفرة الخاصة بإختيار عنصر القائمة Pc Private Sub MnuPc_Click() ImgViewer.Picture = ImgPc.Picture End Sub كتابة الشفرة الخاصة بإختيار عنصر القائمة Clock Private Sub MnuClock_Click() ImgViewer.Picture = ImgClock.Picture End Sub كتابة الشفرة الخاصة بإختيار عنصر القائمة Tel Private Sub MnuTel_Click() ImgViewer.Picture = ImgTel.Picture End Sub تقوم الشفرات السابقة بإلحاق الصور ( حاسب – منبه – تليفون ) إلى الصورة العارضة ( ImgViewer ) على الترتيب . ملاحظات • يلزم لتصميم شريط أداة أو شريط حالة إستخدام الأداة Picture Box وحتى تقوم بدور شريط الأداة يجب ضبط الخاصية Align لتساوي ( 1 Align Top ) ولتصبح شريط حالة يجب أن تساوي الخاصية القيمة ( 2 Align Bottom ) . • تستطيع تصميم القوائم بإستخدام ايقونة Menu Editor من شريط الإختصارات .
الفصل الرابع : برامج متعددة الوثائق مقدمة سنتعلم في هذا الفصل كيفية تصميم برامج ذات واجهات متعددة الوثائق Multi Document Interface . البرامج ذات الواجهة المتعددة الوثائق هي برامج تحوي عدة نوافذ أبناء تقع ضمن نافذة أب واحدة وتعمل داخلها فقط وضمن أحداثياتها فقط . البرنامج MyMDIMulti الوظيفة • عند نقر زر ( جرس ) في شريط الحالة يستجيب البرنامج بإصدار صوت بسيط من السماعة الداخلية للحاسب . • أختر أحد طرق ترتيب النوافذ الأبناء داخل النافذة الأب من داخل القائمة نوافذ وطرق الترتيب المتاحة هي ترتيب ( بشكل متتالي ) Cascade أو ( متجانب أفقيا ) Horizontal Tile أو ( متجانب عموديا ) Vertical Tile . • بتصغير جميع النوافذ الأبناء في أماكن عشوائية ثم أختيار عنصر ( رتب كل الرموز ) Arrange Icons من القائمة ( نوافذ ) سترتيب الرموز الخاصة بالنوافذ الأبناء في سطر واحد أفقي أسفل نافذة الأب . البرمجة المرئية أولآ :- قم بإنشاء مشروع قياسي جديد ثم إحذف النافذة Form1 بإختيار العنصر Remove Form من القائمة Project . ثانيآ :- إختار العنصر Add MDI Form من القائمة Project أو نقر أيقونة Add New Form ثم اختيار MDI Form . من العلم أن كل مشروع يحوي نافذة أب واحدة فتظهر النافذة الأب التي لها شكل أيقونة تختلف عن النوافذ القياسية . ثالثآ :- إنشاء 3 نوافذ قياسية بالطريقة العادية ثم تغير الخاصية MDI Child إلى القيمة True فنحصل على 3 نوافذ أبناء فنجد أيضا أن النوافذ الأبناء لها أيقونات مخالفة للأيقونات الخاصة بالنوافذ القياسية . أختر النافذة Form1 من داخل نافذة مستعرض النوافذ ثم إختيار أيقونة View Object . Object Property Settings Object Property Settings Form Name FRMChild1 CommandButton Name CBCloseChild1 BorderStyle Style 1 Caption الأبن الأولى Picture MoveAble F Caption غلق الأبن الأولى StartUpPosition Cancel T Height Height Left Left Top Top Width Width
قائمة Caption ملف MNUFile … غلق النافذة MNUCloseMe جرس MNUBeep … جرس مرة MNUBeepONCE … جرس مرتين MNUBeepTwice كتابة الشفرة كتابة الشفرة الخاصة بالنقر على الزر ( غلق الأبن الأول ) Private Sub CBCloseChild1_Click() Unload Me End Sub تقوم الشفرة السابقة بإخفاء النافذة الأبن من داخل النافذة الأب . كتابة الشفرة الخاصة بالعنصر ( جرس مرة ) من القائمة ( جرس ) Private Sub MNUBeepOnce_Click() Beep End Sub كتابة الشفرة الخاصة بالعنصر ( جرس مرتين ) من القائمة ( جرس ) Private Sub MNUBeepTwice_Click() Dim Counter as Long Beep For Counter = 0 To 20000 Next Counter Beep End Sub يتم تعريف متغير ليكون عداد لحلقة تأخير زمني مابين الجرس الأول والثاني . وتختلف سرعة تنفيذ الحلقة بإختلاف نوع المعالج وسرعته في الحاسب مع العلم أن الطريقة السابقة ليست الطريقة المثلى لتنفيذ عملية التأخير الزمني . كتابة الشفرة الخاصة بالختيار العنصر ( غلق النافذة ) من القائمة ( ملف ) Private Sub MNUCloseMe_Click() Unload FrmChild1 End Sub أختر النافذة Form2 من داخل نافذة مستعرض النوافذ ثم إختيار أيقونة View Object . Object Property Settings Object Property Settings Form Name FRMChild2 CommandButton Name CBCloseChild2 BorderStyle Style 1 Caption الأبن الثاني Picture MoveAble F Caption غلق الأبن الثاني StartUpPosition Cancel T Height Height Left Left Top Top Width Width كتابة الشفرة كتابة الشفرة الخاصة بالنقر على الزر ( غلق الأبن الثاني ) Private Sub CBCloseChild2_Click() FRMChild2.Hide End Sub أختر النافذة Form3 من داخل نافذة مستعرض النوافذ ثم إختيار أيقونة View Object . Object Property Settings Object Property Settings Form Name FRMChild3 CommandButton Name CBCloseChild3 BorderStyle Style 1 Caption الأبن الثالث Picture MoveAble F Caption غلق الأبن الثالث StartUpPosition Cancel T Height Height Left Left Top Top Width Width كتابة الشفرة كتابة الشفرة الخاصة بالنقر على الزر ( غلق الأبن الثالث ) Private Sub CBCloseChild3_Click() Me.Visible = True End Sub أختر النافذة الأب MyMDI Object Property Settings MDIForm Name FRMMyMDI BorderStyle Caption النافذة الأب MoveAble F StartUpPosition Height Left Top Width
Menu Caption Caption Caption ملف MnuFile … الأبن الثالث MnuChild3 … ترتيب متتال MnuCascade … خروج MnuExit … _ MnuSep … ترتيب أفقي MnuHoriz عارض الأبناء MnuShow … عرض الأبناء MnuShow … ترتيب رأسي MnuVertical … الأبن الأول MnuChild1 … إخفاء الكل MnuClear … ترتيب أيقونات MnuArrngAll … الأبن الثاني MnuChild2 نوافذ MnuWin تجهيز نموذج البداية • علينا في البداية تجهيز نموذج البداية StartUp Form والذي يتم تشغيله في بداية تشغيل البرنامج . • انقر الزر الأيمن للفارة على أي مجلد في نافذة مستعرض المشاريع واختر من القائمة المنبثقة العنصر Project Properties ومن قائمة اختيار نموذج البداية StartUp Object نختار النافذة FRMMyMDI ثم نقر الزر Ok القوائم بالنسبة للنافذة الأبن الفعالة تظهر النافذة الفعالة داخل النافذة الأب بينما تحل القوائم الخاصة بالنافذة الأبن الفعالة محل قوائم النافذة الأب ، أما في حالة أن النافذة الأبن لا تحوي قوائم فتظهر قوائم النافذة الأب . كتابة الشفرة لتحميل النافذة الأب Private Sub MDIForm_Click() Load FRMChild1 Load FRMChild2 Load FRMChild3 End Sub تستخدم الشفرة السابقة المنهج Load لتحميل النوافذ الأبناء الثلاثة داخل الذاكرة لسرعة التعامل معها وعرضها . كتابة الشفرة الخاصة بالعنصر ( خروج ) من القائمة ( ملف ) Private Sub MnuExit_Click() End End Sub كتابة الشفرة الخاصة بالعنصر ( عرض الأبن الأول ) Private Sub MnuChild1_Click() FRMChild1.Visible = True End Sub كتابة الشفرة الخاصة بالعنصر ( عرض الأبن الثاني ) Private Sub MnuChild2_Click() FRMChild2.Show End Sub كتابة الشفرة الخاصة بالعنصر ( عرض الأبن الثالث ) Private Sub MnuChild3_Click() FRMChild3.Show 1 End Sub كتابة الشفرة الخاصة بالعنصر ( عرض الأبناء ) Private Sub MnuShow_Click() FRMChild1.Show FRMChild2.Show FRMChild3.Show End Sub كتابة الشفرة الخاصة بالعنصر ( إخفاء الكل ) Private Sub MnuClear_Click() FRMChild1.Hide FRMChild2.Hide FRMChild3.Hide End Sub كتابة الشفرة الخاصة بالعنصر ( ترتيب متتال ) Private Sub MnuCascade_Click() FRMMyMDI.Arrange vbCasecade End Sub كتابة الشفرة الخاصة بالعنصر ( ترتيب أفقي ) Private Sub MnuHoriz_Click() FRMMyMDI.Arrange vbTileHorizontal End Sub كتابة الشفرة الخاصة بالعنصر ( ترتيب رأسي ) Private Sub MnuVeritical_Click() FRMMyMDI.Arrange vbTileVertical End Sub كتابة الشفرة الخاصة بالعنصر ( ترتيب أيقونات ) Private Sub MnuArrangeAll_Click() FRMMyMDI.Arrange vbArrangeIcons End Sub
الفصل الخامس : التحكم بالملفات وبناء عبارات الاستفسار SQL مقدمة سنتعلم في هذا الفصل كيف نختار الملفات وتكتب وتقرأ من وإلى الملفات كما سنتعرف على كيفية التعامل مع قواعد البيانات واستخدام لغة الاستفسار SQL Statements هناك عدة تقنيات للوصول إلى الملفات وأساليب للقراءة منها والكتابة فيها ومن هذه التقنيات تقنية الوصول العشوائي للملفات Random Access Technique والتي تشبه في بنيتها مع قواعد البيانات فهي تحتوي على عدة سجلات Records لها طول ثابت ويتكون كل سجل من عدد معين وثابت من الحقول Fields التي تحوي المعلومات والتي لها أيضا طول ثابت . فتح ملف الوصول العشوائي وإغلاقه يتم فتح أي ملف وصول عشوائي باستخدام الصيغة التالية Open FileNameAndPath For Random As FileNumber ويحتوي هذه الصيغة على عبارات ثابتة ( يوجد أسفلها خط ) وبعض المتغيرات هي FileNameAndPath وأي أسم الملف المطلوب فتحه والمسار المؤدي إليه والمتغير الثاني FileNumber هو رقم يعبر عن الملف نستخدمه داخل الملف بدلا من استخدام الاسم يتم غلق أي ملف وصول عشوائي باستخدام الصيغة التالية Close # FileNumber القراءة والكتابة داخل ملفات الوصول العشوائي يتم القراءة من ملف الوصول العشوائي باستخدام الصيغة التالية Get # FileNumber , VariableName وتتكون هذه الصيغة من متغيرين الأول كما سبق أوضحنا والثاني هوVariableName يعبر عن أسم متغير يمثل سجل البيانات والذي سيتم تحميل داخله البيانات الخارجة من الملف . يتم التعامل مع أي بيانات داخل السجل باستخدام الصيغة التالية VariableN ame.RecordName
يتم الكتابة داخل ملف وصول عشوائي باستخدام الصيغة التالية Put # FileNumber , VariableName كيفية تصميم سجل البيانات من داخل البرنامج الجزئي والذي يكتب داخل أحد الاجراءات Modules نكتب الصيغة التالية Type RecordName Field as FieldType . . . Field as FieldType End Type كيفية التعامل مع الملف علينا في البداية تعريف عدة متغيرات ضرورية للتعامل مع الملف هي Dim TemperaryRecordName as RecordName Dim FileNumber as Integer Dim RecordLength as Long Dim CurrentRecord as Long Dim LastRecord as Long وهذه المتغيرات هي TemperaryRecordName وهو متغير وسطي يعبر عن سجل البيانات داخل الذاكرة فقط ولا يعبر عن نفس سجل البيانات من الملف والثاني FileNumber متغير يعبر عن رقم الملف والثالث RecordLength متغير يعبر عن طول السجل بالحروف أو بالبايت والرابع CurrentRecord متغير يعبر عن رقم السجل الحالي بالذاكرة والخامس LastRecord متغير يعبر عن رقم آخر سجل بالملف الموجود بالذاكرة . تقنية الوصول التسلسلي للملفات Sqencial Access Technique تعتمد هذه التقنية على تخزين البيانات في شكل سلاسل رمزية أو نصية متتابعة وبنفس الطريقة يتم استرجاعها فتحول المعطيات إلى نوع المعلومات المطلوبة بعد قراءتها وهي الطريقة المثلى للقراءة أو الكتابة في ملف نصي Text File فتح ملف الوصول التسلسلي وإغلاق يتم فتح أي ملف وصول تسلسلي 3 طرق مختلفة حسب الغرض من فتح الملف وهي كما يلي فتح ملف تسلسلي للإخراج OutPut للكتابة داخل ملف تسلسلي عليك فتحه للإخراج أولا وذلك بالصيغة التالية Open FileNameAndPath For OutPut as FileNumber ويتم تعريف هذه المتغيرات كما سبق أوضحنا . وفي حالة عدم وجود هذا الملف يتم إنشائه ويكون فارغا أما إذا كان موجود بالفعل فسيقوم بإلغائه ثم يعيد إنشائه من جديد وبالتالي نفقد أي بيانات كانت محفوظة داخل الملف . فتح ملف تسلسلي للإضافة Append تشبه طريقة فتح الملف للإخراج طريقة الفتح للإضافة لكن عند الفتح للإضافة لا يتم حذف الملف إن كان موجود من قبل أما إذا كان الملف غير موجود بالفعل يقوم بإنشائه فورا وتتم عملية الفتح بالصيغة التالية Open FileNameAndPath For Append As FileNumber فتح ملف تسلسلي للإدخال Input للقراءة من ملف تسلسلي يجب فتحه أولا بطريقة الإدخال ( من الملف بالذاكرة إلى الشاشة ) وذلك بالصيغة التالية Open FileNameAndPath For Input As FileNumber القراءة والكتابة داخل ملف تسلسلي للكتابة داخل ملف تسلسلي نستخدم أحد العبارتين Print # و Write # والتي يتساوى في عملهما بتخزين جملة نصية داخل الملف كما تعتمد كلتاهما على الرقم المميز للملف يليه مجموعة البيانات المطلوب تخزينها والتي قد تكون عبارة نصية أو بيانات أو حتى قيم لمتغير أو أكثر موجودة بالذاكرة .وتكتب هذه العبارات بالصيغة التالية Print # FileNumber , “ رسالة نصية أو مجموعة بيانات “ Write # FileNumber , Variable1 , Variable2 , …. للقراءة من ملف تسلسلي نستخدم العبارة Input # بنقل البيانات أو جزء منها من الملف إلى الذاكرة ومنها إلى الشاشة وتكتب بالصيغة التالية Input # ( Byte Size , FileNumber ) وتحتوي هذه العبارة على وسيطين الأول Byte Size وهو حجم البيانات المطلوب قراءتها بالبايت ( عدد الحروف ) ويمكن عرض بيانات الملف بالكامل باستخدام التابع LOF( FileNumber ) والذي يعيد طول الملف بالكامل ولكنه مقاسا بالبايت والثاني FileNumber هو الرقم المميز للملف المطلوب قراءة البيانات منه . تقنية الوصول الثنائي للملفات Binary Access Technique تتيح تقنية الوصول الثنائي الوصول لأي بايت للقراءة أو الكتابة فيجعل هذه التقنية الأكثر مرونة في التعامل مع الملفات ولكن يجب فتح الملف أولا للتعامل معه بالقراءة أو الكتابة . فتح ملف وصول ثنائي تتم عملية فتح ملف وصول ثنائي بالصيغة التالية Open FileNameAndPath For Binary As FileNumber ويتم تعريف المتغيرات كما سبق أن أوضحنا ، وإذا كان هذا الملف غير موجود بالفعل قام بإنشائه . القراءة والكتابة داخل ملف وصول ثنائي تستخدم العبارة Put # للكتابة داخل ملف الوصول الثنائي وتكتب بالصيغة التالية Put # FileNumber , Location , Senetance وتحتوي هذه العبارة على 3 وسطاء الأول FileNumber أي الرقم المميز للملف والثاني Location وهو رقم البايت الذي يبدأ من عنده عملية الكتابة وأما الوسيط الثالث Sentence وهي العبارة المطلوب كتابتها داخل الملف ، وكمثال لذلك Put # FileNumber , 100 , “ ADEL “ Byte 100 101 102 103 104 105 … Charcter A D E L ثم ينتقل المؤشر تلقائيا داخل الملف إلى الموقع رقم 104 وباستخدام العبارة Put # دون تحديد موقع البايت يبدأ الكتابة عند الموقع الذي يقف عنده المؤشر مثال لذلك Put # FileNumber , ,“ ABDOU “ تقوم العبارة السابقة بنفس العمل ولكنها تبدأ من آخر مكان وقف عليه المؤشر أو الموقع الذي يقف عليه المؤشر الآن ، أي الموقع 104 وينتهي عند الموقع 108 ثم ينقل المؤشر إلى الموقع 109 انتظار لأي عمليات آخر . Byte 100 101 102 103 104 105 106 107 108 109 110 … Charcter A D E L A B D O U باستخدام العبارة Get # نستطيع القراءة من ملف وصول ثنائي بالصيغة التالية Get # FileNumber , Location , Variable وتتكون هذه العبارة من 3 وسطاء الأول والثاني كما سبق أوضحنا أما الثالث Variable فيعبر عن متغير يتم إلحاق البيانات التي قرائها من الملف داخله بداية من الموقع المحدد Location داخل الملف رقم FileNumber كما نستطيع تحديد طول هذا المتغير المطلوب قراءته بأن نستخدم الصيغة التالية Variable = String$( Byte Size , “ “ ) Get # , FileNumber , Variable ويتكون التابع String$ هنا من وسيطين هما Byte Size أي حجم البيانات المطلوب قراءتها بالبايت و الوسيط الثاني " " مسافة فارغة بين علامتي التنصيص هنا تعبر عن جملة مبدئية فارغة . البرنامج SelectIt الوظيفة نستطيع الوصول إلى ملف ما بالتحرك ما بين أوساط التخزين المختلفة Drives والفهارس المختلفة Folders/Directories والملفات المختلفة ليظهر لك صندوق رسائل به المسار Path لهذا الملف البرمجة المرئية Object Property Settings Object Property Settings Form Name FRMSelectIt CommandButton Name CBGetFile – CBExit BorderStyle Caption اختار ملف – خروج StartUpPosition Default T – F MoveAble F Cancel F – T Height Height Left Left Top Top Width Width Form Name FRMGetFile Label Name LBLDriveName – LBLFileName – LBLFolders – LBLFileType – LBLDrive BorderStyle Caption 0 - اسم الملف : - فهارس – أنواع الفهارس – وسط التخزين StartUpPosition Height MoveAble F Left Caption اختيار ملف ما Top Height Width Left Top Width File List Box Name FileLB Dir List Box Name DirLB Hight Hight Left Left Top Top Width Width Drive List Box Name DRVLB Combo Box Name CMBFileType Hight Hight Left Left Top Top Width Width Name CBOK – CBCancel Caption موافق – غير موافق Default T – F Cancel F – T Hight Left Top Width كتابة الشفرة للنافذة SelectIt كتابة شفرة التحميل للنافذة Private Sub Form_Load() Load FRMGetFile FRMGetFile.CMBFileTYpe.AddItem “ كل أنواع الملفات ( * . * ) “ FRMGetFile.CMBFileTYpe.AddItem “ الملفات النصية ( *.TXT ) ” FRMGetFile.CMBFileTYpe.AddItem “ الملفات الوثائقية ( * .DOC ) “ FRMGetFile.CMBFileType.AddItem “ الملفات الرسومية ( *.BMP ) “ FRMGetFile.CMBFileType.ListIndex = 0 End Sub تقوم الشفرة السابقة بتحميل النافذة FRMGetFile إلى الذاكرة دون عرضها على الشاشة ثم إضافة عدو عناصر إلى الأداة المسئولة عن تحديد أنواع الملفات المسموح بعرضها باستخدام المنهج AddItem الخاص بالأداة Combo Box . ثم يقرر أن يبدأ عملية العرض لمجموعة الملفات حسب العنصر الأول والذي ترتيبه List Index = 0 وهو " كل الملفات ( * . * ) " كتابة الشفرة الخاصة بالنقر على الزر ( خروج ) Private Sub CBExit_Click() End End Sub كتابة الشفرة الخاصة بالنقر على الزر ( اختار ملف ) Private Sub CBGetFile_Click() FRMGetFile.Show 1 If FRMGetFile.Tag =”” Then MSGBOX “ لم نجد أي ملفات محددة “,VBExclamation Else MSGBOX “ الملف المحدد هو : “ + FRMGetFile.Tag , VBExclamation End If End Sub تؤدي الشفرة السابقة إلى ظهور النافذة Get File كنافذة وحيدة فعالة باستخدام المنهج Show 1 ثم تختبر قيمة الخاصية Tag أو نتيجة ظهور النافذة فإدا كانت فارغة ظهر صندوق رسائل يخبرك أنك لم تختر أي ملف أما إذا كانت غبر فارغة يظهر صندوق رسائل آخر باسم الملف والسمار المؤدي له . كتابة الشفرة للنافذة GetFile كتابة شفرة التحميل للنافذة Private Sub Form_Load() LBLDirName.Caption = DirLB.Path End Sub تقوم الشفرة السابقة بالحاق المسار لموجود بالخاصية Path الخاصة بالقيمة الصحيحة للدليل كتابة الشفرة الخاصة باختيار أحد أوساط التخزين Drives . Private Sub DrvLB_Click() On Error GoTo DriveError DirLB.Path = DrvLB.Drive Exit Sub DriveError : MSGBOX “ خطأ وسيط التخزين ! “,VBEclamation,” خطأ “ DrvLB = DirLB.Path Exit Sub End Sub تبدأ الشفرة السابقة بتصميم مصيدة لتصيد أخطاء التعامل مع أوساط التخزين يذهب إليها وهي DriveError ( مثل اختيار Drive A: بينما Drive لا يوجد به أقراص ) ثم يلحق مجموعة الفهارس Folders/Directories الموجود بوسط التخزين المحدد . أما عند حدوث خطأ تظهر رسالة بهذا المعنى وتعود إلى وسط التخزين الأساسي . كتابة الشفرة الخاصة باختيار أحد الفهارس Folders/Directories Private Sub DirLB_Click() FileLB.Path = DirLB.Path LBLDirName.Caption = DirLB.Path End Sub تؤدي الشفرة السابقة إلى ظهور الملفات Files الموجودة داخل هذا الفهرس Directory المحدد ثم يظهر هذا الفهرس داخل الأداة الخاصة بإظهار أسم الدليل الحالي . كتابة الشفرة الخاصة بالختيار أحد أنواع الملفات File Types Private Sub CMBFileType_Change() Dim PatternPos1 as Integer Dim PatternPos2 as Integer Dim PatternLen as Integer Dim Pattern as String PatternPos1 = Instr( 1 , CMBFileType.Text , “(“) + 1 PatternPos2 = Instr( 1 , CMBFileType.Text , “)”) – 1 PatternLen = PatternPos2 – PatternPos1 + 1 Pattern = Mid$(CMBFileType.Text , PatternPos1 , PatternLen ) FileLB.Pattern = Pattern End Sub تحتوي الخاصية Text في أداة أنواع الملفات على النوع الذي حدده المستخدم لذلك يقتطع هذا الأجراء هذا النوع بواسطة مكان وجود القوس المفتوح “(“ ثم يضيف 1لتلك القيمة لينتج موقع بداية النوع ثم يبحث عن مكان وجود القوس المغلق “)” ثم يطرح 1 لتحديد موقع نهاية النوع وبطرح مكان البداية من مكان النهاية يتم تحديد النوع المطلوب عرضه من الملفات بواسطة التابع Mid$ والذي يلحق بالخاصية Pattern الخاصة بأداة إظهار الملفات . وهنا يبدأ في عرض الملفات التي لها نفس الأمتداد المحدد . كتابة الشفرة الخاصة باختيار أحد لملفات Files Private Sub FileLB_Click() TXBFileName.Text = FileLB.FileName End Sub تلحق الشفرة السابقة اسم الملف المحدد إلى الأداة النصية أسم الملف : كتابة الشفرة الخاصة بالنقر على الزر موافق Private Sub CBOk_Click() Dim PathAndName as String Dim Path If TXBFileName = “ “ Then MSGBOX “ لم يتم تحديد ملف ! “ , VBEclamation , “ خطأ “ Exit Sub End If If Right$( FileName.Path , 1 ) <> “\” Then Path = FileName + “\” Else Path = FileName End If If TXBFileName.Text = FileLB.FileName Then PathAndName = Path + FileLB.FileName Else PathAndName = TXBFileName.Text End If FRMGetFile.Tag = PathAndName FRMGetFile.Hide End Sub تقوم الشفرة السابقة بعمل عدة اختبارات هذ على الترتيب :- اختبار اختيار أحد الملفات فيكمل العمل وإلا يظهر رسالة تحذيرية بأنك لم تختر أي ملف ثم يخرج . اختبار هل الخاصية Path الخاصة بأداة الفهارس Directories تنتهي "\" فيتم إسناد قيمتها إلى المتغير Path وإلا أضاف هذا الرمز ثم أسند قيمة المتغير إلى المتغير Path . اختبار قيمة صندوق النصوص الخاص باسم الملف والمسار المؤدي له مع قيمة الخاصية Path الخاصة بأداة الملفات ويعني عدم تطابقهما أن المستخدم أدخل أسم الملف والمسار يدويا فيتم إسناد أسم الملف والمسار الذي أدخلهما المستخدم إلى المتغير PathAndName أما عند حدوث التطابق فيتم إسناد قيمة الخاصية Path الخاصة بأداة الملفات إلى المتغير PathAndName ثم يسند هذا المتغير إلى الخاصية Tag الخاصة بالنافذة ثم يخفي النافذة بعد ذلك . كتابة الشفرة الخاصة بالنقر على أحد الملفات نقر مزدوجا Private Sub FileLB_DBClick() TXBFileName.Text = FileLB.Name CBOk_Click End Sub تقوم الشفرة السابقة بالحاق الخاصية FileName وهي اسم الملف والمسار المؤدي إليه الخاصة بأداة الملفات إلى الأداة النصية الخاصة باسم الملف ثم ينفذ الشفرة الخاصة بلنقر على الزر موافق . والآن نقدم لك مثالا لاستخدام صناديق الحوار القياسية التي يستخدمها Windows والتي لم يصممها المستخدم فنتعامل مع النافذة SelectIt فقط بدون التعامل مع النافذة GetFile ، في هذه الحالة تظهر خصائص النافذة بدون تغير ولكن بإضافة أداة صناديق الحوار القياسية فتظهر بالشكل التالي البرمجة المرئية Object Property Settings Common Dialog Name CDDalg CancelError T Left Top كتابة الشفرة كتابة الشفرة الخاصة بالنقر على اختار ملف Private Sub CBGetFile_Click() On Error GoTo OpenError CDDalg.Filter = “ كل الملفات ( *.* ) |*.*| ” + “ ملفات نصية ( .TXT ) |*.TXT| “ + _ “ ملفات وثائقية ( .DOC ) |.Doc| “ CDDalg.FilterIndex = 0 CDDalg.ShowOpen MSGBOX “ لقد اخترت الملف : “ + CDDalg.FileName , VBExclamation Exit Sub OpenError : MSGBOX “ لم يحد أي ملف ! “ , VBExclamation Exit Sub End Sub في البداية تقوم الشفرة السابقة بتصميم مصيدة لتصيد أخطاء الفتح . ثم تحدد عدة أنواع للملفات نرغب في عرضها دون غيرها باستخدام المنهج Filter وذلك بوضع الأنواع ما بين الرمز "|" ليتم عرض كل الملفات التي لها هذا الأمتداد ويتم الضبط لعرض الملفات من النوع الأول وترتيبه 0 بواسطة المنهج FilterIndex ثم استخدام المنهج ShowOpen لعرض صندوق الحوار القياسي فتح وعند نقر الزر Ok أو الزر Cancel دون اختيار أحد الملفات تظهر رسالة خطأ بذلك أما عند نقر الزر Ok بعد اختيار أحد الملفات يظهر صندوق رسائل باسم الملف والمسار .
يعتمد هذا البرنامج في التعامل مع الملفات بالقراءة أو الكتابة على تقنية الوصول العشوائي للملفات Random Access Technique والتي تشبه في بنيتها مع قواعد البيانات فهي تحتوي على عدة سجلات Records لها طول ثابت ويتكون كل سجل من عدد معين وثابت من الحقول Fields التي تحوي المعلومات والتي لها ايضا طول ثابت . البرنامج PhoneIndex الهدف من هذا البرنامج تصميم أجندة تليفونات اليكترونية يمكن الاضافة والتعديل والحذف لأي أسم ورقم تليفون وملاحظات عن أي فرد البرمجة المرئية Object Property Settings Object Property Settings Form Name FRMPhoneIndex Text Box Name TXBPhone – TXBName – TXBRem BorderStyle Font Ms Sans Serif (Bold/12) StartUpPosition MultiLine T MoveAble F Height Caption دليـل التليـــفونـات Left Height Top Left Width Top Width Command Button Name CBAdd – CBEdit – CBDel – CBNext – CBPrev – CBSearch – CBExit Label Name LBLPhone – LBLName – LBLRem Caption أضافة – تعديل – حذف – التالي – السابق – بحث – خروج Caption تليفون – الأسم – ملاحظات Cancel F – F – F – F – F – F –T Height Default T– F – F – F – F – F – F Left Height Top Left Width Top Width كتابة الشفرة في البداية علينا تصميم سجل البيانات وهذا بداخل البرنامج الجزئي Module بالشكل التالي Type PersonInfo Name as String * 40 Phone as String * 10 Rmrk as String * 100 End Type تؤدي الشفرة السابقة إلى تصميم سجل بيانات يتحوي على 3 حقول هي حقل Name أو الأسم ( حرفي طوله 40 حرف ) وحقل Phone أو تليفون ( حرفي طوله 10 حروف ) وحقل ملاحظات ( حرفي طوله 100 حرف ) كتابة شفرة المتغيرات داخل النافذة PhoneIndex Dim PhInd as PersonInfo Dim FN as Integer Dim RL as Long Dim CR as Long Dim LR as Long تصرح الشفرة السابقة عن متغير يمثل سجل بيانات من النوع الذي أنشأناه وهو PersonInfo وهو متغير وسطي نتعامل معه داخل الذاكرة فقط ولكن أي بيانات تم أدخالها داخل هذا السجل لا تؤثر على الملف الموجود داخل وسط التخزين ، بالاضافة إلى المتغيرات التي سبق أن أوضحناها من قبل . كتابة الشفرة الخاصة بالبرنامج الفرعي ShowCurrentRecord Private Sub ShowCurrentRecord() Get # FN , CR , Phind TXBPhone.Text = Trim(Phind.Phone) TXBName.Text = Trim(Phind.Name) TXBRem.Text = Trim(Phind.Rmrk) FRMPhoneIndex.Caption = “ سجل رقم : “ + STR(CR) + “/” + STR(LR) End Sub يتم أستدعاء السجل الحالي لعرض بياناته ثم عرض هذه البيانات داخل أدوات عرض النصوص ثم عرض ترتيب السجل الحالي بالناسبة إلى اجمالي السجلات داخل عنوان النافذة PhoneIndex . كتابة الشفرة الخاصة بالبرنامج الفرعي SaveCurrentRecord Private Sub SaveCurrentRecord() Phind.Phone = TXBPhone.Text Phind.Name = TXBName.Text Phind.Rmrk = TXBRem.Text Put # FN , CR , Phind FRMPhoneIndex.Caption = STR(CR) + “/” + STR(LR) End Sub تؤدي الشفرة السابقة لإدخال البيانات الجديدة الموجودة داخل صنديق النصوص إلى السجل في ذاكرة الجهاز ثم تعديل ترتيب السجلات الإجمالي ليمثل الترتيب الصحيح بعد إضافة السجل الجديد . كتابة الشفرة الخاصة بتحميل النافذة Private Sub Form_Load() RL = LEN(PhInd) FN = FreeFile Open App.Path & “\Indexer.TEL” Random As FN Len = RL CR = 1 LR = FileLen(App.Path & “\Indexer.TEL”) / RL If LR = 0 Then LR = 1 ShowCurrentRecord End Sub نبدأ عملية التعامل مع الملفات بقتح الملف أولا لنستطيع التعامل معه وتقوم الشفرة السابقة بتنفيذ هذه العملية ، كما يلي :- • في البداية علينا تحديد طول السجل باستخدام الأمر Len(Temp Record Name) . • يتم تحديد رقم اللف المميز تلقائيا باستخدام الأمر FreeFile للحصول على رقم أول ملف فارغ يمكن التعامل بواسطته . • ثم يتم فتح الملف باستخدام الامر Open كما سبق أوضحنا . • يتم بعد ذلك تحديد ترتيب أول سجل في الملف وهو CR = 1 ويتم عرض بيانات هذا السجل بواسطة البرنامج الجزئي الفرعي ShowCurrentRecord . • يتم تحديد ترتيب السجل الأخير باستخدام المعادلة التالية ( ترتيب السجل الأخير = حجم الملف بالبايت ÷ حجم السجل الواحد ) وبما أن حجم السجل ثابت فيتناسب حجم الملف مع مضاعفات حجم السجل الواحد مما يؤدي إلى أن يكون الناتةج رقم صحيح ثم يختبر ترتيب أخر سجل فإذا كان ترتيبه 0 إذا فإن هذا الملف فارغ تماما وهنا عليه تعديل ترتيب أخر سجل ليصبح ترتيبه 1 . كتابة الشفرة الخاصة بالنقر على الزر خروج Private Sub CBExit_Click() SaveCurrentRecord Close # FN End End Sub
كتابة الشفرة الخاصة بالنقر على زر أضافة Priavte Sub CBNew_Click() SaveCurrentRecord LR = LR + 1 Phind.Phone = “ “ Phind.Name = “ “ Phind.Rmrk = “ “ Put # FN , LR , Phind CR = LR ShowCurrentRecord TXBPhone.SetFocus End Sub تقوم الشفرة السابقة بتنفيذ البرنامج الفرعي SaveCurrentRecord لحفظ السجل الحالي داخل الملف خوفا من ضياع هذه البيانات ثم إضافة سجل جديد فارغ للملف ترتيبه الأخير فيزيد ترتيب أخر سجل بمقدار 1 ثم يعدل ترتيب السجل الحالي ليصبح السجل الحالي هو السجل
| |
|
mansoorkoo
| موضوع: رد: تعلم فجول بيسك 6 بالتفصيل الممل 8/5/2010, 20:01 | |
| | |
|
remxx
| موضوع: رد: تعلم فجول بيسك 6 بالتفصيل الممل 8/5/2010, 20:12 | |
| | |
|
ام محمد
| موضوع: رد: تعلم فجول بيسك 6 بالتفصيل الممل 14/5/2010, 06:51 | |
| | |
|
remxx
| موضوع: رد: تعلم فجول بيسك 6 بالتفصيل الممل 16/5/2010, 02:56 | |
| | |
|