Visual Basic (4)

 

الحدث Event  هو كل مايقوم به المستخدم من حركات بالفأرة كالنقر أو النقر المزدوج أو ما يقوم به من ضغط على لوحة المفاتيح .

 

كيف تستجيب للحدث ؟

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

 

 

 

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

sub command1_click

فهو يضع كلمة sub وهي تحدد بدء الإجراء ثم يضع اسم الأداة ثم حرف (-)ثم اسم الحدث . وفي النهاية يضع عبارة end sub وهي تحدد نهاية الإجراء .

 

الأحداث الناتجة عن الفأرة

متى يقع

معناه

الحدث

عند نقر المستخدم فوق الأداة أو النافذة ويمكن أن يقع أيضاً إذا ضغط المستخدم عصا المسافة على لوحة المفاتيح بينما التركيز على زر أوامر

النقر

Click

عند نقر المستخدم نقراً مزدوجاً فوق الأداة أو النافذة

النقر المزدوج

DbClick

عند تحريك المستخدم الفأرة فوق الأداة أو النافذة

حركة الفأرة

MouseMove

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

زر الفأرة اسفل

MouseDown

بعد أن يقوم المستخدم بنقر زر الفأرة وتحريره . أي بعد عملية النقر .

زر الفأرة ارتفع

MouseUp

 

Sub Command1_MouseDown (Button As Integer, Shift As Integer, X As Single, Y As Single)

 

End Sub

وهو هنا يعطيك متغيرات ، كل واحد منها يحمل معلومة معينة ، كما يلي :

المتغير Button :

الأحداث الأربعة السابقة تقع عند ضغط المستخدم بأي زر من أزرار الفأرة الثلاثة ويوضح لك المتغير Button   أي زر منها قام المستخدم بضغطه ، وله ثلاثة احتمالات :

1.                  المستخدم ضغط الزر الأيسر

2.                  المستخدم ضغط الزر الأيمن

3.                  المستخدم ضغط الزر الأوسط

ولايمكن للمستخدم أن يضغط أكثر من زر في نفس الوقت . قإذا أردت أن تختبر إن كان المستخدم قد ضغط الزر الأيمن ، فإنك تكتب :

if  button = 2 then …………..

فإذا كان المستخدم قد ضغط الزر الأيمن ، سيقوم "فيجول بيسيك" بتنفيذ الأمر التالي لكلمة then

التغير Shift :

يوفر لك معلومات عن حالة المفاتيح الثلاثة Ctrl  و Shift و Alt  أثناء ضغط زر الفأرة ، كما يلي :

1                                                  المستخدم ضغط مفتاح shift

2                                                   المستخدم ضغط مفتاح Ctrl

    4            المستخدم ضغط مفتاح Alt

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

if shift = 1 then

أو أردت أن تختبر إن كان قد ضغط مفتاحي alt  و shift أثناء ضغطة لزر الفأرة 

if shift = 5 then

 

المتغيران y,x  :

يحددان موقع المشيرة داخل الأداة أثناء عملية ضغط زر الفأرة .

 

الأحداث الناتجة عن لوحة المفاتيح

هناك ثلاثة أحداث متعلقة بلوحة المفاتيح ، هي :

متى يقع

معناه

الحدث

عندما يقوم المستخدم بضغط حرف من حروف آسكي فوف لوحة المفاتيح

ضغط حرف

Keypress

عندما يقوم المستخدم بضغط أي حرف على حرف وقبل أن يحرره أي أثناء عملية الضغط

المفتاح أسفل

KeyDown

عندما يقوم المستخدم بضغط أي حرف على لوحة المفاتيح ثم يحرره أي بعد عملية الضغط

المفتاح ارتفع

Keyup

 

ويستخدم الحدث keypress  عندما تريد أن تعرف الحرف الذي ضغطه المستخدم فوق لوحة المفاتيح

مثال :

Sub Form_KeyPress (keyascii As Integer)

Print keyascii

If keyascii = 81 Then

End

End If

 

End Sub

 

 

 

المتغيرات

المتغير Variable هو اسم تستخدمه لحمل قيمة متغيرة . فمثلاً إذا أردت أن تسأل المستخدم عن اسمه ، فاسم المستخدم قيمة متغيرة لأنك لاتعرف ماهو . فممكن أن يكون "علي" أو "محمد" أو "عبدالمحسن" أو أي اسم آخر . لذلك نستخدم له متغير ، وليكن UserName$ في هذه الحالة يمكنك كتابة الأمر :

)"أدخل اسمك من فضلك"UserName$ = InputBox$ (

سيعرض "فيجول بيسيك" مربع حوار

 

 

 

 ملاحظة : يستخدم امر inputbox$  لطلب معلومة من المستخدم.

شرح السطر السابق هو :

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

وعندما ينتهي المستخدم من إدخال الاسم ، فإن "فيجول بيسيك" يضع هذا الاسم في المتغير username$ . ويبقى هذا المتغير يحمل هذه القيمة حتى تقوم بتغييرها.

ويمكنك استخدام القيمة التي يحملها المتغير كأن تضعها في متغير آخر ، مثل :

clientName$ = UserName$

فهنا سينسخ "فيجول بيسيك" القيمة الموجودة في المتغير username$ ويضعها في المتغير cilentname$ . ويمكن أن تضع هذه القيمة في أداة القائمة مثلاً :

list1.additem username$

ويمكنك تغيير القيمة التي يحملها المتغير بوضع قيمة جديدة داخله ، فيلغي "فيجول بيسيك" القيمة القديمة ويضع محلها القيمة الجديدة . مثلاً :

"عبدالرحمن  مصلحusername$ = "

وهذا المتغير يُسمى متغير حرفي string variable  لأنه يحتوي على مجموعة حروف . وتوجد كذلك متغيرات عددية وهي تستخدم لحمل الأعداد وليس الحروف . فمثلاً يمكنك أن تسأل المستخدم عن عمره وتضع القيمة التي يدخلها في متغير عددي :

)"أدخل عمرك ، من فضلك"userage = inputbox$ (

ويتميز المتغير العددي بإمكانية إجراء العمليات الحسابية مثل الطرح والضرب والقسمة عليه مثل  برنامج الوحدات الذي قمتُ ببرمجته وشرحة

اختيار اسم المتغير

هناك شروط لاختيار اسم المتغير منها :

·                    يجب ألا يزيد اسم عن 40 حرفاً

·                   يجب أن يكون أول حرف منه حرفاً هجائياً

·                   يجب ألا تستخدم كلمة من الكلمات المحجوزة reserved words كأسم للمتغير من الكلمات المحجوزة print  و end  ولكن يمكن أن تكون جزء من اسم اخر مثل PrintText

أنواع المتغيرات

مداه

معناه

نوع المتغير

من –32768 إلى 32767

عدد صحيح

Integer

من –214748E إلى 21474

عدد صحيح

Long

-3.402823 إلى –1.40129

من 1.4012 إلى 3.4028

عدد ذو فاصلة عشرية عائمة

Single

-1.7976931 إلى –4.9406

من 4.94065 إلى 1.79769

عدد ذو فاصلة عشرية

Double

============

=======

Currency

من 0إلى 65.500 حرف تقريباً

مجموعة من الحروف

String

حرفي أو عددي

بتاع كُـله

Variant

 

الإعلان عن المتغيرات

الإعلان عن المتغير أن تخبر "فيجول بيسيك" عن اسم المتغير ونوعه ، مثل :

Dim UserName As String

فهنا الأمر Dim يخبر "فيجول بيسيك" أننا نريد أن نعلن عن متغير ، وكلمة UserName  كمتغير يحمل سلسلة حروف . في هذه الحالة ، يقوم "فيجول بيسيك" بحجز الذاكرة الضرورية لذلك المتغير وتهيئته .

لاحظ أن الإعلان عن المتغير ليس إجباري

الفائدة من الإعلان عن المتغيرات

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

)"أدخل اسمك من فضلك"username$ = inputbox$ (

print usename$

سيقوم السطر الأول بالتنفيذ ويطلب المستخدم بالاسم ولكن لن يطبع اسم المتغير لإن الكلمة خطا (ناقصة حرف r ) ومع ذلك سوف يقوم"فيجول بيسيك" بتنفيذ البرنامج بدون أي مشاكل !!!

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

Option Explicit

ويتم الإعلان عن المتغيرات باستخدام أحد الأوامر التالية :

Dim  ,Global   ,Static

يجب الإلتزام بنوع المتغير

مثلا :

لا يجوز أن تعلن عن متغير عددي وتضع فيه قيمة حرفية

والعكس صحيح كذلك

 

مدى المتغيرات وعمرها :

المتغيرات العامة

المتغير العام هو المتغير الذي يمكنك أن تستخدمه من أي مكان في البرنامج ، أي أن مداه يشمل جميع البرنامج بجميع ملفاته ونوافذه .

ويبقى في الذاكرة طوال فترة عمل البرنامج ولا يحذف من الذاكرة إلا بعد انتهاء البرنامج .

ولكن يجب أن تضع الإعلان عن المتغير العام في ملف برمجة وليس في نافذة .

طريقة ادخال المتغيرات التي ترغب في جعلها متغيرات عامة  هي

Global UserName As String

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

 

المصفوفات

المصفوفة Array هي سلسلة من المتغيرات تحمل نفس الاسم ويتم التمييز بين المتغيرات داخل هذه المصفوفة باستخدام رقم المتغير داخلها .

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

Dim EnpName(50) As String

هنا ، الاسم EmpName  هو اسم المصفوفة ، والرقم (50) هو عدد العناصر داخلها ثم كلمة String تحدد نوع المتغيرات التي ستضعها في المصفوفة . كلمة as string اختيارية وإن لم تحددها سيكون نوع المتغيرات هو variant وبالتالي يمكن تخزين أي نوع فيه .

يمكنك قراءة أسماء الموظفين ووضعها في المصفوفة باستخدام تكرار For …Next

 

بالشكل التالي :

For counter = 0 to 49

Empname(counter) = inputbox$("أدخل اسم الموظف التالي")

Next counter

 

فهنا نستخدم تكرار for ..next  (سوف نشرحها بالتفصيل في المحاضرات التالية)

لنطلب من المستخدم إدخال أسماء الموظفين . هذا التكرار يستمر خمسين مرة من صفر إلى 49 . لاحظ أن العد داخل المصفوفة يبدأ من صفر وليس من 1 . لذلك تبدأ المصفوفة من الرقم صفر وتستمر حتى 49 .

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

"الدكتور منصور"empname(9) =

وإذا أردت قراءة القيمة الموجودة في المتغير رقم 20 داخل المصفوفة ووضعها في متغير آخر فإنك تكتب :

curname =empname(19)

لاحظ مرة أخرى أن الوضع الافتراضي للمصفوفات هو أن يبدأ العد داخلها من صفر . فإذا رغبت أن تجعل العد يبدأ العد من 1 ضع الأمر التالي :

option base 1

 

الثوابت

الثوابت تعني لها قيمة لاتتغير بعكس المتغير

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

مثال :

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

for counter = 1 to 30

…………………..

………………….

Next counter

لنفرض أنك كتبت أمراً مثل هذا في ستة أو سبعة مواضع داخل البرنامج ، ثم أردت بعد ذلك أن تغير عدد الموظفين من 30 إلى 60 . فماذا تفعل ؟ في هذه الحالة سوف تضطر إلى أن تبحث عن كل المواضع التي ذكرت فيها الرقم 30 وتغيره إلى 60 وإذا نسيت موضعاً سوف يؤدي ذلك إلى خلل في عمل البرنامج .

وكحل لتلك المسألة ، استخدم ثابتاً constant وضعة في بداية البرنامج أو الإجراء مرة واحدة وتضع فيه العدد الذي ترغب فيه ، مثل :

const NUM_OF_EMPLOYEES =30

وبعد ذلك تقوم في عملية التكرار بعمل التالي :

for counter = 1 to NUM_OF_EMPLOYEES

…………………..

………………….

Next counter

وبذلك يتحقق أمران : الأول أن الثابت NUM_OF_EMPLOYEES أسهل في تذكر معناه من الرقم 30 ، والثاني : انك لو أردت تغيير عدد الموظفين من 30 إلى 60 كما افترضنا من قبل ، فكل ماعليك القيام بة هو تغيير الثابت من القيمة القديمة إلى القيمة الجديدة .

وهناك فائدة أخرى أن "فيجول بيسيك"يستخدم نظاماً خاصا لتحديد درجات  الألوان فإذا أردت أن تغير لون أداة إلى الأزرق أثناء تشغيل البرنامج ، فإنك تكتب :

LABEL1.BACKCOLOR = &HFF0000

فإن "فيجول بيسيك" يستخدم الرقم &HFF0000 للأزرق وغيرها من الألوان فكيف يمكنك أن تتذكر كل هذه الأرقام الغير مفهومة ؟

الحل : هو أن تضعها في ثوابت بالطريقة التالية :

const BLACK = &H0&

const RED = &HFF&

وبهذة الطريقة يمكنك أن تغير الألوان بطريقة مفهومة وسهلة الاستخدام

مثال :

LABEL1.BACKCOLOR = RED

مدى الثوابت :

مثل المتغيرات بالضبط فإذا كنت تريد أن تستعمل الثابت في كل النوافذ الموجودة في البرنامج فيجب أن تضع الثابت في ملف برمجة وتسبقه بكلمة Global

مثال :

Global const User_NAME = "ABSOFT2000"

أما إذا كنت تريد أن تستعمله في نافذة واحدة فضعه في داخل نافذة البرمجة الخاصة بتلك النافذة

 

الاجراءات

متى تحتاج إلى الاجراءات ؟

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

يمكنك أن تكتب هذا الجزء مرة واحدة ثم تنسخه في كل مرة تحتاج إليه وتلصقه في المكان الجديد . لكن هذا يؤدي إلى أن يكبر البرنامج بدون داع . كما إنك إذا رغبت في تعديل هذا الجزء وتحسينه ، ستضطر إلى البحث عنه في كل مكان وضعته فيه وإجراء التحسينات عليه . وهذه مسألة شاقة . وقد تنسى تعديله في مكان مما يؤدي إلى وجود خلل في البرنامج .

الحل الأمثل هو أن تضع مجموعة الأوامر المتكررة في ( إجراء عام ) ثم تستدعي هذا الإجراء كلما احتجت له . وهذه هي فائدة الاجراءات

كيف تكتب الإجراء ؟

 


Object
 انقر نافذة البرنامج  نقرا مزدوجا لكي تفتح لك نافذة البرمجة ثم إذهب إلى  

 

واضغط السهم سوف ينسدل لك قائمة انقر منها (general)

وبعد ذلك سوف تجد نافذة البرمجة خالية اكتب فيها ما يلي :

             اسم الاجراءsub  

Sub Getfilename مثل :

ثم اضغط زر إدخال من لوحة المفاتيح يظهر لك مايلي : 

 

Sub getfilename ( )

هنا تكتب الاوامر التي تريدها لهذا الاجراء

End sub

وعندما تريد أن تستدعي الاجراء ماعليك إلا أن تكتب اسمه فقط  .

 

 

 

 


Copyright © www.kettaneh.net