بتـــــاريخ : 11/8/2008 7:51:41 PM
الفــــــــئة
  • الحـــــــــــاسب
  • التعليقات المشاهدات التقييمات
    0 1598 0


    Visual Basic (4)

    الناقل : mahmoud | العمر :35 | المصدر : www.kettaneh.net

    كلمات مفتاحية  :
    دروس فيجول بيسك

     

    الحدث 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
    وعندما تريد أن تستدعي الاجراء ماعليك إلا أن تكتب اسمه فقط 
    كلمات مفتاحية  :
    دروس فيجول بيسك

    تعليقات الزوار ()