الفصل الأول : كيف تكتب برنامجك الأول ؟
مقدمة :-
هذا الفصل مخصص للمبتدئين في استخدام وسائل البرمجة بواسطة 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