الخميس، 11 سبتمبر 2014
3:31 ص

تابع للدرس ألـ11 من دورة أحتراف ألفجوال بيسك 6 ( المتغيرات و الثوابت و المعاملات) (ألقسم الثاني والاخير )

السلام عليكم ورحمه الله ..تابع للدرس السابق (الدرس11: المتغيرات و الثوابت و المعاملات)



أوامر الإعلان عن المتغيرات : 
أمر الإعلان Dim : يستخدم لتعريف متغير ديناميكي Dynamic Variables ضمن الأجراء ويكون مجال رؤية هذا المتغير داخل الأجراء فقط وعمرة من عمر الأجراء أي أن عندما ينتهي الأجراء ينتهي معه مفعول المتغير المحلي ويصبح لا قيمة له أو صفر ولهذا سمي أمر الإعلان هذا بديناميكية لأنه يوفر في الذاكرة بشكل جيد .
أمر الإعلان Redim : تستخدم لتعريف مصفوفة ديناميكية Dynamic Array غير معرفة لعدد العناصر أي يمكنك تغير أبعادها أثناء عمل البرنامج ويعمل أمر الإعلان Redim عندما ترغب في تحديد حجم المصفوفة وتظهر الفائدة من أمر الإعلان Redim في استغلال الجزء المطلوب فقط من الذاكرة دون زيادة . وأمر الإعلان هذا يجعلنا ندخل إلي عالم آخر وهو عالم المصفوفات وإذا تكلمنا عن المصفوفات في هذا الجزء الصغير فبذلك نكون قد لا نوفيها حق قدرها . ولكن من يعلم قد يأتي يوم الأيام ونتكلم عن المصفوفات إنشاء الله .

فائدة (3) : 
أن أمر الإعلان Redim لا يستخدم ألا داخل أجراء فقط أي لا يستخدم في قسم الإعلانات مثل الأمر Dim 
أمر الإعلان Static : يستخدم لتعريف متغير ستاتيكي Static Variables ضمن الأجراء ويكون مجال رؤية هذا المتغير داخل الأجراء فقط وعمرة من عمر الوحدة التي بداخلها الأجراء سواء كانت الوحدة هذه Form أو Module أو Class أي أن عندما ينتهي الأجراء يظل المتغير ساكن في الذاكرة وكذلك قيمته موجودة ولكنك لا يمكنك الوصول إلية ألا من داخل الأجراء التابع له .

نصيحة (1) : 
حاول أن لا تكثر من استخدام أمر الإعلان Static ألا في أضيق الحدود لأنه يستغل الذاكرة طوال فترة عمل البرنامج . 
أمر الإعلان Private : : يستخدم لتعريف متغير عام General Variables ولكنه يكون علي مستوي الوحدة سواء كانت Form أو ملف برمجة BAS أو فئة Class وبالطبع عمرة يكون من عمر الوحدة .
أمر الإعلان Public : يستخدم لتعريف متغير عام General Variables ولكنه يكون علي مستوي المشروع ككل ويمكن الوصول إليه من جميع الوحدات الموجودة في المشروع وعمرة من عمر البرنامج ككل ويظل في الذاكرة حتى ينتهي البرنامج .
أمر الإعلان Global : أمر الإعلان أو الكلمة المحجوزة Global كانت تستخدم في الإصدارات القديمة للفيجول بيسك ومازالت حتى الآن تستخدم وهي تؤدي نفس وظيفة أمر الإعلان Public ولكنك لن تستطيع التصريح عنها ألا في الوحدات النمطية فقط .

الإعلان بإضافة رمز مميز : 

تستخدم هذه الطريقة في نوع أي متغير وذلك بإضافة حرف معين إلي اسم المتغير و هذه الطريقة تسهل عليك معرفة نوع المتغير المستخدم مع اسم المتغير و الجدول التالي يبين شكل هذه الأحرف و النوع المقابل لها ..
نوع المتغير Integer : الرمز المستخدم " % "
نوع المتغير Long : الرمز المستخدم " & "
نوع المتغير Single : الرمز المستخدم " ! "
نوع المتغير Currency : الرمز المستخدم " # "
نوع المتغير Double : الرمز المستخدم " @ "
نوع المتغير String : الرمز المستخدم " $ "
فمثلا الأمر ..
كود:
MyName$="TafTaf"
يعلن عن متغير من نوع String ( سلسة من الحروف ) 
الإعلان باستخدام الوظيفة AS : 

وهنا تفيد الوظيفة AS في تميز نوع المتغير الذي يأتي بعد الوظيفة AS مع أحد الأوامر Redim. Dim. Static. Global Private. Public حيث يتم كتابة الأمر ثم اسم المتغير ثم كتابة الوظيفة AS ثم كتابة نوع المتغير . انظر المثال التالي .

كود:
Dim TafTaf  AS String
فائدة (4) : 
أوامر الإعلان السابق ذكرها هي تعتبر ضمن الكلمات المحجوزة مثل الجملة Option Explicit أو أمر Print والكلمات المحجوزة هي الكلمات التي يحتفظ بها الفيجول بيسك لنفسه ولا يمكنك استخدامها كاسم للمتغير أو للثابت . 

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

في هذه الطريقة يتم استخدام أحد الأوامر التالية :
( CCur , CLng , CDbl , Clnt, CStr , CSng, Cvar)
للأنواع الآتية علي التوالي.
Currency , Long , Double , Integer , String , Single , Variant
وعند كتابة أي حرف بعد أي من هذه الأوامر تتحول كل المتغيرات التي تبدأ بهذه الأحرف إلي نفس النوع المعلن عنه في الأوامر المستخدم ، وفي المثال التالي نستخدم الأمر Clnt للإعلان عن جميع المتغيرات الموجودة في البرامج والتي تبدأ بحرف A علي إنها من النوع Integer .
كود:
Clnt A
أما في المثال التالي فيتم الإعلان عن التغيرات الموجودة في البرامج و التي تبدأ بأحد الأحرف التالية B أو C أو D علي أنها من النوع String .
كود:
Cstr B-D

لاحظ أنه لا ينبغي كتابة أكثر من حرفين متصلين بدون العلامة ( - ) بعد الأمر . 
للإعلان عن أي متغير يبدأ بالحرف (A ) أو بأحد الحروف من ( D ) إلي ( F ) أو من ( X ) إلي ( Z ) علي أنه من النوع Double اكتب الأمر بالصورة التالية :
كود:
CDbl A, D-F , X-Z
علاقة المصفوفات بالمتغيرات : 

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

كود:
Private Names(99)  As String
مدي استخدام المتغير وعمرة Lifetime and Scope of Variable : 

ويقصد بمدي استخدام المتغير Scope Of Variable والإجراءات و الوحدات النمطية التي ستتأثر به أي الأماكن التي أن يستخدم فيها هذا المتغير داخل البرنامج أما عمر المتغير Lifetime Of Variable فيقصد به المدة التي سيبقي المتغير خلالها محتفظا بقيمته الحالية داخل الذاكرة دون أن يفقدها وتنقسم المتغيرات من حيث مدة بقائها في الذاكرة ومداها إلي متغيرات عامة ومتغيرات علي مستوي الوحدة النمطية ومتغيرات علي مستوي الأجراء وفيما يلي نوضح كل نوع من هذه الأنواع الثلاثة والأمر الذي يستخدم للإعلان عنه .. 

1. المتغيرات العامة .. 
هي المتغيرات التي يمكنك استخدامها من أي مكان داخل البرنامج أو التطبيق وتبقي في الذاكرة الحاسب طوال فترة عمل البرنامج فإذا انتهي البرنامج تحذف من الذاكرة ولذلك يجب أن يعلن عن المتغير العام من خلال الوحدة النمطية لكي تتعرف عليه جميع الإجراءات الموجودة في جميع الوحدات النمطية بالبرنامج أو التطبيق .
يستخدم الأمر Public للإعلان عن المتغيرات العامة في المثال التالي يتم الإعلان عن متغير عام لكي تستخدمه جميع الإجراءات في جميع الوحدات النمطية من نوع Integer واسمه ABC .
كود:
Public ABC AS Integer
3. متغيرات علي مستوي الأجراء .. 
يقتصر مدي هذه المتغيرات علي الأجراء الموجودة به فقط ولا يمكن استخدامه في أي مكان غيرة وهي بهذا تعتبر اقل المتغيرات مدي من حيث عمرها فهي تبقي موجودة بالذاكرة حتى بعد أن ينتهي الأجراء الذي أعلن فيه عنها وبهذا يتضح أن الفرق بين هذه المتغيرات و المتغيرات العامة أو المتغيرات علي مستوي الوحدة النمطية في مداها فقط حيث لا يتعدى مداها الأجراء الذي أعلن عنها فيه . يستخدم لهذا الغرض الأمر Static ويتضح ذلك من المثالين التالين في المثال الأول يظهر المتغير S1 محتفظا بقيمته فترة تنفيذ الأجراء Load Form وبمجرد الخروج من الأجراء ستكون قيمته تساوي صفر بينما في حالة استخدام المثال الثاني فإن المتغير سيحتفظ بقيمته بعد تنفيذ نفس الأجراء السابق .
المثال الأول : 
كود:
Private Sub Form_Load (Cancel As Integer)
Dim S1 As Integer
S1 = 5
End Sub
المثال الثاني :
كود:
Private Sub Form_Load (Cancel As Integer)
Static S1 As Integer
S1 = 5
End Sub


فائدة (5) :

يوفر عليك مدي المتغيرات وعمرها استهلاك مساحة من الذاكرة بدون داع فمثلا إذا كنت تريد استخدام متغير في أكثر من وحدة نمطية فيجب أن تعلن عنه كمتغير عام بالأمر Public وإذا كنت تحتاج للمتغير في وحدة نمطية واحدة فقط استخدم الأمر Private للإعلان عنه أما إذا كنت تحتاج للمتغير مؤقتا في هذا الأجراء فقط استخدم أمر Static ليبقي مداه داخل الأجراء فقط . 

.مستويات الإعلان عن المتغيرات : ( هذا الجزء منقول عن موضوع العقل الصناعي : الثوابت و المتغيرات للأخ BSC ) 
في القسم العام لملفات البرمجة Dim عام ، Private عام ، Public شامل ، Global شامل
في القسم العام للنوافذ Dim عام ، Private عام ، Public عام 
داخل إجراءات الملفات Dim ساكن
داخل إجراءات النوافذ Dim محلي ، Static ساكن 

المصطلحات : 
- شامل : عام لجميع نوافذ البرنامج وملفاته 
2- عام : عام لجميع إجراءات النافذة أو الملف الذي تم الإعلان داخلها ( الشامل أعم )
3- المحلي والساكن : كلا منهما خاص بالإجراء الذي تم الإعلان داخله 

الفرق بين المحلي والساكن : 
- المتغير المحلي يفقد قيمته عند الخروج النهائي من الإجراء 
2- الساكن يحتفظ بقيمته طوال مدة تشغيل البرنامج

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

تسمية الثابت : 
يخضع اسم الثابت لنفس الشروط التي شرحناها عند اختيار اسم المتغير وهي ألا يزيد عدد حروفه عن 40 حرفا، وأن يبدأ بحرف هجائي وألا يستخدم إحدى الكلمات المحجوزة للفيجول بيسك .

مدي الثوابت : 
تتبع الثوابت نفس القواعد التي تحدد مدي المتغيرات حيث يحدد مدي الثابت بالمكان الذي تعلن فيه عن هذا الثابت . وتوضيح ذلك كما يلي .

ثوابت عامة : إذا أردت أن يكون الثابت عاما أي يمكن استخدامه من أي مكان في البرنامج فيجب أن تعلن عنه في الوحدة النمطية بشرط أن يسبق الإعلان عنه كلمة Public هكذا.

كود:
Public Const My_Name As String = "TafTaf"
ثوابت علي مستوي الوحدة النمطية : لكي تستخدم الثابت في وحدة نمطية فقط يجب أن تعلن عنه في قسم الإعلانات في هذه الوحدة النمطية تسبقه كلمه Private هكذا.
كود:
Private Const My_Age As Integer = 25

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

الإعلان عن الثوابت : ( هذا الجزء منقول عن موضوع العقل الصناعي : الثوابت و المتغيرات للأخ BSC ) 
يتم الإعلان عن الثوابت باستخدام( Const ) أو ( Public Const )
مستوى الإعلان : 

1- إذا تم الإعلان داخل إجراء يعتبر الثابت المعلن عنه محليا Const a=5 


2- وإذا تم الإعلان في القسم العام للنافذة يصبح عاما لجميع إجراءات تلك النافذة Const a=5 


3- وإذا تم الإعلان في القسم العام للملف يصبح عاما لجميع إجراءات ذلك الملف Const a=5 


4- أما إذا تم الإعلان في القسم العام للملف - كما سبق - لكن سبقت كلمة Const بكلمة Public فسيصبح الثابت شاملا لجميع ملفات البرنامج ونوافذه

يتم الإعلان عن الثابت الشامل هكذا ( Public Const a=5 )

الثوابت و API : 

كلنا نعرف مكتبات الربط الديناميكي Dynamic Link Libraries ( DLL ) و الفائدة الكبيرة التي نستفيد منها في برامجنا من التوابع ( الدوال ) و التي يطلق عليها واجهة برمجة التطبيقات Application Programming Interface ( API ) .
ولكن عند استخدام هذه التوابع يوجد بعض الثوابت التي يجب تمريرها لهذه التوابع لتقوم بعملها المطلوب منها علي أكمل وجهه لان الكل يعرف القاعدة الذهبية تقول أن لكل دالة من دوال API لها ثوابت خاصة بها . انظر المثالي التالي :
يصرح بهذه الدالة في قسم التصاريح العامةGeneral:

كود:
Private Declare Function MessageBox Lib "user32" _
Alias "MessageBoxA" (ByVal hwnd As Long, ByVal _
lpText As String, ByVal lpCaption As String, ByVal _
wType As Long) As Long
Const MB_OK = 0
اكتب هذا الكود في حدث Click للـ CommandButton :
كود:
Private Sub Command1_Click()
MessageBox Me.hwnd, "Hallow", "Example", MB_OK
End Sub
الكود السابق هو كود بسيط لعرض رسالة عن طريق توابع الــ API .
في البداية عملنا علي التصريح بالدالة في قسم التصاريح العامة بأمر الإعلان Private وبعد ذلك صرحنا عن ثابت وهو ثابت معرف مسبقا و موجود في الفيجول بيسك واسم الثابت MB_Ok وبالطبع لك مطلق الحرية في تسمية الثابت كما تعلمنا سابقا . 
والخطوة الثانية العمل علي تمرير الثابت ليؤدي وظيفته المطلوبة منه في حدث Click للـ CommandButton أو في أي حدث تريده . ووظيفة هذا الثابت هي إظهار الزر موافق vbOkOnly للرسالة .

فائدة (6) : 
من الممكن الاستغناء عن أمر الإعلان Private إذا كان الإعلان علي مستوي الوحدة أو الأجراء 

كود:
Private Const MB_OK = 0
Const MB_OK = 0
يؤديان نفس الوظيفة .. 

أنتضرونا بالدرس الـ12  وأقتراب تكملة الدورة ألاحترافية ألمقدمة من كادر مدونة علوش للمعلوميات 

0 التعليقات:

إرسال تعليق