You are on page 1of 64

‫هاني عبد الحسين هادي‬

‫تعلم فجول بيسك‬


‫البرمجة بلغة فيجول بيسك‬
‫‪Programming with Visual Basic‬‬

‫‪ 1-1‬تشغيل ‪:Visual Basic‬‬


‫من قائمة البداية ‪ Start‬نختار ‪ Programs‬ثم من البند ‪Microsoft Visual Basic‬‬
‫‪ 6.0‬نضغط على ‪ ،Microsoft Visual Basic 6.0‬انظر الشكل )‪.(1-3‬‬

‫شكل رقم )‪(1-3‬‬


‫بعد تشغيل الفيجوال بيسك تظهر واجهة التطبيق الرئيسية كما في الشكل )‬
‫‪ .(2-3‬ولتكوين مشروع جديد نفتح قائمة ‪ File‬ونضغط المر ‪ New Project‬فيظهر‬
‫مربع حوار مشروع جديد‪ ،‬انظر الشكل )‪ .(3-3‬ويكون المشروع التنفيذي‬
‫القياسي )‪ (Standard EXE‬مؤشر تلقائيا‪.‬‬

‫‪77‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫هاني عبد الحسين هادي‬

‫شكل رقم )‪(2-3‬‬

‫شكل رقم )‪(3-3‬‬


‫نضغط على الزر ‪ Open‬لفتح مشروع قياسي جديد‪.‬‬

‫‪ 1-2‬الواجهة الرئيسية للتطبيق‬


‫الشكل )‪ (4-3‬يوضح الواجهة الرئيسية للتطبيق والتي تتكون من عدة اجزاء‬
‫كما مبين أدناه‪:‬‬

‫‪78‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫هاني عبد الحسين هادي‬

‫شكل رقم )‪(4-3‬‬

‫‪ -2‬مراحل كتابة البرامج بلغة فيجول بيسك‬


‫لتكوين أي مشروع بلغة فيجول بيسك مهما كان بسيط أو معقد فل بد من المرور‬
‫بثلث مراحل هي‪:‬‬
‫‪ 2-1‬تصميم الواجهات‬
‫في هذه المرحلة يتم تحديد عدد النماذج وأنواع وعدد الكائنات في كل نموذج‬
‫ويتم أختيار المكان المناسب لكل كائن‪.‬‬
‫‪ 2-2‬تحديد الصفات‬
‫بعد تحديد عدد النماذج والكائنات في كل نموذج تأتي مرحلة تحديد صفات كل‬
‫نموذج وكل كائن ويتم ذلك بأختيار النموذج )أو الكائن( وتحديد صفاته من نافذة‬
‫الصفات وهناك صفات مشتركة بين الكائنات مثل السم )‪ (Name‬والموقع )‪Top ,‬‬
‫‪ (Left‬والحجم )‪ (Width , Height‬ونوع الخط )‪ (Font‬والعنوان )‪ (Caption‬وغيرها‬
‫وهناك صفات خاصة تتوفر لكائن معين )أو عدة كائنات( مثل صفة ‪ Text‬وتمثل‬
‫النص الذي يضاف للكائن وكذلك صفة ‪ Picture‬وتمثل الصورة التي تضاف للكائن‬
‫وهناك بعض الصفات تتوفر فقط عند كتابة الشفرة )غير موجودة في نافذة‬
‫الصفات( وسنتطرق لها عند حديثنا عن الكائنات‪.‬‬
‫‪ 2-3‬كتابة الوامر البرمجية )الشفرة(‬

‫‪79‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫هاني عبد الحسين هادي‬

‫هي برامج تكتب بلغة بيسك يتم تنفيذها أو أستدعائها عند تطبيق حدث معين‬
‫على النموذج أو أي كائن موجود على النموذج مثل حدث النقر أو النقر المزدوج‬
‫أو حدث أمرار مؤشر الفأرة فوق الكائن‪.‬‬

‫مثـال )‪ : (1‬صمم الشكل التي والذي يحتوي على زر ي أوامر وصندوق نص‬
‫وأجعل المشروع يكتب رسالة ترحيب عند نقر الزر الول بينما يؤدي النقر على‬
‫الزر الثاني الى مسح رسالة الترحيب‪.‬‬

‫الشكل )‪(5-3‬‬
‫التصميم ‪ :‬نكون مشروع قياسي ونضيف عنوان للنموذج بالعبارة "مثال)‪"(1‬‬
‫ونضيف الكائنات الخرى وهي‪:‬‬
‫• صندوق نص ونمسح قيمة الصفة ‪ Text‬لنجعله فارغ‪.‬‬
‫• زر أوامر بالعنوان "أطبع رسالة" والسم ‪.CmdType‬‬
‫• ور أوامر بالعنوان " أمسح الرسالة " والسم ‪.CmdClear‬‬
‫• من نافذة الصفات نغير نوع الخط وحجمه )الصفة ‪ (Font‬للكائنات‬
‫الثلثة‪.‬‬
‫الشفرة ‪ :‬نحتاج شفرة لزري الوامر لحدث النقر وكالتي‬

‫)(‪Private Sub CmdClear_Click‬‬


‫"" = ‪Text1.Text‬‬
‫‪End Sub‬‬
‫)(‪Private Sub CmdType_Click‬‬
‫" مرحبا بكم لتعلم الفيجول بيسك الصدار السادس " = ‪Text1.Text‬‬
‫‪End Sub‬‬
‫‪ – 3‬أنواع المعطيات ومستويات تعريفها‬

‫‪80‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫هاني عبد الحسين هادي‬

‫ل يخلو مشروع من أستخدام المعطيات بأنواعها المختلفة وأستخدامها يتطلب‬


‫تحديد ثلث صفات لها هي السم ‪ ،‬النوع والقيمة والمعطيات على نوعين ‪:‬‬
‫‪ 3-1‬المعطيات الثابتة ‪Constants‬‬
‫هي المعطيات التي تبقى قيمها ثابتة ل تتغير أثناء التنفيذ وتعرف بالمر ‪Const‬‬
‫وهي أما تكون رقمية أو رمزية وتكتب عادة أسمائها بحروف كبيرة لتمييزها عن‬
‫المعطيات المتغيرة ويمكن تعريف ثابت واحد أو عدة ثوابت في سطر واحد كما‬
‫مبين أدناه‪:‬‬
‫‪Const PI = 3.14159‬‬
‫"‪Const NAM1 = "Huda" , NAM2 = "School‬‬
‫‪ 3-2‬المعطيات المتغيرة ‪Variables‬‬
‫هي المعطيات التي يمكن تغيير قيمها أثناء تنفيذ المشروع وهي أما تكون خاصة‬
‫وتعرف بالمر ‪) Dim‬أو المر ‪ (Private‬وتوضع داخل الحدث أو تكون عامة وتعرف‬
‫بالمر ‪ Public‬وتوضع خارج الحدث‪ .‬الجدول التي يوضح أنواع المتغيرات‪.‬‬

‫جدول )‪ (1‬انواع المعطيات المتغيرة‬


‫مثال على‬
‫المتغير وقيمته‬ ‫طريقة التعريف‬ ‫الوصف‬ ‫النوع‬
‫)داخل الشفرة(‬
‫عدد صحيح أعتيادي يتراوح من‬
‫‪X=15‬‬ ‫‪Dim X as Integer‬‬ ‫‪Integer‬‬
‫‪ 32768-‬إلى ‪32767‬‬
‫عدد صحيح طويل ‪ Long‬اكبر من ‪32767‬‬
‫‪B=335675434‬‬ ‫‪Dim B as Long‬‬ ‫‪Long‬‬
‫او اصغر من ‪32768-‬‬
‫‪Y=10.56‬‬ ‫‪Dim Y as Single‬‬ ‫عدد عشري ذو دقة اعتيادية‬ ‫‪Single‬‬
‫‪AZ=10.565767684‬‬ ‫‪Dim AZ as Double‬‬ ‫عدد عشري ذو دقة مضاعفة‬ ‫‪Double‬‬
‫‪Dim Name as‬‬
‫‪”Name =”Sami‬‬ ‫متغير رمزي )حرفي(‬ ‫‪String‬‬
‫‪String‬‬
‫‪DT=#10-11-1970#‬‬ ‫‪Dim DT as Date‬‬ ‫تاريخ‬ ‫‪Date‬‬
‫‪Y = True‬‬ ‫‪Dim Y as Boolean‬‬ ‫متغير منطقي‬ ‫‪Boolean‬‬
‫‪V=37‬‬
‫‪Dim V as Variant‬‬ ‫كل أنواع المعطيات المتغيرة‬ ‫‪Variant‬‬
‫‪"V="Star‬‬

‫مـلحظـة ‪:‬النوع ‪ Variant‬يمثل النوع الفتراضي للمتغيرات في حالة عدم‬


‫تعريفها )مثل ‪ (Dim R‬ويتعامل الفيجول بيسك مع المتغيرات من هذا النوع حسب‬

‫‪81‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫هاني عبد الحسين هادي‬

‫القيمة المعطاة لها في الشفرة فهو يعتبر المتغير من نوع ‪ Integer‬أذا أعطينا له‬
‫القيمة ‪ 12‬ويعتبره من نوع ‪ String‬اذا اعطينا له القيمة "‪ "Nazar‬وهكذا‪.‬‬
‫مـلحظـة ‪ :‬يسمح الفيجول بيسك باستخدام المعطيات من دون تعريفها وتحديد‬
‫أنواعها ولكن ل ينصح المبرمجون بذلك لن تعريف المعطيات وتحديد أنواعها‬
‫يسهل عملية متابعة الخطاء )التي تحدث أثناء التنفيذ( وتصحيحها ولجعل الفيجول‬
‫بيسك ل يسمح بأستخدام المعطيات أل بعد تعريفها فاننا نكتب اليعاز ‪Option‬‬
‫‪ Explicit‬داخل شفرة المشروع ولكن خارج الحداث )يسمى بمقطع تعريف‬
‫معطيات المشروع( ولكي نجبر الفيجول بيسك على اضافة هذا اليعاز )في‬
‫المقطع المذكور( تلقائيا عند تكوين أي مشروع جديد نتبع الخطوات التالية ‪:‬‬
‫نفتح قائمة ‪.Tools‬‬ ‫•‬

‫نضغط الخيار ‪ ، Options‬أنظر الشكل )‪.(6-3‬‬ ‫•‬

‫من نافذة ‪ Options‬نؤشر صندوق التحقق للخيار ‪Require Variable‬‬ ‫•‬

‫‪ Declaration‬كما في الشكل )‪ (7-3‬ونضغط زر ‪.Ok‬‬


‫نعرض نافذة الشفرة لنتأكد من وجود اليعاز في مقطع تعريف‬ ‫•‬
‫المعطيات وأذا لم يظهر اليعاز فيجب غلق المشروع وفتحه مرة أخرى )أو‬
‫فتح مشروع جديد( حيث سيظهر اليعاز في أعلى نافذة الشفرة خارج‬
‫الحداث ‪ ،‬الشكل )‪.(8-3‬‬

‫‪82‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫هاني عبد الحسين هادي‬

‫الشكل )‪(6-3‬‬

‫الشكل )‪(7-3‬‬

‫‪83‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫هاني عبد الحسين هادي‬

‫الشكل )‪(8-3‬‬
‫مـلحظـة ‪ :‬يوفر الفيجول بيسك عدة دوال للتحويل بين أنواع المعطيات كما‬
‫موضح بالجدول)‪.(2‬‬
‫جدول )‪ (2‬دوال التحويل بين المعطيات‬
‫تحويل المتغير الحالي الى‬ ‫الدالــة‬
‫منطقـي‬ ‫‪CBooll‬‬
‫تـاريـخ‬ ‫‪CDate‬‬
‫عدد صحيح ذو مدى قليل‬ ‫‪CInt‬‬
‫عدد صحيح ذو مدى كبير‬ ‫‪CLng‬‬
‫عدد حقيقي ذو مدى قليل‬ ‫‪CSng‬‬
‫عدد حقيقي ذو مدى كبير‬ ‫‪CDbl‬‬
‫‪Variant‬‬ ‫‪CVar‬‬
‫‪ 3-3‬مستويات تعريف المعطيات ‪Scope of Data‬‬
‫ويقصد بمستوى التعريف هو المكان )أو المدى( الذي يكون فيه المتغير )أو الثابت(‬
‫معرف ويمكن أستخدامه وتوجد ثلث مستويات لتعريف المعطيات‪.‬‬
‫• تعريف من مستوى الجراء أو الحدث )‪ (Procedure or Event Level‬وتكون‬
‫المعطيات معروفة داخل الحدث فقط وتعرف بالمر ‪.Dim‬‬
‫• تعريف من مستوى النموذج ووحدة الجراءات )‪ (Module Level‬وتعرف‬
‫المعطيات بالمر ‪) Private‬ويمكن تعريفها بالمر ‪ (Dim‬في مقطع التعريف‬
‫للوحدة أو النموذج )خارج الحداث( وتكون قيمها معروفة لكل أحداث النموذج‬
‫أو أجراءات الوحدة‪.‬‬
‫• تعريف من مستوى التطبيق )‪ (Application Level‬وتكون المعطيات هنا عامة‬
‫ومعروفة لكل اجراءات التطبيق )ضمن النموذج ووحدة الجراءات( وتعرف هذه‬

‫‪84‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫هاني عبد الحسين هادي‬

‫المعطيات بالمر ‪) Public‬أو ‪ (Global‬في مقطع التعريف لوحدة الجراءات أو‬


‫النموذج‪.‬‬
‫مـلحظـة ‪ :‬بعض الكتب تستخدم مصطلح الجراء )‪ (Procedure‬على الحداث‬
‫الموجودة داخل النموذج وداخل وحدة الجراءات ولهذا أستخدمنا المصطلحين لتكون‬
‫مألوفة لدى الطلبة عند قرائتهم للمصادر الخاصة بالفيجول بيسك‪.‬‬
‫مـلحظـة ‪ :‬وحدة الجراءات )‪ (Module‬هي ملف بالمتداد ‪ Bas‬تظهر تحت نماذج‬
‫المشروع )بعد أضافتها من قبل المستخدم( في نافذة متصفح المشروع وتعرف‬
‫أجراءات الوحدة عادة بالمر ‪ Public‬بدل ‪ Private‬لكي تكون متاحة لكل نماذج‬
‫المشروع‪ .‬وتصبح أداة ‪ View Object‬غير فعالة عند أختيار الوحدة لن الوحدة ل يمكن‬
‫عرضها مثل النوذج وانما نعرض الشفرة الخاصة بها من خلل أداة ‪.View code‬‬
‫وتضاف الوحدة من خلل نقر الزر اليمن في منطقة فارغة في نافذة مستعرض‬
‫المشروع وأختيار ‪ Add‬ثم ‪ ، Module‬أنظر الشكل )‪.(9-3‬‬

‫الشكل )‪(9-3‬‬
‫المثال التي يوضح لنا مستويات التعريف للمعطيات‪.‬‬
‫مثـال )‪ : (2‬المطلوب تكوين مشروع يحتوي على ثلث نماذج ‪ ،‬الول للترحيب‬
‫بالمستخدم والطلب منه أن يضغط المفاتيح ‪ Ctrl+Alt+Home‬سوية ‪ ،‬الثاني يعرض‬
‫أسم مصمم المشروع ويطلب أدخال كلمة السر الخاصة بتشغيل المشروع وعرض‬
‫بقية النماذج وبعد التأكد من صحة كلمة السر يتم عرض النموذج الثالث‪.‬‬
‫التصميم‬
‫النموذج الول ‪ :‬يضاف النموذج الول تلقائيا عند تكوين المشروع ‪ ،‬نضيف له ما‬
‫يلي‬
‫• دللة بالعنوان "مرحبا لتشغيل المشروع أضغط المفاتيح"‬
‫• دللة بالعنوان "‪ ."Ctrl+Alt+Home‬أنظر الشكل )‪.(10-3‬‬

‫‪85‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫هاني عبد الحسين هادي‬

‫النموذج الثاني ‪ :‬يضاف هذا النموذج من خلل النقر بالزراليمن على منطقة فارغة‬
‫في نافذة مستعرض المشروع واختيار ‪ Add‬ثم ‪ Form‬حيث يظهر النموذج الثاني تحت‬
‫النموذج الول ‪ ،‬نضيف له دللتين وصندوقي نص )أجعل صفة ‪ PasswordChar‬لصندوق‬
‫النص الثاني مساوية لـ *( وزري أوامر كما في الشكل )‪.(11-3‬‬
‫النموذج الثالث ‪ :‬يضاف بنفس السلوب أعله ‪ ،‬أضف له صورة وزر اوامر لغلق أو‬
‫أنهاء المشروع ‪ ،‬الشكل )‪(12-3‬‬
‫وحدة الجراءات ‪ :‬تضاف بنفس السلوب أعله حيث تظهر تحت النماذج‪.‬‬

‫الشكل )‪(10-3‬‬

‫الشكل )‪(11-3‬‬

‫‪86‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫هاني عبد الحسين هادي‬

‫الشكل )‪(12-3‬‬
‫الشفرة ‪:‬‬
‫فكرة المثال تتضمن أعطاء قيمة للمتغير ‪ DesignerName‬في حدث تابع للنموذج‬
‫الول وبما أننا نريد ظهور قيمة هذا المتغير في النموذج الثاني فأننا سنعرفه على أنه‬
‫‪ Public‬في مقطع التعريف في وحدة الجراءات )أي نجعله من مستوى التطبيق( وفي‬
‫النموذج الثاني سنعطي قيمة للمتغير ‪ Password‬داخل أحد الحداث التابعة لهذا‬
‫النموذج ولكننا سنستخدم قيمة هذا المتغير داخل حدث أخر تابع لنفس النموذج ولهذا‬
‫سنعرفه على أنه ‪ Private‬ضمن مقطع التعريف لهذا النموذج خارج الحداث )أي نجعله‬
‫من مستوى النموذج(‪ .‬أدناه شفرة وحدة الجراءات‪:‬‬
‫‪Public DesignerName As String‬‬
‫في شفرة النموذج الول أستخدمنا حدث ‪ KeyDown‬الذي يستخدم مع بعض تطبيقات‬
‫الويندوز للتأكد من ضغط المفاتيح ‪ Ctrl+Alt+Home‬كما مبين أدناه‪:‬‬
‫‪Option Explicit‬‬
‫)‪Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer‬‬
‫‪If KeyCode = vbKeyHome Then‬‬
‫‪If Shift = 6 Then‬‬
‫"شهـد ريـاض " = ‪DesignerName‬‬
‫‪Unload Me‬‬ ‫غلق النموذج الحالي'‬
‫‪FrmLogin.Show‬‬ ‫عرض النموذج الثاني '‬
‫‪End If‬‬
‫‪End If‬‬
‫‪End Sub‬‬
‫شفرة النموذج الثاني هي ‪:‬‬
‫‪Private Password As String‬‬
‫)(‪Private Sub Form_Load‬‬ ‫حدث التحميل للنموذج الثاني'‬
‫‪Me.Show‬‬

‫‪87‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫هاني عبد الحسين هادي‬

‫‪txtName.Text = DesignerName‬‬ ‫عرض أسم المصمم في صندوق النص '‬


‫"‪Password = "Help Me‬‬ ‫أعطاء قيمة لكلمة السر'‬
‫‪txtPass.SetFocus‬‬
‫‪End Sub‬‬
‫)(‪Private Sub CmdBack_Click‬‬ ‫شفرة زر الوامر رجوع '‬
‫‪Unload Me‬‬ ‫غلق النموذج الحالي '‬
‫‪FrmStart.Show‬‬ ‫عرض النموذج الول'‬
‫‪End Sub‬‬
‫)(‪Private Sub CmdStart_Click‬‬ ‫شفرة زر الوامر البداية'‬
‫التأكد من القيمة المدخلة لكلمة السر' ‪If txtPass.Text <> Password Then‬‬
‫"" = ‪txtPass.Text‬‬
‫‪txtPass.SetFocus‬‬
‫‪Exit Sub‬‬ ‫الخروج من حدث النقر لزر البداية'‬
‫‪End If‬‬
‫‪Unload Me‬‬
‫‪FrmProject.Show‬‬ ‫عرض النموذج الثالث‬
‫‪End Sub‬‬
‫وأخيرا شفرة النموذج الثالث والتي تشمل فقط حدث النقر لزر أنهاء المشروع‪.‬‬
‫)(‪Private Sub CmdClose_Click‬‬
‫‪End‬‬
‫‪End Sub‬‬
‫مـلحظـة ‪ :‬الحدث ‪ KeyDown‬يطبق على الكثير من الكائنات ومن ضمنها‬
‫النموذج ولكن الفيجول بيسك يعطي اسبقية للكائنات الموجودة داخل النموذج‬
‫وبالتالي فأن حدث ‪ KeyDown‬للنموذج سوف لن يستجيب ولدينا أسلوبان لحل هذا‬
‫الشكال ‪ :‬الول يتم من خلل جعل صفة ‪ Enabled‬مساوية لـ ‪ False‬للكائنات‬
‫الموجودة على النموذج والحل الثاني هو تحويل صفة ‪ KeyPreview‬للنموذج من‬
‫‪ False‬الى ‪ .True‬في النموذج الول لم نحتاج لهذين الحلين لن النموذج أحتوى فقط‬
‫على الدللت وهي من الكائنات التي ل يطبق عليها حدث ‪.KeyDown‬‬
‫قبل أن ننهي كلمنا عن المعطيات ل بد لنا من الطلع على بعض الدوال‬
‫المستخدمة بكثرة في مشاريع الفيجول بيسك‪.‬‬

‫دالـة صندوق الرسالة ‪MsgBox‬‬


‫تستخدم لعرض المعطيات وأسترجاع بعض المدخلت وصيغتها ‪:‬‬
‫)‪MsgBox (A1, A2, A3‬‬
‫‪ : A1‬النص الذي يظهر في وسط صندوق الرسالة‬

‫‪88‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫هاني عبد الحسين هادي‬

‫‪ : A2‬رقم أو رمز يؤدي الى أظهار علمة معينة حسب الجدول أدناه‬
‫العلمـة‬ ‫قيمة الرمز ‪A2‬‬
‫‪X‬‬ ‫‪16‬‬
‫?‬ ‫‪32‬‬
‫!‬ ‫‪48‬‬
‫‪i‬‬ ‫‪64‬‬
‫‪ : A3‬النص الذي يظهر في شريط عنوان صندوق الرسالة‪.‬‬
‫ملحظـات‬
‫• يعتبر وجود المتغير ‪ A1‬ضروري ‪ ،‬أما المتغيرين ‪ A2‬و ‪ A3‬فوجودهما أختياري‬
‫• يمكن أضافة رقم للمتغير ‪ A2‬وذلك لعرض أزرار على الصندوق تستخدم‬
‫لسترجاع قيمة من المستخدم وكما يلي ‪:‬‬
‫الزرار التي تظهر على الصندوق‬ ‫الرقم المضاف‬
‫‪Ok‬‬ ‫‪0‬‬
‫‪Ok / Cancel‬‬ ‫‪1‬‬
‫‪Abort / Retry / Ignore‬‬ ‫‪2‬‬
‫‪Yes / No / Cancel‬‬ ‫‪3‬‬
‫‪Retry / Cancel‬‬ ‫‪4‬‬
‫الشكل )‪ (13-3‬يمثل ناتج أستخدام العبارة التية ‪:‬‬
‫)"‪R = MsgBox ("File Not Found",50,"Check Your FileName‬‬

‫الشكل )‪(13-3‬‬
‫هنا المتغير ‪ R‬سوف يأخذ أحدى القيم )‪ vbAbort‬أو ‪ vbRetry‬أو ‪ (vbIgnore‬حسب‬
‫أختيار المستخدم من الزرار المعروضة على صندوق الرسالة‪.‬‬
‫دالـة صندوق الدخال ‪InputBox‬‬
‫تستخدم لدخال القيم الرقمية أو الرمزية للمعطيات وصيغتها ‪:‬‬
‫)‪InputBox (B1, B2, B4‬‬
‫‪ : B1‬النص الذي في وسط صندوق الدخال‪.‬‬
‫‪ : B2‬النص الذي يظهر في شريط العنوان ) هذا المتغير أختياري (‬
‫‪ : B3‬القيمة الفتراضية للمدخل والتي تظهر في مستطيل داخل الصندوق )هذا‬
‫المتغير أيضا أختياري(‪.‬‬

‫‪89‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫هاني عبد الحسين هادي‬

‫ويحتوي صندوق الدخال على زري ‪ Ok‬و ‪ ، Cancel‬الشكل )‪ (14-3‬يظهر عند تنفيذ‬
‫العبارة التية‪:‬‬

‫الشكل )‪(14-3‬‬

‫)‪R = InputBox ("Please Enter Your Age", "Your Profile", 30‬‬


‫دالـة البحث ‪InStr‬‬
‫هي مختصر لـ ‪ In String‬وتستخدم لسترجاع رقم يمثل موقع أول حرف للمتغير‬
‫الذي نبحث عنه وصيغتها ‪:‬‬
‫)‪C = InStr (S1, Var1, Var2, S2‬‬
‫‪ : S1‬رقم يمثل موقع بداية البحث وقيمته الفتراضية تساوي واحد وهو متغير‬
‫أفتراضي‪.‬‬
‫‪ : Var1‬المتغير الذي نبحث فيه‪.‬‬
‫‪ : Var2‬المتغير الذي نبحث عنه‪.‬‬
‫‪ : S2‬رقم يأخذ ثلث قيم ويستخدم لتحديد نوع المقارنة والبحث وكما يلي ‪:‬‬
‫‪ : 0‬وهي القيمة الفتراضية وتستخدم للمقارنة من نوع ‪.Binary‬‬
‫‪ : 1‬للبحث في النصوص والرقام )ل يتأثر البحث في النصوص بكون الحروف‬
‫صغيرة أو كبيرة(‬
‫‪ : 2‬للبحث في قواعد البيانات ‪.Data Bases‬‬
‫وأدناه بعض المثلة على أستخدام هذه الدالة‪:‬‬
‫"‪M1 = "Bassam Mahdy‬‬
‫"‪M2 = "M‬‬
‫)‪Pos1 = InStr (4,M1,M2,1‬‬
‫)‪Pos2 = InStr (1,M1,M2,0‬‬
‫)‪Pos3 = InStr (M1,M2‬‬
‫)"‪Pos4 = InStr (M1, "W‬‬
‫أن نواتج البحث أعله هي ‪ Pos1 = 6 ، Pos2 = 8 ، Pos3 = 8 :‬و ‪.Pos4 = 0‬‬
‫دالـة ‪IsNumeric‬‬
‫لمعرفة نوع المتغير هل هو رقمي أم غير رقمي‪ .‬لنتصور وجود صندوق نص‬
‫والمطلوب من المستخدم أدخال رقم فيه ‪ ،‬الشفرة أدناه تفي بهذا الغرض‪:‬‬

‫‪90‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫هاني عبد الحسين هادي‬

‫) (‪Private Sub Text1_Change‬‬


‫""= ‪If Not IsNumeric (Text1) Then Text1‬‬
‫\‪End Sub‬‬
‫دالـة ‪IsEmpty‬‬
‫تستخدم مع المعطيات الرقمية والرمزية والتاريخ وتكون مساوية لـ ‪ True‬عند عدم‬
‫أعطاء قيم للمعطيات ‪ ،‬وأدناه مثال يوضح ذلك‪:‬‬
‫) (‪Private Sub Cmd1_Click‬‬
‫‪InputData:‬‬
‫)"‪S = InputBox (" Enter anything number, character, date‬‬
‫‪If IsEmpty (S) Then‬‬
‫'‪MsgBox "You forget to enter anything in the inputbox‬‬
‫‪GoTo InputData‬‬
‫‪End If‬‬
‫‪MsgBox " Your Entry is " & S‬‬
‫‪End Sub‬‬
‫دالـة ‪IsNull‬‬
‫تستخدم هذه الدالة )وكذلك القيمة ‪ (Null‬عادة مع قواعد البيانات للتأكد من أن‬
‫الحقل يحتوي أو ل يحتوي على بيانات‪ .‬ويجب أن نفرق بين القيمتين ‪ Empty‬و ‪Null‬‬
‫فالمعطيات عند تعريفها وعدم أعطاء قيم لها فهي ‪ Empty‬وليست ‪ Null‬ويمكن أن‬
‫نجعلها كذلك بالعبارة ‪ D = Null‬فالمتغير ‪ D‬غير موجود وتكون الدالة ‪ IsNull‬عندئذ‬
‫‪.True‬‬
‫الدالـة ‪RGB‬‬
‫تتقبل هذه الدالة ثلث قيم من اللوان الحمر والخضر والزرق ‪ ،‬وتتراوح القيم‬
‫بين الصفر و‪ 255‬كما موضح بالمثلة‪:‬‬
‫اللون البيض ‪(RGB (255,255,255‬‬
‫اللون الصفر ‪(RGB (255,255,0‬‬
‫‪(RGB (0,0,0‬‬ ‫اللون السود‬
‫‪ –4‬اليعازات الساسية في لغة فيجوال بيسك‬
‫توجد في لغة بيسك العديد من اليعازات منها اساسية شائعة الستعمال‬
‫واخرى مكملة ثانوية ‪ ،‬سندرس أعزائنا الطلبة بعضا منها في هذا الفصل‪.‬‬
‫‪ 4-1‬عملية السناد )‪(Var‬‬
‫ويقصد بها تخزين قيمة معينة في متغير ‪ ،‬وهذه القيمة المسندة تكون إما عددية أو‬
‫حرفية أو أي نوع أخر حسب نوع المتغير والصيغة العامة له هي‪:‬‬

‫‪Var1 = Value‬‬

‫‪91‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫هاني عبد الحسين هادي‬

‫وكمثال عليه‬
‫‪4‬‬
‫‪Dim name As String , grade as Single‬‬ ‫‪-‬‬
‫”محمد عامر ”‪= name‬‬ ‫‪2‬‬
‫عملية السناد‪Grade = 68.5‬‬

‫اليعاز الشرطي )‪(IF‬‬


‫توفر لغة الفيجول بيسك العديد من الصيغ لهذا اليعاز ويقوم المصمم بأختيار‬
‫المناسب منها حسب متطلبات السؤال أو المشروع وأدناه شرح لهذه الصيغ‪:‬‬
‫‪ 4-2-1‬اليعاز الشرطي البسيط‬
‫تستخدم هذه الصيغة لتنفيذ فعل واحد عند تحقق شرط أو مجموعة شروط كما‬
‫موضح أدناه‬
‫"‪If Degree >= 90 Then Print "Excellent‬‬
‫‪If X > 10 And Y = 0 Then Z = X ^ 2‬‬
‫" ‪If M = 10 Or M = 20 Then MsgBox " Well Done‬‬
‫ويمكن أستخدام عبارة ‪ Not‬المنطقية مع اليعاز الشرطي البسيط كما مبين أدناه‬
‫‪Dim Se As Boolean‬‬
‫)"‪Se = InputBox (" Enter a Boolean value‬‬
‫"‪If Not Se Then MsgBox " The parameter Se is False‬‬
‫‪ 4-2-2‬اليعاز الشرطي المركب‬
‫تبتدأ هذه الصيغة بعبارة ‪ IF‬وتنتهي بعبارة ‪ End IF‬وتستخدم لتنفيذ عدة أفعال عند‬
‫تحقق شرط أو مجموعة شروط وهي أيضا على نوعين ‪ :‬الول بدون العبارة ‪Else‬‬
‫والثاني مع العبارة ‪ Else‬والخير يستخدم عند وجود شروط متعددة لفعال متعددة ‪،‬‬
‫الشفرة التالية تبين النوع الول من اليعاز الشرطي المركب‪.‬‬
‫‪IF X < 0 Then‬‬
‫‪Y=X^2‬‬
‫‪Z = Y + 32‬‬
‫‪MsgBox " Z = " & Z‬‬
‫‪End IF‬‬
‫وكمثال على النوع الثاني أنظر الشفرة التية‪:‬‬
‫‪IF X = 0 Then‬‬
‫‪Y=0‬‬
‫‪Else IF X > 0 Then‬‬
‫‪Y=X‬‬

‫‪92‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫هاني عبد الحسين هادي‬

‫‪Else‬‬
‫‪Y=X^2‬‬
‫‪End If‬‬
‫‪MsgBox " Y = " & Y‬‬
‫وفي هذا النوع يمكن أن تمتد الشروط الى أكثر من ثلثة وبالتالي نستخدم أكثر‬
‫من عبارة ‪ Else IF‬وكذلك يمكن أن ل تنتهي بعبارة ‪ Else‬كما مبين في المثال التي‪:‬‬
‫‪IF Deg >= 90 Then‬‬
‫"‪Res = "Excellent‬‬
‫‪Else IF D < 90 and D > = 80 Then‬‬
‫"‪Res = "Very Good‬‬
‫‪Else IF D < 80 and D >= 70 Then‬‬
‫"‪Res = "Good‬‬
‫‪Else IF D < 70 and D >= 60 Then‬‬
‫"‪Res = "Medium‬‬
‫‪End If‬‬
‫‪MsgBox " Result = " & Res‬‬
‫مثـال )‪ : (3‬صمم مشروع لحل معادلة الدستور وأطبع النتائج أخذا بنظر العتبار كل‬
‫الحتمالت؟‬
‫التصميم‬
‫نكون مشروع جديد ونصمم النموذج كما في الشكل )‪ (15-3‬حيث نضيف ثلث‬
‫أزرار أوامر وصندوق للصورة الثابتة ‪ Image‬فيه صورة تمثل معادلة الدستور والتي تم‬
‫تصميمها في تطبيق ‪ Word‬وعمل مونتاج لها في برنامج ‪ Paint‬وخزنها كصورة بالمتداد‬
‫‪.JPG‬‬

‫الشكل )‪(15-3‬‬
‫الشفرة ‪:‬‬

‫‪93‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫هاني عبد الحسين هادي‬

‫ من خلل حدث النقر لزر‬C ‫ و‬B ‫ و‬A ‫في هذا المثال نحتاج الى شفرة لدخال قيم‬
:‫الوامر الول كما موضح‬
Option Explicit
Private A, B, C As Integer
Private Sub CmdInput_Click()
A = InputBox("Enter Value of A")
B = InputBox("Enter Value of B")
C = InputBox("Enter Value of C")
End Sub
‫أما شفرة زر حساب جذور المعادلة فهي تشمل التأكد من قيم المدخلت ثم‬
‫حساب قيم جذور المعادلة والحتمالت هي وجود جذر واحد أو جذرين أو عدم وجود‬
.‫أي جذر للمعادلة‬
Private Sub CmdCompute_Click()
Dim Msg, D, X, X1, X2
If A = 0 And B = 0 And C = 0 Then Exit Sub
If A = 0 Then Exit Sub
D=B^2-4*A*C
If D = 0 Then
X = -B / (2 * A)
Msg = "One Root =" & X
ElseIf D > 0 Then
X1 = (-B - D ^ 0.5) / (2 * A)
X2 = (-B + D ^ 0.5) / (2 * A)
Msg = "Two Roots, First =" & X1 & " Second =" & X2
Else
Msg = "Imaginary Roots"
End If
MsgBox Msg
End Sub
‫وأخيرا شفرة زر أوامر أنهاء المشروع‬
Private Sub CmdExit_Click()
End
End Sub
‫ اليعاز الشرطي المباشر‬4-2-3
:‫وصيغة هذا النوع هي كالتي‬

94 d_pro2001@yahoo.com 07705853496
‫هاني عبد الحسين هادي‬

‫)‪G = IIF ( X > 0 , 6, 12‬‬


‫المتغير ‪ G‬يأخذ القيمة ‪ 6‬عند تحقق الشرط ‪ ،‬ويأخذ القيمة ‪ 12‬عند عدم تحقق‬
‫الشرط ويلحظ أن هذا النوع محدود بقيمتين فقط‪.‬‬
‫‪ 4-3‬ايعاز النتقال ‪GOTO‬‬
‫لقد لحظنا بأن تنفيذ الخطوات في المثلة السابقة يكون تسلسلي من العلى‬
‫للسفل ولكن الفيجول بيسك يوفر أمكانية النتقال الى أية خطوة داخل الجراء من‬
‫خلل اليعاز ‪ GOTO‬وقد أستخدمنا ذلك عند حديثنا عن دالة ‪ IsEmpty‬حيث نضع رمز‬
‫ينتهي بالعلمة )‪ (:‬في المكان الذي نريد النتقال له وفي أي مكان داخل الحدث‬
‫نستخدم اليعاز ‪ GOTO‬متبوع بذلك الرمز كما في المثال التي‪:‬‬
‫)(‪Private Sub Counting‬‬
‫‪Dim I as Integer‬‬
‫‪I=0‬‬
‫‪Count:‬‬
‫‪I = I +1‬‬
‫‪MsgBox " I=" & I‬‬
‫‪If I < 10 GoTo Count‬‬
‫‪End Sub‬‬
‫ملحظـة ‪ :‬يلحظ الطلبة بأن الجراء السابق )المسمى ‪ (Counting‬لم يرتبط بأي‬
‫حدث مثل النقر أو النقر المزدوح وغيرها وربما يتسائل الطلبة عن كيفية تنفيذ أو‬
‫أستدعاء هذا الجراء والجواب أن كل الجراءات غير المرتبطة بالحداث يتم أستدعائها‬
‫داخل الحداث بذكر أسمها فقط‪ .‬حدث النقر المذكور أدناه لحد أزرار الوامر يقوم‬
‫بأستدعاء الجراء ‪.Counting‬‬
‫)(‪Private Sub Command1_Click‬‬
‫‪Counting‬‬
‫‪End Sub‬‬
‫)‪(SELECT CASE‬‬ ‫‪ 4-4‬الجمل الشرطية‬
‫تتشابه الجمل الشرطية مع اليعاز الشرطي المركب فكلهما يستخدم لتنفيذ عدة‬
‫أفعال عند مرتبطة بعدة شروط‪ .‬الجمل الشرطية تاخذ الصيغة التية‪:‬‬
‫‪Select Case A‬‬
‫‪Case Is = 3‬‬
‫‪Statements‬‬
‫‪Case Is = 4‬‬
‫‪Statements‬‬
‫‪Case Is > 10‬‬
‫‪Statements‬‬

‫‪95‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫هاني عبد الحسين هادي‬

‫‪Case Is 20 To 30‬‬
‫‪Statements‬‬
‫‪End Select‬‬
‫في البداية نختار متغير كأساس للمقارنة )المتغير ‪A‬في المثال اعله( ونضعه‬
‫بعد عبارة ‪ Select Case‬حيث يأخذ الرمز ‪ Case‬قيمة ذلك المتغير ثم نقوم بمقارنة‬
‫الرمز ‪ Case‬مع قيم معلومة ونحدد الفعال التي ستنفذ عند تحقق شروط المقارنة‪.‬‬
‫ويمكن أستخدام رموز المقارنة )أكبر وأصغر( وكذلك أستخدام مدى من القيم )كما‬
‫في ‪ .(To 30 20‬ويجب النتباه عند العتماد على متغير رمزي في المقارنة لن‬
‫عبارة ‪ Select Case‬تفرق بين الحروف الصغيرة والكبيرة )الحرف ‪ C‬ل يساوي‬
‫الحرف ‪ (c‬وللسيطرة على هذه المشكلة يوفر الفيجول بيسك دالتين هما ‪LCase‬‬
‫)للتحويل الى الحروف الصغيرة( و ‪) UCase‬للتحويل الى الحروف الكبيرة( وينصح‬
‫بأستخدام أحداهما عند المقارنة‪ .‬كذلك يجب النتباه للفراغات التي قد تضاف‬
‫بالخطأ )القيمة ‪ NorthSchool‬ل تساوي ‪ (North School‬وينصح هنا بأستخدام الدالة‬
‫‪ Trim‬عند المقارنة لنها تلغي الفراغات فتصبح القيمة ‪ NorthSchool‬مساوية لـ‬
‫‪(Trim(North School‬‬
‫‪ 4-5‬الحلقات التكرارية‬
‫تستخدم الحلقات التكرارية لتنفيذ مجموعة من العبارات عدة مرات ويوفر‬
‫الفيجول بيسك عدة أنواع من هذه الحلقات كما موضح أدناه‪.‬‬
‫‪ 4-5-1‬إيعاز ‪For – Next‬‬
‫وهي أكثر أنواع الحلقات أستخداما خصوصا أذا علمنا عدد مرات التكرار وتأخذ‬
‫الصيغة التية ‪:‬‬
‫‪For Counter = StartValue To EndValue Step M‬‬
‫‪Statements‬‬
‫‪Next Counter‬‬
‫‪ : Counter‬هو عداد الحلقة ويكون متغير رقمي )صحيح أو حقيقي( ويمكن أستخدام‬
‫حرف واحد أو حرفين أو عدة حروف )يفضل حرف واحد مثل ‪ I‬أو ‪(J‬‬
‫‪ : StartValue‬القيمة البتدائية للعداد‪.‬‬
‫‪ : EndValue‬القيمة النهائية للعداد‪.‬‬
‫‪ : M‬مقدار التغير في قيمة العداد ويمكن أن يكون سالب ‪ ،‬وعند عدم ذكر عبارة‬
‫‪ Step‬وقيمة ‪ M‬فأن الفيجول بيسك يفترض مقدار التغير يساوي واحد‪.‬‬
‫ملحظـات‬
‫• يمكن أنهاء الحلقة بعبارة ‪ Next‬بدون ذكر رمز العداد‪.‬‬
‫• يمكن الخروج من الحلقة بعبارة ‪ GOTO‬أو ‪.Exit For‬‬
‫• ل يمكن الدخول للحلقة أل من خلل عبارة ‪.For‬‬
‫• ل يجوز تغيير قيمة العداد داخل الحلقة‪.‬‬

‫‪96‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫هاني عبد الحسين هادي‬

‫تمثل العبارات أدناه حلقة تكرارية تصاعدية‬


‫‪For I = 1 To 100‬‬
‫‪Print I‬‬
‫‪Next I‬‬
‫أما الحلقات التكرارية التنازلية فأنها تبدأ بقيمة كبيرة وتنتهي بقيمة صغيرة كما في‬
‫المثال‬
‫‪For K = 10 To 0 Step -2‬‬
‫‪X = K^2 + 3 * K + 5‬‬
‫‪MsgBox "X=" & X & " For K=" & K‬‬
‫‪Next K‬‬
‫‪ 4-5-2‬إيعاز ‪Do - While‬‬
‫يستخدم هذا النوع عند عدم معرفة عدد مرات التكرار وتتم السيطرة على عملية‬
‫التكرار من خلل شرط يوضع بعد عبارة ‪ While‬كما موضح أدناه‪:‬‬
‫‪Do While R > 20‬‬
‫‪S=2*R‬‬
‫‪Print S‬‬
‫‪Loop‬‬
‫ويمكننا الخروج من حلقة ‪ Do – While‬بعبارة ‪.Exit Do‬‬
‫مثـال )‪ : (4‬هذا المثال يستخدم اليعاز الشرطي المركب والجمل الشرطية‪.‬‬
‫أنظر للشكل )‪ (16-3‬والذي يحتوي على عدة كائنات )قائمة منسدلة ‪ ،‬صندوق‬
‫صورة ‪ ،‬زري أوامر( وفكرة المثال هي أختيار أحدى الدول العربية من القائمة‬
‫المنسدلة لعرض خارطة وعلم تلك الدولة في صندوق الصورة ومن أحد زري‬
‫الوامر نعرض موقع وعاصمة تلك الدولة‪.‬‬
‫التصميم‬
‫نكون مشروع جديد ونضيف الكائنات المطلوبة ونجعل صفة ‪ Style‬للقائمة‬
‫المنسدلة مساوية لـ ‪ DropDownList-2‬لمنع المستخدم من تغيير النص الموجود‬
‫في القائمة المنسدلة‪.‬‬
‫الشفرة ‪:‬‬
‫في هذا المثال نحتاج شفرة لحدثين ‪ :‬الول هو النقر للقائمة المنسدلة )الصندوق‬
‫المركب( والثاني هو النقر لزر الوامر كما موضح أدناه‪:‬‬
‫‪Option Explicit‬‬
‫‪Private S As Integer‬‬
‫)(‪Private Sub CboCountry_Click‬‬
‫‪S = CboCountry.ListIndex‬‬
‫‪If S = 0 Then‬‬
‫)"‪PicView.Picture = LoadPicture("D:\Pictures\Egypt.jpg‬‬

‫‪97‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫هاني عبد الحسين هادي‬

ElseIf S = 1 Then
PicView.Picture = LoadPicture("D:\Pictures\Iraq.jpg")
ElseIf S = 2 Then
PicView.Picture = LoadPicture("D:\Pictures\Jordan.jpg")
ElseIf S = 3 Then
PicView.Picture = LoadPicture("D:\Pictures\Labanon.jpg")
ElseIf S = 4 Then
PicView.Picture = LoadPicture("D:\Pictures\Moroco.jpg")
ElseIf S = 5 Then
PicView.Picture = LoadPicture("D:\Pictures\Kuwait.jpg")
End If
End Sub
Private Sub CmdInfo_Click()
Select Case S
Case Is = 0
MsgBox " ‫ العاصمة هي القاهرة‬، ‫"شمال أفريقيا‬
Case Is = 1
MsgBox " ‫ العاصمة هي بغداد‬، ‫" جنوب تركيا‬
Case Is = 2
MsgBox " ‫ العاصمة هي عمان‬، ‫" غرب العراق‬
Case Is = 3
MsgBox " ‫ العاصمة هي بيروت‬، ‫" غرب سوريا‬
Case Is = 4
MsgBox " ‫ العاصمة هي الدار البيضاء‬، ‫" شمال أفريقيا وغرب تونس‬
Case Is = 5
MsgBox " ‫ العاصمة هي الكويت‬، ‫" جنوب العراق‬
End Select
End Sub

98 d_pro2001@yahoo.com 07705853496
‫هاني عبد الحسين هادي‬

‫الشكل )‪(16-3‬‬
‫التنفيذ ‪:‬‬
‫نضعط ‪ F5‬لتنفيذ المشروع ومن القائمة المنسدلة نختار أسم الدولة وعندئذ تظهر‬
‫خارطة وعلم تلك الدولة في صندوق الصورة وبالضغط على زر الوامر الذي في‬
‫العلى نعرض موقع وأسم عاصمة تلك الدولة ‪ ،‬الشكل )‪ (17-3‬يرينا عملية التنفيذ‬
‫عند أختيار جمهورية العراق‪.‬‬

‫‪99‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫هاني عبد الحسين هادي‬

‫الشكل )‪(17-3‬‬

‫‪ -5‬أستخدام أدوات التحكم ‪Control Tools box‬‬


‫الشكل )‪ (18-3‬يوضح صندوق أدوات التحكم )ويطلق عليه أحيانا ً بصندوق‬
‫الكائنات ‪:(Objects Box‬‬

‫‪10‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪0‬‬
‫هاني عبد الحسين هادي‬

‫شكل )‪(18-3‬‬
‫قبل الحديث عن الدوات وصفاتها وطرقها وأحداثها ‪ ،‬ل بد لنا من شرح هذه‬
‫المفاهيم‪.‬‬
‫الصفات ‪Properties‬‬
‫هي مواصفات الكائنات والتي يتم تحديدها )بعد تكوين الكائن( أما بأختيارها‬
‫من القوائم المتوفرة في نافذة الصفات أثناء فترة التصميم أو بأدخال قيمها‬
‫داخل الشفرة فلو تكلمنا مثل عن صناديق النص فمن صفاتها هي حجم الصندوق‬
‫وقيمة النص ولونه ونوع الخط وغيرها‪ .‬أدناه مثال على كيفية أدخال قيمة النص‬
‫داخل الشفرة ‪:‬‬
‫"‪Text1.text = "Good Morning‬‬
‫حيث ‪ Text1‬هو أسم الكائن )صندوق نص( و ‪ text‬هي أحدى صفات صندوق‬
‫النص وتمثل قيمة النص و ‪ Good Morning‬هي القيمة التي ستظهر داخل صندوق‬
‫النص‪ .‬نستنتج من المثال أعله بأن الصفة تسبق بأسم الكائن وتعقبها علمة‬
‫المساواة ثم قيمة الصفة‪.‬‬
‫الطرق ‪Methods‬‬
‫هي الفعال التي تقوم بها الكائنات والتي تتحقق عند تنفيذ الشفرة وهي‬
‫تشبه الصفات حيث تسبق بأسم الكائن ولكنها ل تأخذ قيم ولهذا ل توجد علمة‬
‫مساواة بعدها‪ .‬أدناه مثال على أستخدام الطرق ‪:‬‬
‫‪Form1.cls‬‬
‫حيث ‪ Form1‬هو أسم الكائن )النموذج( و ‪ cls‬هي أحدى طرق النموذج‬
‫وتستخدم لمسح الكائنات المرسومة عليه وهي أختصار لـ ‪ .Clear Screen‬ومن‬
‫الجدير بالذكر فأن الطرق أقل أستخداما مقارنة بالصفات والحداث‪.‬‬
‫الحداث ‪Events‬‬
‫هي الفعال الخارجية التي تطبق على الكائنات والتي تنتج عنها ردود أفعال‬
‫وهي ايضا تتحقق عند تنفيذ الشفرة‪ .‬عند كتابة أسم الكائن )في الشفرة( متبوع‬
‫بالنقطة تظهر قائمة بأسماء الحداث )وكذلك الصفات والطرق( المتوفرة لهذا‬
‫الكائن وأكثر الحداث أستخداما هي عملية النقر )‪ (Click‬بالماوس‪ .‬فمثل عند‬
‫النقر بالماوس على كائن زر الوامر )هذا هو الفعل( يمسح النص الموجود داخل‬
‫صندوق النص )هذا هو رد الفعل(‪ .‬السطر التالية توضح ذلك‪:‬‬
‫) (‪Private Sub Command1_Click‬‬

‫‪10‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪1‬‬
‫هاني عبد الحسين هادي‬

‫"" = ‪Text1.text‬‬
‫‪End Sub‬‬
‫حيث ‪ Command1‬هو أسم كائن زر الوامر و الحدث الذي سيطبق عليه هو‬
‫النقر ‪ Click‬والذي سينتج عن عملية النقر هو أعطاء قيمة فارغة للصفة ‪) text‬أي‬
‫مسح محتويات صندوق النص(‪ .‬بقية المصطلحات المذكورة أعله )مثل ‪Private‬‬
‫و ‪ Sub‬سنتعلمها لحقا(‪.‬‬
‫‪ 6-1‬النموذج ‪Form‬‬
‫هو أهم الكائنات في الفيجول بيسك ويضاف للمشروع تلقائيا عند فتح‬
‫مشروع جديد )ولهذا فهو غير موجود في صندوق الكائنات( وكل الكائنات الخرى‬
‫تضاف للنموذج وتظهر فوقه وبمعنى أخر فهو وعاء لكل الكائنات‬
‫الصفات‬
‫الجدول )‪ (3‬يوضح أهم صفات النموذج والقيمة الفتراضية لها )القيمة‬
‫الولية للصفة( وكذلك شرح لكل صفة ‪ ،‬ونلحظ ان بعض الصفات ليس لها قيم‬
‫أفتراضية‪.‬‬
‫جدول )‪ (3‬أهم صفات النموذج‬
‫الوصف‬ ‫القيمـــة‬ ‫الصفــة‬
‫الفتراضية‬
‫لتحديد أسم النموذج في مرحلة التصميم‬ ‫‪Form1‬‬ ‫‪Name‬‬
‫لضافة عنوان )نص( يظهر في شريط‬ ‫‪Form1‬‬ ‫‪Caption‬‬
‫العنوان‬
‫لتحديد لون أرضية النموذج والقيمة‬ ‫&‪&H8000000F‬‬ ‫‪BackColor‬‬
‫الفتراضية تشير الى اللون الرصاصي‬
‫ويمكن تغيير هذا اللون من خلل النقر‬
‫على السهم الموجود على اليمين وأختيار‬
‫اللون من القائمة المنسدلة‪.‬‬
‫اضافة صورة كأرضية للنموذج )الصورة‬ ‫فارغة‬ ‫‪Picture‬‬
‫مخزونة في أحدى وحدات الخزن(‬
‫لجعل أتجاه الكتابة من اليمين الى‬ ‫‪False‬‬ ‫‪RightToLeft‬‬
‫اليسار وبما أن القيمة الفتراضية هي‬
‫‪ False‬ولهذا فأن أتجاه الكتابة سيكون من‬
‫اليسار الى اليمين ‪ ،‬يتم تحويل القيمة الى‬

‫‪10‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪2‬‬
‫هاني عبد الحسين هادي‬

‫‪ True‬عند الكتابة بلغة العربية‬


‫الطرق‬
‫طرق النموذج قليلة العدد والستخدام وأغلبها ترتبط بالرسم والطباعة‬
‫على النموذج والجدول التي يلخص أهمها‪:‬‬
‫جدول )‪ (4‬أهم طرق النموذج‬
‫الصيغة‬ ‫الوصف‬ ‫الطري‬
‫قة‬
‫‪ Form1.Cls‬أو ‪ Me.Cls‬أو ‪Cls‬‬ ‫مسح ما مرسوم‬ ‫‪Cls‬‬
‫ومطبوع على النموذج‬
‫‪Line(X1,Y1)-(X2,Y2),Color,BF‬‬ ‫رسم خط مستقيم أو‬ ‫‪Line‬‬
‫مربع أو مستطيل‬
‫‪Circle(X1,Y1),Radius,Color‬‬ ‫رسم دائرة‬ ‫‪Circle‬‬
‫‪Move X1, Y1‬‬ ‫حركة للنموذج‬ ‫‪Move‬‬
‫‪Me.Show‬‬ ‫أظهار النموذج‬ ‫‪Show‬‬
‫المثال التالي يوضح أستخدام الطرق أعله وفيه نموذج عليه ستة أزرار )رسم‬
‫مربع أبيض ‪ ،‬رسم مربع أزرق ‪ ،‬رسم دائرة خضراء ‪ ،‬طباعة "طرق النموذج" ‪،‬‬
‫مسح الرسومات والطباعة‪ ،‬حركة للنموذج(‬

‫شكل )‪ (19-3‬مثال على أستخدام طرق النموذج‬


‫الشفرة المطلوبة للنموذج هي ‪:‬‬

‫‪10‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪3‬‬
‫هاني عبد الحسين هادي‬

‫)(‪Private Sub Cmd1_Click‬‬


‫رسم مربع أبيض ‪Line (0, 0)-(500, 500), vbWhite, BF‬‬
‫‪End Sub‬‬
‫)(‪Private Sub Cmd2_Click‬‬
‫‪Line (600, 600)-(1100, 1100), vbBlue, BF‬‬ ‫رسم مربع أزرق‬
‫‪End Sub‬‬
‫)(‪Private Sub Cmd3_Click‬‬
‫‪Circle (1400, 1400), 300, vbGreen‬‬ ‫رسم دائرة خضراء‬
‫‪End Sub‬‬
‫)(‪Private Sub Cmd4_Click‬‬
‫‪Me.Cls‬‬ ‫مسح ما مرسوم ومطبوع على النموذج‬
‫‪End Sub‬‬
‫)(‪Private Sub Cmd5_Click‬‬
‫‪CurrentX = 3000‬‬ ‫تحديد موقع المؤشر على المحور‬
‫السيني‬
‫‪CurrentY = 50‬‬ ‫تحديد موقع المؤشر على المحور‬
‫الصادي‬
‫طرق النموذج"" ‪Print‬‬ ‫طباعة جملة على النموذج‬
‫بالموقع المحدد‬
‫‪End Sub‬‬
‫)(‪Private Sub Cmd6_Click‬‬
‫‪Form1.Move Left + 50, Top + 50‬‬ ‫حركة النموذج )بأتجاه السفل‬
‫)واليمين‬
‫‪End Sub‬‬
‫ملحظـات عن المثال‪:‬‬
‫‪ ‬الرمز ‪ BF‬هو مختصر لـ ‪ Box Fill‬ويؤدي الى رسم مربع )مضلع( مملوء‬
‫بلون ويمكن حذف حرف ‪ F‬وهنا يرسم مربع غير مملوء بلون‪.‬‬

‫‪10‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪4‬‬
‫هاني عبد الحسين هادي‬

‫‪ ‬في طريقة الـ ‪ Circle‬اللون يمثل لون الطار ولملىء الدائرة بلون فيجب‬
‫تغيير صفتين للنموذج هما ‪ FillStyle‬وتضبط على ‪ Solid-0‬و ‪ FillColor‬وتضبط على‬
‫اللون المطلوب‬
‫‪ ‬يمكننا أن نكتب الطريقة من دون نسبقها بأسم النموذج أو يمكن‬
‫الستعاضة عن أسم النموذج بكلمة ‪.Me‬‬
‫ألحداث‬
‫للنموذج أحداث كثيرة وأغلبها مشتركة مع الكائنات الخرى والتي سيتم‬
‫شرحها لحقا عند التطرق لتلك الكائنات ومن أهم الحداث الخاصة بالنموذج هو‬
‫حدث ‪ Load‬الذي ينفذ تلقائيا عند تحميل النموذج ويستفاد منه لتحديد قيم أولية‬
‫للمتغيرات أو توجيه التركيز لكائن معين وتستخدم عادة طريقة ‪ Show‬مع هذا‬
‫الحدث لن الحدث بحد ذاته ل يؤدي الى ظهور النموذج مما قد يتسبب بحدوث‬
‫خطأ عند أستخدام طرق الرسم داخل هذا الحدث‪.‬‬

‫‪ 5-2‬أزرار الوامر ‪Command Buttons‬‬


‫أزرار الوامر هي أكثر الكائنات أستخداما فل يخلو مشروع منها وتستخدم‬
‫لتنفيذ أمر )أو مجموعة أوامر( أو لقبول أو رفض قيم أو مدخلت كما في صناديق‬
‫الحوار‪.‬‬
‫الصفات‬
‫الجدول )‪ (5‬يوضح أهم صفات أزرار الوامر والقيمة الفتراضية لها )القيمة‬
‫الحالية للصفة( وكذلك شرح لكل صفة ‪ ،‬ونلحظ ان بعض الصفات ليس قيمة‬
‫أفتراضية‪.‬‬
‫جدول )‪ (5‬أهم صفات أزرار الوامر‬
‫الوصف‬ ‫القيمـــة‬ ‫الصفــة‬
‫الفتراضية‬
‫لتحديد أسم لزر الوامر في مرحلة التصميم‬ ‫‪Command1‬‬ ‫‪Name‬‬
‫)يمكن اختصار القيمة الفتراضية الى مثل‬
‫‪(Cmd1‬‬
‫لضافة عنوان )نص( يظهر فوق الزر‬ ‫‪Command1‬‬ ‫‪Caption‬‬
‫لتحديد نمط الزر وتشمل قيمتين‪ :‬الفتراضية‬ ‫‪Standard-0‬‬ ‫‪Style‬‬
‫وتسمح فقط بظهور النص على الزر من دون‬
‫لون ول صورة ‪ ،‬أما القيمة الخرى وهي ‪-1‬‬
‫‪ Graphical‬فأنها تسمح بظهور اللون أوالصورة‬

‫‪10‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪5‬‬
‫هاني عبد الحسين هادي‬

‫المضافة لزر الوامر )أضافة للنص(‬


‫اضافة صورة لزر الوامر )الصورة مخزونة‬ ‫فارغة‬ ‫‪Picture‬‬
‫في أحدى وحدات الخزن(‬
‫لظهار وأخفاء الزر ‪ ،‬لخفاء الزر نحول قيمة‬ ‫‪True‬‬ ‫‪Visible‬‬
‫الصفة من ‪ True‬الى ‪False‬‬
‫القيمة الفتراضية لهذه الصفة تجعل الزر‬ ‫‪True‬‬ ‫‪Enabled‬‬
‫فعال )يتقبل الحداث مثل النقر( والقيمة‬
‫الخرى وهي ‪ False‬تجعله غير فعال )ظاهر‬
‫بلون باهت ول يتقبل أي حدث(‬

‫نشاط ‪ :1‬يتناقش الطلبة فيما بينهم حول العلقة بين‬


‫صفتي ‪ Style‬و ‪.Picture‬‬
‫نشاط ‪ :2‬يتناقش الطلبة فيما بينهم حول الحالت التي‬
‫مرت عليهم عند أستخدامهم الويندوز والتي تكون فيها‬
‫أزرار الوامر غير فعالة‪.‬‬
‫الطرق‬
‫طرق أزرار الوامر قليلة جدا وأهمها ‪ SetFocus‬والتي تؤدي الى توجيه‬
‫التركيز لزر الوامر ) حيث يكون الزر مؤشر( واستخدامها كما ذكرنا يكون داخل‬
‫الشفرة )‪ (Cmd2.SetFocus‬الشكل التالي يرينا زري أوامر أحدهما فاقد للتركيز‬
‫)الصفر( والخر مستلم للتركيز )البرتقالي( حيث تم توجيه التركيز أثناء تحميل‬
‫النموذج بالشفرة التالية‪:‬‬

‫)(‪Private Sub Form_Load‬‬

‫‪Form1.Show‬‬

‫‪Cmd2.SetFocus‬‬

‫‪End Sub‬‬

‫‪10‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪6‬‬
‫هاني عبد الحسين هادي‬

‫شكل )‪(20-3‬‬
‫ملحظـة‪ :‬يشترط في أستخدام الطريقة ‪ SetFocus‬أن يكون الكائن )زر الوامر(‬
‫ظاهر وفعال‪.‬‬
‫الحداث‬
‫الجدول )‪ (6‬يرينا أهم أحداث أزرار الوامر وأكثرها أستخداما هو حدث‬
‫النقر‪.‬‬

‫جدول )‪(6‬‬
‫الوصف‬ ‫الحدث‬
‫النقر المنفرد على زر الوامر‬ ‫‪Click‬‬
‫أمرار مؤشر الفأرة فوق زر الوامر‬ ‫‪MouseOver‬‬
‫أستلم التركيز )سواء بالنقر أو السهم أو مفتاح‬ ‫‪GotFocus‬‬
‫‪(Tab‬‬
‫فقدان التركيز )تحول التركيز الى كائن أخر(‬ ‫‪LostFocus‬‬
‫‪ 5-3‬الدللت ‪Labels‬‬
‫يستخدم هذا الكائن لعرض نص للقراءة يوضع في صفة ‪ Caption‬ول يمكن‬
‫تغيير هذا النص مباشرة بالنقر خلله )كما سيمر علينا في صناديق النص( وأنما يتم‬
‫التغيير في وقت التنفيذ داخل الشفرة ويستخدم هذا الكائن مع الكائنات الخرى‬
‫لتوضيح عمليات الدخال والختيارات وغيرها‪.‬‬
‫الصفات‬
‫الجدول )‪ (7‬يوضح بعض صفات الدللت‪.‬‬
‫جدول )‪(7‬‬
‫الوصف‬ ‫القيمـــة‬ ‫الصفــة‬
‫الفتراضية‬

‫لضافة عنوان )نص( يظهر داخل الدلللة‬ ‫‪Label1‬‬ ‫‪Caption‬‬


‫لتحديد نمط الخلفية وتشمل قيمتين معتم‬ ‫‪Opaque-1‬‬ ‫‪BackStyle‬‬
‫وشفاف‪ :‬الفتراضية هي معتم وتسمح بظهور لون‬
‫الخلفية أما القيمة الخرى وهي ‪Transparent-0‬‬
‫فأنها ل تسمح بظهور اللون‬
‫تغيير حجم الدللة ليتلئم مع حجم النص الموجود‬ ‫‪True‬‬ ‫‪AutoSize‬‬
‫داخل الدللة‬
‫السماح أو عدم السماح بألتفاف النص )أي‬ ‫‪False‬‬ ‫‪WordWrap‬‬

‫‪10‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪7‬‬
‫هاني عبد الحسين هادي‬

‫جعله عدة سطور(‬


‫تحديد محاذاة النص )من اليسار ‪ ،‬من اليمين‬ ‫‪Left-0‬‬ ‫‪Alignment‬‬
‫وفي الوسط(‬

‫الطرق‬
‫طرق ألدللت قليلة جدا وقليلة الستخدام مثل ‪ Drag‬و ‪.Move‬‬

‫الحداث‬
‫الجدول )‪ (8‬يرينا بعض أحداث ألدللت وهي نادرة الستخدام في‬
‫التطبيقات‪.‬‬
‫جدول )‪(8‬‬
‫الوصف‬ ‫الحدث‬
‫النقر المزدوج على الدللة‬ ‫‪DblClick‬‬
‫سحب كائن أخر وأفلته فوق الدللة‬ ‫‪DragDrop‬‬
‫سحب كائن أخر وأمراره فوق الدللة‬ ‫‪DragOver‬‬
‫تغيير عنوان الدللة داخل الشفرة‬ ‫‪Change‬‬
‫‪ 5-4‬صندوق النص ‪Text Box‬‬
‫يستخدم هذا الكائن لدخال البيانات الرقمية أو الحرفية في وقت التصميم‬
‫)من خلل صفة ‪ (Text‬أو في وقت التنفيذ وذلك بالنقر عليه والكتابة بداخله‪.‬‬
‫الصفات‬
‫الجدول )‪ (9‬يوضح بعض صفات صندوق النص‪.‬‬
‫جدول )‪(9‬‬
‫الوصف‬ ‫القيمـــة‬ ‫الصفــة‬
‫الفتراضية‬

‫لضافة نص للصندوق‬ ‫‪Text1‬‬ ‫‪Text‬‬


‫تتيح هذه الصفة الفرصة لدخال نص )في صفة‬ ‫‪False‬‬ ‫‪MultiLine‬‬
‫‪ (Text‬مكون من عدة سطور‪ .‬نحول الصفة الى‬
‫‪ True‬وبعد أدخال السطر الول نضغط سوية‬
‫مفتاحي السيطرة )‪ (Ctrl‬والرجوع )‪ (Enter‬فيتولد‬
‫سطر جديد للدخال ويجب أن ل ننسى زيادة قيمة‬
‫الصفة ‪ Height‬لظهار السطر‪.‬‬
‫عندما تكون ‪ True‬فأن الصندوق يستخدم لعرض‬ ‫‪False‬‬ ‫‪Locked‬‬
‫النصوص دون السماح بتحديثها )يصبح مثل‬

‫‪10‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪8‬‬
‫هاني عبد الحسين هادي‬

‫الدللة(‬
‫لعرض أو أخفاء أشرطة التمرير‬ ‫‪None-0‬‬ ‫‪ScrolBars‬‬
‫تحديد أعلى طول للنص وعند جعل الصفة‬ ‫‪0‬‬ ‫‪MaxLength‬‬
‫مساوية للصفر فأنه يعني ل حدود لطول النص‬
‫تستخدم كحماية أثناء التنفيذ فعند جعل القيمة‬ ‫فارغة‬ ‫‪PasswordChar‬‬
‫مساوية للنجمة )*( فأن النص يظهر عند التنفيذ‬
‫على شكل نجوم ولكن القيم الحقيقية للنص‬
‫تظهر في نافذتي الصفات والشفرة وتستخدم‬
‫هذه الصفة مع صفة ‪ MaxLength‬لتحديد كلمة‬
‫سر تشغيل المشروع‪ .‬ل تعمل هذه الصفة أذا‬
‫كانت صفة ‪ MultiLine‬تساوي ‪.True‬‬

‫ملحظـة‪ :‬هناك بعض الصفات تتوفر فقط في وقت التنفيذ )ل توجد في‬
‫صندوق الصفات( مثل‪:‬‬
‫‪ : SelLength‬تحديد أو أسترجاع عدد الحروف المختارة )تكون القيمة مساوية‬
‫للصفر عند عدم ألختيار(‬
‫‪ : SelStart‬تحديد أو أسترجاع نقطة البداية للنص للمختار ويسترجع موقع‬
‫المؤشرعند عدم الختيار‬
‫‪ : SelText‬تحديد أو أسترجاع قيمة النص المختار وتكون القيمة ل شيء عند عدم‬
‫أختيار نص‪.‬‬
‫الطرق‬
‫طرق صناديق النص قليلة جدا وأهمها ‪ Setfocus‬والتي تؤدي الى وضع المؤشر‬
‫داخل الصندوق‬

‫الحداث‬
‫أحداث صناديق النص تشبه أحداث الكائنات الخرى وأكثرها أستخداما هو‬
‫حدث ‪ Change‬والذي ينفذ في كل وقت يقوم غيه المستخدم بحشر أو أستبدال أو‬
‫حذف حرف في صندوق النص ويستخدم هذا الحدث )وكذلك الحدث ‪(LostFocus‬‬
‫لرغام المستخدم على ادخال نص معين أو مليء صندوق النص قبل النتقال الى‬
‫نموذج أخر‪ .‬المثال التالي يرينا أستخدام الحدث ‪ LostFocus‬مع الطريقة ‪SetFocus‬‬

‫)(‪Private Sub Text1_LostFocus‬‬

‫‪If Trim(Text1.Text) = "" Then‬‬

‫‪Text1.SetFocus‬‬

‫‪10‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪9‬‬
‫هاني عبد الحسين هادي‬

‫‪End If‬‬

‫‪End Sub‬‬

‫الحدث أعله يجبر المؤشر على البقاء داخل صندوق النص أذا كان الصندوق فارغ‪.‬‬
‫الدالة ‪ Trim‬تلغي وجود الفراغات‪.‬‬
‫مثـــال )‪ : (5‬صمم الشكل )‪ (21-3‬وأجعل أدخال السم ضروري قبل نقر زر‬
‫التالي‪.‬‬

‫شكل )‪(21-3‬‬
‫التصميم‪ :‬بعد إنشاء مشروع جديد نضيف أدوات التحكم )الكائنات( التالية‬
‫للنموذج ‪:‬‬
‫• صندوق نص بأسم ‪.TxtName‬‬
‫• زري أوامر بالسماء ‪ CmdNext‬و ‪ CmdEnd‬ومن نافذة الصفات نجعل زر‬
‫الوامر ‪ CmdNext‬غير فعال‪.‬‬
‫• صندوق دللة ‪ Label1‬وضبط عنوانه ‪ Caption‬في نافذة الصفات بالمحتوى "‪Enter Your‬‬
‫‪"Name below‬‬
‫الشفرة ‪ :‬سوف نكتب شفرة لصندوق النص والخرى لزر الوامر ‪CmdEnd‬‬

‫)(‪Private Sub cmdEnd_Click‬‬

‫‪End‬‬

‫‪End Sub‬‬

‫)(‪Private Sub TxtName_Change‬‬

‫))‪If Trim(TxtName) <> "" And Not IsNumeric (Trim(TxtName‬‬


‫‪Then‬‬

‫‪11‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪0‬‬
‫هاني عبد الحسين هادي‬

‫‪cmdnext.Enabled = True‬‬

‫‪Else‬‬

‫‪cmdnext.Enabled = False‬‬

‫"" = ‪TxtName‬‬

‫‪End If‬‬

‫‪End Sub‬‬

‫ملحظـة‪ :‬الشفرة أعله ل تسمح بادخال فراغات أو أرقام في صندوق النص‬


‫ويبقى زر ‪ CmdNext‬غير فعال حتى يقوم المستخدم بأدخال حروف تمثل أسمه‪.‬‬
‫نشاط ‪ :3‬أستخدم الحدثين ‪ Change‬و ‪ LostFocus‬لحل المثال‬
‫أعله مع الستغناء عن تغيير صفة ‪ Enabled‬لـزر‬
‫‪.CmdNext‬‬
‫‪ 5-5‬الطار ‪Frame‬‬
‫يستخدم هذا الكائن كوعاء )‪ (Container‬لزرار الخيارات وصناديق التحقق‬
‫وفوائده هي‪:‬‬
‫عند تحريك الطار فأن كل محتوياته تتحرك معه‪.‬‬ ‫‪‬‬
‫‪ ‬من المعلوم أنه عند وجود عدة أزرار خيارات )‪ (Option Buttons‬فأن أختيار‬
‫أحدها يؤدي الى ألغاء أختيار بقية أزرار الخيارات حتى وأن كانت هذه‬
‫الزرار ل تتعلق بموضوع واحد ولهذا يستخدم الطار لعزل أزرار‬
‫الخيارات التي تتعلق بموضوع واحد )مثل مجموعة أزرار خيارات تحديد‬
‫حجم الخط( عن أزرار خيارات موضوع أخر مثل تحديد لون الخط‪ .‬ل‬
‫تضاف الكائنات للطار بالنقر المزدوج وأنما نختار الكائن بنقرة واحدة‬
‫ثم نسحب داخل الطار لتحديد حجمه وموقعه ضمن الطار‪.‬‬
‫الصفات‬
‫لهذا الكائن بعض صفات التي تشبه صفات الكائنات الخرى ونذكر منا صفة‬
‫‪ Caption‬لدخال العنوان الذي يظهر أعلى الطار ويشير لمحتويات الطار ويمكن‬
‫الستفادة من صفة ‪ RightToLeft‬لوضع العنوان على اليمين أو اليسار‪.‬‬
‫أحداث وطرق الطار‬
‫ان أحداث وطرق الطار نادرة الستخدام ونذكر من أحداث ‪ Click‬و ‪DblClick‬‬
‫و ‪ DragDrop‬أما الطرق المتوفرة فهي ‪ Move‬و ‪ Refresh‬والخيرة تستخدم‬
‫لعادة رسم الكائن بأحدث صفاته وعمليا ل نحتاج لهذه الطريقة لن الفيجول‬
‫بيسك يعيد رسم الكائن تلقائيا عند تغيير صفاته‪.‬‬

‫‪11‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪1‬‬
‫هاني عبد الحسين هادي‬

‫‪ 5-6‬صناديق التحقق ‪Check Boxes‬‬


‫يستخدم هذا الكائن عند وجود عدة خيارات يمكن تطبيقها معا مثل تحديد‬
‫نمط الخط )مثخن ومائل وتحته خط( في نفس الوقت وتكون صناديق التحقق‬
‫مربعة الشكل تظهر بداخلها علمة صح عند أختيارها‪.‬‬
‫الصفات‬
‫الجدول )‪ (10-3‬يوضح بعض صفات صناديق التحقق‪:‬‬
‫جدول )‪(10-3‬‬
‫الوصف‬ ‫القيمـــة‬ ‫الصفــة‬
‫الفتراضية‬

‫لضافة عنوان للصندوق ويكون معبرا عن‬ ‫‪Check1‬‬ ‫‪Caption‬‬


‫الوظيفة التي ستتحقق عند أختيار الصندوق‬
‫ويظهر يمين أو يسار الصندوق أعتمادا على‬
‫المحاذاة‬
‫تحديد حالة الصندوق هل هو مؤشر أم ل ويمكن‬ ‫‪0‬‬ ‫‪Value‬‬
‫تحديد هذه الصفة أثناء فترة التصميم أو التنفيذ‬
‫وتأخذ ثلث قيم‪ 0 :‬وتعني غير مؤشر ‪ 1 ،‬وتعني‬
‫مؤشر و ‪ 2‬وتعني مؤشر جزئيا وتظهر أهمية هذه‬
‫القيمة عندما يكون صندوق التحقق مسؤول عن‬
‫عدة خيارات ولكننا نختار جزء منها وهنا يكون‬
‫الصندوق مؤشر ولكن أرضية الصندوق تكون بلون‬
‫رصاصي‪.‬‬
‫اضافة صورة للصندوق )الصورة مخزونة في‬ ‫فارغة‬ ‫‪Picture‬‬
‫أحدى وحدات الخزن( ول تعمل هذه الصفة أل أذا‬
‫كانت صفة ‪ Style‬مساوية لـ ‪.Graphical‬‬
‫اضافة صورة للصندوق عند أختياره أثناء التنفيذ‬ ‫فارغة‬ ‫‪DownPicture‬‬

‫أحداث وطرق صناديق التحقق‬


‫أدناه بعض ألحداث المتوفرة لصناديق التحقق‪:‬‬
‫‪Click , MouseUp , DragDrop , GotFocus , LostFocus‬‬
‫ان كثير من المبرمجين ل يستخدمون هذه الحداث وأنما يستفاد من تغيير قيمة‬
‫الصفة ‪ Value‬عند تأشير )أختيار( الصندوق ‪ ،‬ويستخدم الحدث ‪ Click‬لتنفيذ‬
‫عمليات معينة عند تأشير الصندوق أما الطرق فأن أستخدامها قليل جدا مثل‬
‫‪ Move‬و ‪ Refresh‬و ‪.SetFocus‬‬

‫‪11‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪2‬‬
‫هاني عبد الحسين هادي‬

‫‪ 5-7‬أزرار ألخيارات ‪Option Buttons‬‬


‫تسمح أزرار الخيارات )تسمى أيضا بأزرار الشعاع( بتأشير خيار واحد من‬
‫مجموعة من الخيارات ‪ ،‬أي ان تأشير أحد الخيارات يلغي تأشير الزرار الخرى‬
‫وعند وجود أكثر من مجموعة واحدة لزرار الخيارات فيجب عزلها عن بعضها‬
‫وذلك بوضعها داخل اطار وتكون هذه الزرار على شكل دوائر صغيرة تظهر‬
‫بداخلها دائرة سوداء عند تأشيرها‪.‬‬
‫الصفات‬
‫تشبه صفات صناديق التحقق مثل العنوان والصورة وغيرها ‪ ،‬أما صفة ‪ Value‬فتأخذ‬
‫قيمتين فقط ما ‪ True‬و ‪.False‬‬
‫أحداث وطرق أزرار الخيارات‬
‫لها نفس أحداث وطرق صناديق التحقق وأيضا يستفاد من قيمة ‪ Value‬لنجاز‬
‫الوظائف المطلوبة‪.‬‬

‫مثــال )‪ : (6‬المطلوب تصميم الشكل )‪ (20-3‬حيث يتغير تنسيق النص حسب‬


‫أختيار المستخدم‪.‬‬

‫الشكل )‪(22-3‬‬
‫التصميم‪ :‬بعد إنشاء مشروع جديد نضيف الكائنات التالية للنموذج ‪:‬‬
‫• صندوق نص بأسم ‪ TxtTitle‬وكتابة نص بداخله ونوع الخط و ‪MS Sans‬‬
‫‪Seirf‬‬
‫• اطار لللوان واطار لحجم الخط واطار لنمط الخط‪.‬‬

‫‪11‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪3‬‬
‫هاني عبد الحسين هادي‬

‫• زر أوامر لنهاء المثال‬


‫ أدناه هي الشفرة المطلوبة لصناديق التحقق وأزرار الخيارات‬: ‫الشفرة‬
Private Sub ChkBold_Click()
If ChkBold.Value = 1 Then
TxtTitle.FontBold = True
Else
TxtTitle.FontBold = False
End If
End Sub
Private Sub ChkItalic_Click()
If ChkItalic.Value = 1 Then
TxtTitle.FontItalic = True
Else
TxtTitle.FontItalic = False
End If
End Sub
Private Sub ChkUnder_Click()
If ChkUnder.Value = 1 Then
TxtTitle.FontUnderline = True
Else
TxtTitle.FontUnderline = False
End If
End Sub
Private Sub CmdClose_Click()
End
End Sub
Private Sub Opt10_Click()
TxtTitle.FontSize = 10
End Sub
Private Sub Opt12_Click()
TxtTitle.FontSize = 12
End Sub
Private Sub Opt14_Click()
TxtTitle.FontSize = 14
End Sub
Private Sub Opt18_Click()
TxtTitle.FontSize = 18
End Sub
Private Sub OptBlue_Click()
TxtTitle.ForeColor = vbBlue
End Sub
Private Sub OptGreen_Click()

11 d_pro2001@yahoo.com 07705853496
4
‫هاني عبد الحسين هادي‬

‫‪TxtTitle.ForeColor = vbGreen‬‬
‫‪End Sub‬‬
‫)(‪Private Sub OptRed_Click‬‬
‫‪TxtTitle.ForeColor = vbRed‬‬
‫‪End Sub‬‬
‫)(‪Private Sub OptYellow_Click‬‬
‫‪TxtTitle.ForeColor = vbYellow‬‬
‫‪End Sub‬‬
‫ملحظـة‪ :‬يمكن للطالب أن يضيف صناديق التحقق من دون أن يضعها داخل اطار‬
‫وقد أضيف الطار في المثال لغراض تنسيقية فقط‪.‬‬

‫‪ 5-8‬صندوق القائمة ‪List Box‬‬


‫تستخدم هذه الداة لعرض قائمة من المدخلت ول يمكن تغيير هذه المدخلت‬
‫مباشرة من خلل النقر داخل القائمة وأنما يمكن ذلك داخل الشفرة ويقوم‬
‫الفيجول بيسك بأظهار أشرطة التمرير عندما تكون القائمة طويلة‪.‬‬
‫الصفات‬
‫الجدول )‪ (11-3‬يوضح أهم صفات صندوق القائمة‪:‬‬
‫جدول )‪(11-3‬‬
‫الوصف‬ ‫القيمـــة‬ ‫الصفــة‬
‫الفتراضي‬
‫ة‬
‫لدخال عناصر القائمة وفي نهاية كل عنصر‬ ‫فارغة‬ ‫‪List‬‬
‫نضغط مفتاحي ‪ Enter‬و ‪ Ctrl‬معا لدخال عنصر‬
‫جديد ويمكن أستخدام هذه الصفة داخل الشفرة‬
‫)على شكل مصفوفة( لتحديد قيم العناصر المراد‬
‫حذفها أو أضافتها أو طباعتها ‪ ،‬فمثل لطباعة‬
‫العنصر الثالث نستخدم العبارة‬
‫)‪Print ListComputer.List(2‬‬
‫حيث ‪ ListComputer‬هو أسم صندوق القائمة‬
‫والرقم ‪ 2‬يمثل موقع العنصر الثالث داخل القائمة‬
‫لن مواقع العناصر تبدأ بالصفر‪.‬‬
‫تأخذ هذه الصفة ثلث قيم هي ‪ 0‬وتسمح بأختيار‬ ‫‪None-0‬‬ ‫‪MultiSelect‬‬
‫غنصر واحد فقط ‪ 1‬وتسمح بأختيار عدة عناصر و ‪2‬‬
‫لختيارمدى من العناصر فأذا كانت متسلسلة يتم‬

‫‪11‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪5‬‬
‫هاني عبد الحسين هادي‬

‫نقر العنصر الول ثم نضغط مفتاح ‪ Shift‬ونقر‬


‫العنصر الخير‪ .‬أما أذا كانت متفرقة نستخدم مفتاح‬
‫السيطرة ‪ Ctrl‬مع عملية النقر‪.‬‬
‫تحديد عدد أعمدة قائمة العناصر وتأخذ القيمة ‪0‬‬ ‫‪0‬‬ ‫‪Columns‬‬
‫لعرض عمود واحد مع ظهور شريط التمرير‬
‫العمودي والقيمة ‪ 1‬لعرض عمود واحد مع ظهور‬
‫شريط التمرير الفقي والقيمة ‪ 2‬لعرض عمودين‬
‫مع شريط التمرير الفقي‪.‬‬
‫تستخدم عندما يتم أدخال عناصر القائمة على‬ ‫فارغة‬ ‫‪Index‬‬
‫شكل مصفوفة وسيمر علينا أستخدام‬
‫المصفوفات‪.‬‬
‫تستخدم داخل الشفرة فقط لسترجاع قيمة‬ ‫‪Text‬‬
‫العنصر المختار من صندوق القائمة وفرقها عن‬
‫صفة ‪ List‬هو أنها لعنصر واحد بينما ‪ List‬تستخدم‬
‫لعدة عناصر‪.‬‬
‫تستخدم داخل الشفرة لسترجاع أو تغييرموقع‬ ‫‪ListIndex‬‬
‫العنصر المختار )الحالي( مثل‬
‫طبع موقع العنصر ‪Print.LstName,ListIndex‬‬
‫المختار‬
‫أختيار العنصر الثالث ‪LstName,ListIndex = 2‬‬
‫تستخدم داخل الشفرة لسترجاع موقع أخر عنصر‬ ‫‪NewIndex‬‬
‫أضيف للقائمة‬
‫تستخدم داخل الشفرة لتحديد العدد الكلي لعناصر‬ ‫‪ListCount‬‬
‫القائمة وقيمة هذه الصفة مساوية لقيمة الصفة‬
‫‪ NewIndex‬مضافا لها واحد‪.‬‬
‫تأخذ قيمة ‪ True‬أو ‪ False‬وتستخدم داخل الشفرة‬ ‫‪Selected‬‬
‫على شكل مصفوفة لتحديد العناصر المختارة أو‬
‫لختيارعناصر من القائمة‬
‫لختيار العنصر الثالث ‪LstName.Selected(2) = True‬‬
‫وفرقها عن صفة ‪ ListIndex‬هو أن الخيرة تستخدم‬
‫لعنصر واحد أما صفة ‪ Selected‬تستخدم لعدة‬
‫عناصر‬
‫تستخدم لترتيب عناصر القائمة تصاعديا ‪ ،‬ويكون‬ ‫‪False‬‬ ‫‪Sorted‬‬
‫أستخدامها خلل فترة التصميم فقط ‪ ،‬أي ل يمكن‬
‫تحديدها أو تغييرها أثناء التنفيذ داخل الشفرة‬
‫ويمكننا أثناء التنفيذ معرفة قيمة الصفة )‪ True‬أو‬
‫‪ (False‬ونذكر هنا ان عملية الترتيب للنصوص‬

‫‪11‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪6‬‬
‫هاني عبد الحسين هادي‬

‫النكليزية ل تتأئر بكون الحروف صغيرة )‪ (small‬أو‬


‫كبيرة )‪.(capital‬‬
‫كيفية ظهور القائمة وتأخذ قيمة ‪ 0‬للعرض العتيادي‬ ‫‪0‬‬ ‫‪Style‬‬
‫أو ‪ 1‬لظهار صناديق تحقق على يسار أو يمين‬
‫العناصر‬
‫تحديد محاذاة العناصر‬ ‫‪False‬‬ ‫‪RightToLeft‬‬

‫أحداث صندوق القائمة‬


‫تشبه أحداث الكائنات الخرى مثل ‪ DblClick ، Click ، DragOver‬وغيرها ولعل‬
‫النقر المزدوج هو أهم الحداث والذي يؤدي الى أختيار العنصر والخروج من‬
‫النموذج )أو النافذة التي تحتوي على القائمة( كما يحدث في أغلب تطبيقات‬
‫الويندوز‪.‬‬
‫طـرق صندوق القائمة‬
‫لصندوق القائمة طرق خاصة به مثل ‪:‬‬
‫‪ : AddItem‬لضافة عنصر للقائمة‪ .‬العبارة التية تمثل أضافة العنص ‪Sharp‬‬
‫للقائمة‬
‫"‪LstComputer.AddItem "Sharp‬‬
‫ويعتمد موقع العنصر المضاف على قيمة الصفة ‪ Sorted‬فأذا كانت ‪ True‬فيكون‬
‫موقعه وفق الترتيب التصاعدي للعناصر‪ .‬أما أذا كانت ‪ False‬فيضاففي أسفل‬
‫القائمة‪ .‬ويمكن اضافة عنصر ووضعه في موقع معين )أذا كانت صفة ‪Sorted‬‬
‫مساوية لـ ‪ (False‬كما يلي‪:‬‬
‫سيكون موقعه الرابع داخل القائمة ‪LstComputer.AddItem "IBM",3‬‬
‫‪ :RemoveItem‬حذف عنصر من القائمة‪ .‬العبارة تقوم بحذف العنصر الثالث‬
‫)‪LstComputer.RemoveItem(2‬‬
‫‪ :Clear‬حذف كل عناصر القائمة كما موضح أدناه‬
‫‪LstComputer.Clear‬‬
‫مثــال )‪ :(7‬المطلوب تصميم النموذج في الشكل )‪ (23-3‬حيث تدخل عناصر‬
‫القائمة الولى خلل فترة التصميم ويقوم المشروع بنقل أي عنصر الى القائمة‬
‫الثانية عند نقره نقرة مزدوجة‪.‬‬

‫‪11‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪7‬‬
‫هاني عبد الحسين هادي‬

‫الشكل )‪(23-3‬‬
‫التصميم‪ :‬نكون مشروع جديد ونضيف الكائنات التالية للنموذج ‪:‬‬
‫• صندوق قائمة بأسم ‪ lstFirst‬ونغير حجمه ونحركه بحيث يملىء الجزء اليمن‬
‫من النموذج‪ .‬ندخل العناصر التالية عموديا في صفة ‪List‬‬
‫)‪(Ahmed, Ali, Huda, Zainab, Gaith, Salem, Noor, Kamal‬‬
‫• صندوق قائمة بأسم ‪ lstSecond‬ونترك صفة ‪ List‬فارغة‪.‬‬
‫• دللتين ‪ ،‬أحداهما بعنوان "‪ "List Box 1‬والخرى بعنوان "‪."List Box 2‬‬
‫• زر الغلق‪.‬‬
‫الشفرة ‪ :‬أدناه شفرة النقر المزدوج لصناديق القائمة‬
‫)(‪Private Sub lstFirst_DblClick‬‬
‫أضافة العنصرالمختار للقائمة الثانية ‪lstSecond.AddItem lstFirst.Text‬‬
‫حذف العنصر المنقول من القائمة الولى ‪lstFirst.RemoveItem lstFirst.ListIndex‬‬
‫‪End Sub‬‬
‫مثــال )‪ :(8‬سوف نقوم بحل المثال السابق ولكن بأستخدام الحدث‬
‫‪ MouseDown‬مع مفتاح ‪ Shift‬لنقل السم أو المفتاح ‪Ctrl‬لستنساخ السم‪.‬‬
‫الشفرة ‪ :‬في نافذة الشغرة نضيف الحدث المطلوب للقائمة الولى ونكتب‬
‫لليعازات كما يلي‪:‬‬
‫‪Private Sub lstFirst_MouseDown(Button As Integer, Shift As Integer, X As‬‬
‫)‪Single, Y As Single‬‬
‫‪If Shift = 1 Then‬‬
‫‪lstSecond.AddItem lstFirst.Text‬‬

‫‪11‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪8‬‬
‫هاني عبد الحسين هادي‬

‫‪lstFirst.RemoveItem lstFirst.ListIndex‬‬
‫‪ElseIf Shift = 2 Then‬‬
‫‪lstSecond.AddItem lstFirst.Text‬‬
‫‪End If‬‬
‫‪End Sub‬‬
‫ملحـظة‪ :‬الحدث ‪ MouseDown‬يأخذ أربعة متغيرات هي‬
‫• المتغير ‪ Button‬وقيمته ‪ 1‬للزر اليسر و ‪ 2‬للزر اليمن و ‪ 3‬للزر‬
‫الوسط‬
‫• المتغير ‪ Shift‬وقيمته ‪ 1‬لمفتاح ‪ Shift‬و ‪ 2‬لمفتاح ‪ Ctrl‬و ‪ 3‬لمفتاح ‪Alt‬‬
‫• المتغيرين ‪ X‬و ‪ Y‬يمثلن أحداثيات مؤشر الفأرة عند تطبيق الحدث‪.‬‬
‫‪ 5-9‬الصندوق المركب )أو القائمة المنسدلة( ‪Combo Box‬‬
‫يجمع هذه الكائن ما بين مزايا صندوق النص وصندوق القائمة )ولهذا سمي‬
‫بالمركب( فهو يستخدم لعرض قائمة ويسمح لنا مباشرة )من خلل عملية النقر(‬
‫بأدخال أو تغيير أي عنصر‪ .‬كما يتيح امكانية تغيير قيمة الصفة ‪ Text‬أثناء فترة‬
‫التنفيذ )صندوق القائمة يتيح فقط امكانية استرجاع قيمة الصفة ‪.(Text‬‬
‫الصفات‬
‫تتشابه صفات هذا الكائن مع صفات صندوق القائمة مثل ‪ List‬و ‪ ListCount‬و‬
‫‪ ListIndex‬و ‪ Sorted‬وغيرها وتختفي بعض الصفات مثل ‪ Columns‬و ‪ Selected‬و‬
‫‪ MultiSelect‬وأهم صفة يتميز بها هذا الكائن هي ‪ Style‬وتأخذ ثلث قيم‪:‬‬
‫‪ : DropDownCombo-0‬هذه القيمة تجعل الصندوق المركب يشبه صندوق‬
‫النص وعلى يمينه سهم نحو السفل لسرد عناصر الصندوق وعند أختيار أي‬
‫عنصر فأنه يظهر في العلى حيث يمكن تغييره مباشرة بالنقر داخله‪.‬‬
‫‪ : SimpleCombo-1‬هنا يختفي سهم السرد لن عناصر الصندوق تكون ظاهرة‬
‫ويمكن الختيار والتغيير ويجب تكبير حجم الصندوق لظهار جميع العناصر‪.‬‬
‫‪ : DropDownList-2‬يشبه النمط الول من ناحية الشكل )صندوق نص وسهم‬
‫سرد( ولكنه ل يسمح بالتغيير المباشر ‪ ،‬أي أن صندوق النص هنا يتصرف كأنه‬
‫صندوق قائمة ويستخدم هذا النمط بدل صندوق القائمة عندما يكون النموذج‬
‫مزدحم بالكائنات‪.‬‬
‫أحداث وطرق الصندوق المركب‬
‫لهذا الكائن أحداث كثيرة ولكن الكثر أستخداما هي ‪:‬‬
‫‪ : DropDown‬وهو يعمل مع القيمتين الولى والثالثة لصفة ‪Style‬‬
‫‪ : Change‬يعمل مع القيمة الولى والقيمة الثانية لصفة ‪Style‬‬
‫‪ : DblClick‬يعمل فقط مع القيمة الولى لصفة ‪Style‬‬

‫‪11‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪9‬‬
‫هاني عبد الحسين هادي‬

‫أما الطرق فهي كتلك المتوفرة لصندوق القائمة وهي ‪ AddItem‬و ‪ Clear‬و‬
‫‪.RemoveItem‬‬
‫مثــال)‪ : (9‬صمم النموذج في الشكل )‪ (24-3‬وأجعل المشروع يضيف )أثناء‬
‫التحميل( عشرة أسماء حيوانات للصندوق المركب وكذلك يقوم باضافة أي أسم‬
‫من أسماء قائمة الصندوق المركب الى صندوق القائمة عند نقره نقرة مزدوجة‬
‫أو نقره نقرة منفردة ثم نقر زر "أضف الى"‪.‬‬

‫الشكل )‪(24-3‬‬
‫التصميم‪ :‬نكون مشروع جديد ونجعل عنوان النموذج " مثال عن الصندوق‬
‫المركب" ونعطي قيمة ‪ True‬لصفة ‪ RightToLeft‬ونضيف الكائنات التية‪:‬‬
‫• صندوق مركب بأسم ‪ CboAnimals‬ونجعل صفة ‪ Style‬له مساوية لـ ‪-1‬‬
‫‪ SimpleCombo‬ونحول صفة ‪ RightToLeft‬الى ‪True‬‬
‫• صندوق قائمة بأسم ‪ lstAnimals‬ونترك صفة ‪ List‬فارغة ونحول صفة ‪RightToLeft‬‬
‫الى ‪True‬‬
‫• دللتين ‪ ،‬أحداهما بعنوان "صندوق مركب" والخرى بعنوان "صندوق قائمة"‪.‬‬
‫• زر أوامر لضافة العنصر المختار من الصندوق المركب الى صندوق القائمة‬
‫• زر الغلق‪.‬‬
‫الشفرة ‪:‬‬
‫• ننقر النموذج نقرة مزدوجة وندخل شفرة حدث التحميل للنموذج‬
‫)(‪Private Sub Form_Load‬‬
‫"حصان" ‪CboAnimals.AddItem‬‬
‫"ثعلب" ‪CboAnimals.AddItem‬‬

‫‪12‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪0‬‬
‫هاني عبد الحسين هادي‬

‫"قطة" ‪CboAnimals.AddItem‬‬
‫"أسد" ‪CboAnimals.AddItem‬‬
‫"فهد" ‪CboAnimals.AddItem‬‬
‫"ذئب" ‪CboAnimals.AddItem‬‬
‫"كلب" ‪CboAnimals.AddItem‬‬
‫"خروف" ‪CboAnimals.AddItem‬‬
‫"غزال" ‪CboAnimals.AddItem‬‬
‫‪End Sub‬‬
‫نكتب شفرة زر الضافة‬ ‫•‬

‫)(‪Private Sub cmdadd_Click‬‬

‫‪lstAnimals.AddItem CboAnimals.Text‬‬

‫‪End Sub‬‬
‫نكتب شفرة النقر المزدوج للصندوق المركب‬ ‫•‬
‫)(‪Private Sub CboAnimals_DblClick‬‬
‫‪cmdadd_Click‬‬
‫‪End Sub‬‬
‫نكتب شفرة زر الغلق‬ ‫•‬
‫)(‪Private Sub cmdexit_Click‬‬
‫‪End‬‬
‫‪End Sub‬‬
‫مـلحظـة ‪ :‬يمكن أستبدال عبارة ‪ cmdAdd_Click‬في حدث النقر المزدوج‬
‫للصندوق المركب بالعبارة التالية‪:‬‬
‫‪cmdAdd.Value = True‬‬
‫حيث تؤدي هذه العبارة الى تفعيل حدث النقر لزر الوامر ‪.cmdAdd‬‬
‫‪ 5-10‬أشرطة التمرير الفقية والعمودية ‪Horizontal and‬‬
‫‪Vertical Scroll Bars‬‬
‫تضاف هذه الكائنات تلقائيا مع بعض الكائنات الخرى مثل صندوق القائمة‬
‫والصندوق المركب ‪ ،‬كما يمكننا أضافة هذه الشرطة لستخدامات أخرى‪ .‬ويوجد‬
‫بداخل الشرطة المزلق )‪ (Thumb‬والذي يتحرك بعدة عمليات هي ‪ :‬عملية‬

‫‪12‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪1‬‬
‫هاني عبد الحسين هادي‬

‫السحب ‪ ،‬نقر السهمين الموجودين في نهاية الشريط أو نقر شريط التمرير )قبل‬
‫أو بعد المزلق(‪ .‬وعند تغير موقع المزلق تتغير قيمة الصفة ‪Value‬‬
‫الصفات‬
‫الجدول )‪ (12-3‬يوضح أهم صفات صندوق القائمة‪:‬‬
‫جدول )‪(12-3‬‬
‫الوصف‬ ‫القيمـــة‬ ‫الصفــة‬
‫الفتراضي‬
‫ة‬
‫القيمة الدنيا للتمرير ويكون موقع القيمة الدنيا‬ ‫‪0‬‬ ‫‪Min‬‬
‫في العلى بالنسبة لشريط التمرير العمودي‬
‫ويمكن أن تأخذ هذه الصفة قيمة سالبة‬
‫القيمة العليا للتمرير ويمكن أن تأخذ هذه الصفة‬ ‫‪32767‬‬ ‫‪Max‬‬
‫قيمة سالبة‪.‬‬
‫القيمة الحالية للتمرير ويمكن تحديدها أثناء‬ ‫‪0‬‬ ‫‪Value‬‬
‫التصميم أو التنفيذ‪.‬‬
‫مقدار التغير في قيمة الصفة ‪ Value‬عند نقر‬ ‫‪1‬‬ ‫‪LargeChange‬‬
‫الشريط‪.‬‬
‫مقدار التغير في قيمة الصفة ‪ Value‬عند نقر‬ ‫‪1‬‬ ‫‪SmallChange‬‬
‫السهم الموجودة في نهاية الشريط‪.‬‬

‫أحداث وطرق أشرطة التمرير‬


‫تمتلك أشرطة التمرير عدد قليل من الحداث والطرق ‪ ،‬وأهم الحداث هما التغيير‬
‫‪ Change‬والتمرير ‪ .Scroll‬أن حدث التغيير ينفذ عند تغير الصفة ‪ Value‬بأحدى‬
‫العمليات الثلثة المذكورة سابقا ويستثنى من ذلك عملية السحب حيث أن الحدث‬
‫ينفذ بعد أفلت )ترك( المزلق وليس أثناء عملية السحب أما حدث التمرير فأنه ينفذ‬
‫عند تغير الصفة ‪ Value‬بعملية السحب فقط‪ .‬بالنسبة لطرق أشرطة التمرير فأنها‬
‫قليلة جدا ونادرة الستخدام )مثل ‪ Move‬و ‪.(Drag‬‬
‫مثـال)‪ : (10‬صمم الشكل )‪ (25-3‬وأجعل قيمة الصفة ‪ Value‬تظهر في صندوق‬
‫النص عند تغيير موقع المزلق‪.‬‬

‫‪12‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪2‬‬
‫هاني عبد الحسين هادي‬

‫الشكل )‪(25-3‬‬
‫التصميم ‪ :‬نكون مشروع جديد ونجعل عنوان النموذج "‪"Example on Scroll Bars‬‬
‫ونضيف الكائنات التالية‪:‬‬
‫• صندوق نص بأسم ‪ txtMove‬وأجعل فيمة الصفة ‪ Text‬مساوية لـ ‪.50‬‬
‫• شريط تمرير أفقي بأسم ‪ HScroll1‬بالصفات ‪ Value = 50‬و ‪ Min = 0‬و = ‪Max‬‬
‫‪.100‬‬
‫• زر أوامر الغلق‪.‬‬
‫الشفرة ‪ :‬نكتب شفرة أحداث التغيير والتمرير والغلق‬
‫)(‪Private Sub HScroll1_Change‬‬
‫)‪txtMove = Str (HScroll1.Value‬‬
‫‪End Sub‬‬
‫)(‪Private Sub HScroll1_Scroll‬‬
‫‪HScroll1_Change‬‬
‫‪End Sub‬‬
‫)(‪Private Sub cmdExit_Click‬‬
‫‪End‬‬
‫‪End Sub‬‬
‫ملحظات ‪:‬‬
‫• لكل كائن صفة أفتراضية خاصة به يمكننا عدم كتابتها بعد كتابة أسم الكائن‬
‫داخل الشفرة مثل صفة ‪ Text‬لصندوق النص ولهذا لم نكتبها داخل حدث‬
‫التغيير وكذلك يمكننا حذف صفة ‪ Value‬من حدث التغييرلنها الصفة‬
‫الفتراضية لشريط التمرير‪.‬‬
‫• أستخدمنا دالة ‪) Str‬مخنصر ‪ (String‬لتحويل المتغير الرقمي الى متغير رمزي‬
‫ويمكننا حذفها من الشفرة دون أن يؤثر ذلك على أداء المشروع ولكننا‬

‫‪12‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪3‬‬
‫هاني عبد الحسين هادي‬

‫أضفناها للتعرف عليها أول ‪ ،‬كما أن المصمم قد يضطر الى أستخدامها اذا أراد‬
‫جمع ما موجود في صندوق النص مع قيمة رمزية‪.‬‬
‫مثـال)‪ : (11‬أستخدم شريط تمرير عمودي )الشكل ‪ (26-3‬وأرسم دائرة بلون‬
‫أحمر يعتمد قطرها على قيمة الصفة ‪ Value‬والتي تتغير بتغير موقع المزلق‪.‬‬

‫)الشكل ‪(26-3‬‬
‫التصميم ‪ :‬نكون مشروع جديد ونجعل عنوان النموذج كما مبين بالشكل ونضيف ما‬
‫يلي‪:‬‬
‫• شريط تمرير عمودي بأسم ‪ vsbDraw‬مع بقاء صفاته كما هي‪.‬‬
‫• دللتين لعرض قيمتي الصفتين ‪ Min‬و ‪.Max‬‬
‫الشفرة ‪ :‬نكتب شفرة حدث تحميل النموذج وحدثي التغيير والتمرير لشريط‬
‫التمرير‪.‬‬
‫)(‪Private Sub Form_Load‬‬
‫‪vsbDraw.Min = 0: vsbDraw.Max = 1000: vsbDraw.SmallChange = 25‬‬
‫‪End Sub‬‬
‫)(‪Private Sub vsbDraw_Change‬‬
‫‪Form1.Cls‬‬
‫‪Circle (vsbDraw.Height, vsbDraw.Height / 1.5), vsbDraw.Value, vbRed‬‬
‫‪End Sub‬‬
‫)(‪Private Sub vsbDraw_Scroll‬‬
‫‪vsbDraw_Change‬‬
‫‪End Sub‬‬
‫ملحظات ‪:‬‬
‫• تم تحديد بعض صفات شريط التمرير في حدث التحميل للنموذج‪.‬‬

‫‪12‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪4‬‬
‫هاني عبد الحسين هادي‬

‫• يمكن أستخدام أكثر من عبارة واحدة على نفس السطر مع وضع فاصلة بينها‬
‫)‪ (:‬كما في حدث التحميل للنموذج‪.‬‬
‫‪ 5-11‬ألتوقيت ‪Timer‬‬
‫يستخدم كائن التوقيت )أو المؤقتة( للسيطرة على وقت تنفيذ مجموعة من‬
‫الوامر ويكون ظاهرا )على شكل ساعة( على النموذج خلل فترة التصميم ولكنه‬
‫يختفي هند التنفيذ ولهذا ل يهم موقعه أثناء التصميم‪ .‬هذا الكائن يتحقق من وقت‬
‫الحاسوب ويعنل بموجبه‪.‬‬
‫الصفات‬
‫لهذا الكائن صفات قليلة وأهمها‪:‬‬
‫‪ : Interval‬نحدد فيها الفترة الزمنية لتكرار الحدث المرافق لكائن التوقيت وهو‬
‫حدث ‪) Timer‬نفس أسم الكائن( ‪ ،‬وتقاس الفترة الزمنية بوحدات مل‬
‫ثانية‪ .‬عند ادخال قيمة صفرية لهذه الصفة فأن الحدث ل ينفذ أما مدى‬
‫هذه الصفة فهو من صفر الى ‪ 65535‬مل ثانية )دقيقة واحدة تقريبا(‬
‫‪ : Enabled‬لتفعيل الكائن والقيمة الفتراضية لها ‪ True‬وليقاف تنفيذ وظيفة الكائن‬
‫نحولها الى ‪.False‬‬
‫أحداث وطرق كائن التوقيت‬
‫ليس لهذا الكائن أية طرق وله حدث واحد فقط هو ‪ Timer‬والذي يتكرر تنفيذه‬
‫اعتمادا على قيمة الصفة ‪.Interval‬‬
‫مثـال)‪ : (12‬أستخدم كائن التوقيت لتبديل لون أرضية الدللة في الشكل )‪-3‬‬
‫‪ (27‬من الحمر الى الزرق وبالعكس كل ثانية‪.‬‬

‫الشكل )‪(27-3‬‬
‫التصميم ‪ :‬نكون مشروع حديد ونجعل عنوان النموذج كما مبين في الشكل‬
‫ونضيف عليه ما يلي‪:‬‬

‫‪12‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪5‬‬
‫هاني عبد الحسين هادي‬

‫• دللة بالعنوان المبين أعله في الشكل ونجعل صفة ‪ BackColor‬ذات‬


‫لون أحمر ونحول صفة ‪ BorderStyle‬الى القيمة ‪.Fixed Single-1‬‬
‫• كائن التوقيت بأسم ‪ TimerColor‬وندخل القيمة ‪ 1000‬في الصفة‬
‫‪.Interval‬‬
‫• زر الغلق‪.‬‬
‫الشفرة ‪ :‬ندخل شفرة حدث ‪ Timer‬لكائن التوقيت وحدث الغلق لزر الوامر‪.‬‬
‫)(‪Private Sub TimerColor_Timer‬‬
‫‪If Label1.BackColor = vbRed Then‬‬
‫‪Label1.BackColor = vbBlue‬‬
‫‪Else‬‬
‫‪Label1.BackColor = vbRed‬‬
‫‪End If‬‬
‫‪End Sub‬‬
‫)(‪Private Sub cmdExit_Click‬‬
‫‪End‬‬
‫‪End Sub‬‬

‫‪ 5-12‬مستعرض مشغلت القراص ‪Drive List Box‬‬


‫نستخدم هذا الكائن لعرض وأختيار وحدة الخزن ويرتبط عمله مع كائنات أخرى‬
‫هي مستعرض الملفات وقائمة المجلدات لختيار ملف معين من مجلد معين‬
‫موجود في وحدة الخزن‪.‬‬
‫الصفات‬
‫لهذا الكائن صفات كثيرة شبيهة بصفات بقية الكائنات وتعتبر صفة ‪ Drive‬أهم‬
‫صفة له وهي ترجع )في زمن التنفيذ( أسم وحدة الخزن )مثل ‪ :C‬أو ‪ :D‬أو غيرها(‬
‫الحداث والطرق‬
‫أهم الحداث هو حدث التغيير ‪ Change‬والذي ينفذ عند تغيير أختيار وحدة الخزن‬
‫وتوضع بداخله قيمة الصفة ‪ Drive‬لتحديث التغير الحاصل في أختيار وحدة‬
‫الخزن ‪ ،‬أما الطرق فأنها قليلة ونادرة الستخدام )مثل ‪ Move‬و ‪ Drag‬و ‪(SetFocus‬‬
‫‪ 5-13‬قائمة المجلدات ‪Directory List Box‬‬
‫يستخدم لعرض وأختيار مجلد معين ضمن وحدة الخزن ولهذا الكائن نفس صفات‬
‫مستعرض مشغل القراص ولكنه يتميز بصفة ‪ Path‬والتي تحدد أو تسترجع )في زمن‬
‫التنفيذ فقط( المسار الحالي للمجلد المختار وتوضع داخل حدث التغييرلمستعرض‬
‫مشغل القراص‪.‬‬

‫‪12‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪6‬‬
‫هاني عبد الحسين هادي‬

‫)(‪Private Sub DriveCar_Change‬‬


‫‪DirCar.Path = DriveCar.Drive‬‬
‫‪End Sub‬‬
‫الحداث والطرق‬
‫لهذا الكائن عدة أحداث وأكثرها أستخداما هو حدث ‪ Click‬وكذلك حدث ‪Change‬‬
‫والذي ينفذ عند فتح المجلد من خلل نقرة مزدوجة ويستخدم لسترجاع قيمة‬
‫الصفة ‪ .Path‬أما الطرق فهي نفس طرق مستعرض مشغل القراص وهي أيضا‬
‫ونادرة الستخدام‪.‬‬
‫‪ 5-14‬مستعرض الملفات ‪File List Box‬‬
‫يستخدم هذا الكائن لعرض أسماء الملفات في مجلد معين‪.‬‬
‫الصفات‬
‫الجدول )‪ (13-3‬يوضح أهم صفات مستعرض الملفات‪:‬‬
‫جدول )‪(13-3‬‬
‫الوصف‬ ‫القيمـــة‬ ‫الصفــة‬
‫الفتراضي‬
‫ة‬
‫تحديد مسار الملفات المعروضة وتعرف هذه‬ ‫‪Path‬‬
‫الصفة أو تسترجع خلل فترة التنفيذ وذلك بوضعها‬
‫داخل حدث التغيير لقائمة المجلدات‬
‫)(‪Private Sub DirCar_Change‬‬
‫‪FileCar.Path = DirCar.Path‬‬
‫‪End Sub‬‬
‫ومن الجدير بالذكر أن حدث التغيير لقائمة‬
‫المجلدات ل يتحقق بمجرد اختيار المجلد )نقرة‬
‫واحدة( وانما بفتح ذلك المجلد من خلل نقرة‬
‫مزدوجة وبعدها يستجيب مستعرض الملفات‬
‫لعرض ملفات ذلك المجلد‪.‬‬
‫لجعل الكائن فعال أو غير فعال وذلك بتحويل‬ ‫‪True‬‬ ‫‪Enabled‬‬
‫الصفة الى ‪False‬‬
‫ترجع أسم الملف المختار )المؤشر( في مستعرض‬ ‫‪FileName‬‬
‫الملفات‪.‬‬
‫لعرض أو أخفاء الكائن‪.‬‬ ‫‪True‬‬ ‫‪Visible‬‬
‫نحدد من خللها نوع الملفات المطلوب عرضها‬ ‫*‪*.‬‬ ‫‪Pattern‬‬
‫في المستعرض ويمكن تحديد هذه الصفة أثناء‬

‫‪12‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪7‬‬
‫هاني عبد الحسين هادي‬

‫التصميم أو التنفيذ وقيمتها الفتراضية تعني عرض‬


‫كل النواع ‪ ،‬ولعرض الملفات ذات المتداد ‪ bmp‬و‬
‫‪ jpg‬معا فأننا ندخل القيمة كما يلي ‪:‬‬
‫‪*.bmp ; *.jpg‬‬ ‫)تفصل بينها فارزة منقوطة(‬
‫لظهار وأخفاء ملفات الرشيف‬ ‫‪True‬‬ ‫‪Archive‬‬
‫لظهار وأخفاء الملفات المخصصة للقراءة فقط‬ ‫‪True‬‬ ‫‪ReadOnly‬‬
‫لظهار وأخفاء ملفات النظام‬ ‫‪False‬‬ ‫‪System‬‬
‫لظهار وأخفاء الملفات المخفية‬ ‫‪False‬‬ ‫‪Hidden‬‬

‫الحداث والطرق‬
‫لمستعرض الملفات عدة أحداث أهمها ‪:‬‬
‫‪ : Click‬يستخدم حدث النقر لتنفيذ أية عمليات على الملفات )مثل الفتح أو‬
‫الغلق أو الخزن( أعتمادا على قيمة الصفة ‪.Path‬‬
‫‪ : DblClick‬يوضع داخل هذا الحدث )كما مر سابقا( حدث النقر المنفرد والذي‬
‫ينفذ على أحد أزرار الوامر‪.‬‬
‫‪ : PathChange‬ينفذ هذا الحدث عند تغيير قيمة الصفة ‪.Path‬‬
‫‪ : PatternChange‬ينفذ هذا الحدث عند تغير قيمة الصفة ‪ Pattern‬والتي يمكن أن‬
‫تتغير بصورة مباشرة داخل الشفرة )مثل ‪ (FileCar,Pattern = *.txt‬أو ندخل قيمتها‬
‫داخل صندوق نص ثم نجعل الصفة مساوية لهذا النص )مثل = ‪FileCar.Pattern‬‬
‫‪.(txt.text‬‬
‫أما طرق الكائن فهي قليلة ونادرة الستخدام مثل ‪ Refresh‬و ‪.Move‬‬
‫‪ 5-15‬صندوق الصورة ‪Picture Box‬‬
‫لهذا الكائن وظائف متعددة منها امكانيته لعرض الصور )المخزونة في ملفات(‬
‫ذات المتدادات ‪ bmp ، jpg ، gif ، ico‬وغيرها ويستخدم أيضا لظهار النصوص‬
‫ونواتج طرق الرسم )الخطوط والدوائر(‪ .‬وبصورة عامة فأن صندوق الصورة‬
‫يتصرف كوعاء )‪ (Container‬حيث يمكن وضع الكائنات بداخله )مثل أزرار الوامر(‬
‫فيتصرف كنموذج صغير داخل النموذج الكبير‪.‬‬
‫الصفات‬
‫لهذا الكائن العديد من الصفات ‪ ،‬بعض منها مشتركة مع الكائنات الخرى والجدول‬
‫التي يوضح أهم هذه الصفات‪:‬‬
‫جدول )‪(14-3‬‬

‫‪12‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪8‬‬
‫هاني عبد الحسين هادي‬

‫الوصف‬ ‫القيمـــة‬ ‫الصفــة‬


‫الفتراضي‬
‫ة‬
‫تحديد أسم ملف الصورة المطلوب عرضها داخل‬ ‫فارغة‬ ‫‪Picture‬‬
‫صندوق الصورة ويمكن تغيير هذه الصفة أثناء‬
‫التنفيذ داخل الشفرة فلعرض الملف ‪Iraq.bmp‬‬
‫الموجود على جذر القرص الصلب ‪ :C‬نستخدم‬
‫العبارة‬
‫)"‪PicView.Picture = LoadPicture ("C:\Iraq.bmp‬‬
‫ولزالة الصورة الحالية من صندوق الصورة‬
‫نستخدم‬
‫)(‪PicView.Picture = LoadPicture‬‬
‫ولخزن الصورة الحالية تحت أسم ملف فأننا أول‬
‫نجعل الصفة ‪ AutoReDraw‬تساوي ‪ True‬لخزنها‬
‫في الذاكرة ثم نستخدم العبارة التالية لستنساخها‬
‫من الذاكرة الى الملف‬
‫"‪SavePicture PicView.Picture, "C:\Test.bmp‬‬
‫أن أيعاز ‪ SavePicture‬يسند فقط الصور من نوع‬
‫‪bmp‬ز‬
‫هي نفس صفة ‪ Picture‬ولكنها متوفرة فقط في‬ ‫‪Image‬‬
‫وقت التنفيذ وتستخدم لستنساخ الصورة الحالية‬
‫)الصلية مع التغييرات المضافة لها مثل النصوص‬
‫والرسوم الخرى( ‪ ،‬أما صفة ‪ Picture‬فأنها تستنسخ‬
‫فقط الصورة الصلية التي تم تحميلها باليعاز‬
‫‪) LoadPicture‬اهمال التغييرات(‪.‬‬
‫تطبق هذه الصفة على صندوق الصورة وعلى‬ ‫‪False‬‬ ‫‪AutoRedraw‬‬
‫النموذج وكائنات أخرى ونأني أهميتها عند وجود‬
‫رسم أو نافذة فوق صندوق الصورة ‪ ،‬فعندما يزال‬
‫الرسم )أو النافذة( فأنه يمسح محتويات صندوق‬
‫الصورة الذي تقع تحته ولهذا نحول هذه الصفة الى‬
‫‪ True‬فيتم خزن محتويات الصورة الصلية في‬
‫الذاكرة والتي تسترجع تلقائيا أو يدويا )من‬
‫الطريقة ‪ (Refresh‬عند زوال الكائن الذي يغطي‬
‫الصورة‪.‬‬
‫القيمة الفتراضية تعطل عمل هذه الصفة وعند‬ ‫‪False‬‬ ‫‪AutoSize‬‬

‫‪12‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪9‬‬
‫هاني عبد الحسين هادي‬

‫تحويلها الى ‪ True‬فأن صندوق الصورة يكبر أو‬


‫يصغر حسب حجم الصورة المطلوب عرضها‬
‫بداخله ويجب النتباه هنا الى أن بعض الصور‬
‫كبيرة جدا فيكبر الصندوق ويغطي بعض كائنات‬
‫النموذج‪.‬‬
‫نحدد من خللها نوع الملفات المطلوب عرضها‬ ‫*‪*.‬‬ ‫‪Pattern‬‬
‫في المستعرض ويمكن تحديد هذه الصفة أثناء‬
‫التصميم أو التنفيذ وقيمتها الفتراضية تعني عرض‬
‫كل النواع ‪ ،‬ولعرض الملفات ذات المتداد ‪ bmp‬و‬
‫‪ jpg‬معا فأننا ندخل القيمة كما يلي ‪:‬‬
‫‪*.bmp ; *.jpg‬‬ ‫)تفصل بينها فارزة منقوطة(‬
‫تأخذ هذه الصفة أسم ملف بأمتداد ‪ ico‬ويظهر‬ ‫فارغة‬ ‫‪DragIcon‬‬
‫الرسم تلقائيا )بدل مؤشر الفأرة( عند عمل سحب‬
‫لصندوق الصورة‪.‬‬
‫نحدد من خللها هل ان عملية السحب تلقائية أم‬ ‫‪-0‬‬ ‫‪DragMode‬‬
‫ل ‪ ،‬فأذا كانت تلقائية فأننا نحتاج لستخدام‬ ‫‪Manual‬‬
‫الطريقة ‪ Drag‬لجعل حدث السحب والفلت )‬
‫‪ (DragDrop‬ينفذ بصورة صحيحة‪.‬‬
‫أحداث صندوق الصورة‬
‫لصندوق الصورة عدد كبير من الحداث مثل ‪:‬‬
‫‪Change , Click , DblClick , keyPress , KeyUp‬‬
‫‪MouseUp , DragDrop , DragOver , ReSize‬‬
‫أن حدث ‪ DragDrop‬ينفذ عند اكمال عمليتي السحب والفلت وذلك بسحب كائن‬
‫فوق كائن أخر ثم أفلت الفأرة‪ .‬قسم من الحداث أعله ستمر علينا لحقا‪.‬‬
‫طـرق صنـدوق الصـورة‬
‫لهذا الكائن طرق كثيرة )مقارنة ببقية الكائنات( مثل ‪ Circle‬و ‪ Cls‬و ‪ Line‬و ‪PSet‬‬
‫والتي مرت علينا عند الحديث عن النموذج وتعتبر طريقة ‪ PaintPicture‬من أهم‬
‫الطرق ولهذا سنتطرق لها بالتفصيل‪.‬‬
‫الطريقة ‪PaintPicture‬‬
‫تستخدم لستنساخ صورة أو جزء من صورة من كائن )يسمى المصدر( مثل‬
‫النموذج أو صندوق صورة أو صورة ثابتة ‪ Image‬الى صندوق صورة )يسمى الهدف(‬
‫وتأخذ الصيغة التية‪:‬‬
‫‪Target.PaintPicture Source.Picture TX , TY , TWidth , THeight , SX , SY ,‬‬
‫‪SWidth , SHeight , Opcode‬‬

‫‪13‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪0‬‬
‫هاني عبد الحسين هادي‬

‫‪ : Target‬أسم كائن الهدف )صندوق صورة(‬


‫‪ : Source‬أسم كائن المصدر‬
‫‪ : Picture‬صفة ‪ Picture‬وتمثل الصورة المحتواة في كائن المصدر ويمكن أستخدام‬
‫الصفة ‪ Image‬بدل عنها‪.‬‬
‫‪ : TX , TY‬أحداثيات الصورة )أعلى اليسار( في كائن الهدف‬
‫‪ : TWidth , THeight‬عرض وأرتفاع الصورة في كائن الهدف‪ .‬أذا كانت قيم هاتين‬
‫الصفتين أق أو أكبر من عرض وأرتفاع الصورة في كائن المصدر فأن‬
‫أبعاد صورة المصدر تتغيير لتتلئم مع أبعاد صورة الهدف‪.‬‬
‫‪ : SX , SY‬أحداثيات الصورة المراد أستنساخها في كائن المصدر وتأخذ القيم‬
‫التالي حسب المؤثرات المرافقة لعملية الستنساخ‪.‬‬
‫المؤثر المرافق للستنساخ‬ ‫القيم‬
‫بدون مؤثر )أستنساخ فقط(‬ ‫أحداثيات أعلى اليسار‬
‫أستنساخ مع قلب الصورة أفقيا‬ ‫أحداثيات أعلى اليمين‬
‫أستنساخ مع قلب الصورة عموديا‬ ‫أحداثيات أسفل اليسار‬
‫أستنساخ مع قلب الصورة أفقيا و‬ ‫أحداثيات أسفل اليمين‬
‫عموديا‬

‫‪ : SWidth , SHeight‬عرض وأرتفاع صورة كائن المصدر المراد أستنساخها ‪،‬‬


‫وتكون قيمها موجبة في الستنساخ العتيادي أما عند أضافة مؤثر مثل قلب الصورة‬
‫أفقيا فأن العرض يكون سالب أما عند قلب الصورة عموديا فأن الرتفاع يكون‬
‫سالب وعند القلب بالتجاهين فأن كلهما يكون سالب‪.‬‬
‫‪ : Opcode‬متغير يوفر فرصة لتحديد بعض المؤثرات ويستخدم مع ملفات الصور‬
‫من نوع ‪ bmp‬و ‪ jpg‬و ‪ gif‬ويأخذ عدة قيم هي‪:‬‬
‫‪ : VbDstInvert‬عكس الصورة الحالية الموجودة في كائن الهدف‪.‬‬
‫‪ : VbScrCopy‬أستنساخ صورة المصدر ومسح صورة كائن الهدف‪.‬‬
‫‪ : VbNotScrCopy‬أستنساخ معكوس لصورة كائن الهدف‪.‬‬
‫‪ : VbNotScrErease‬ربط صورة المصدر مع صورة الهدف بأستخدام‬
‫الدالة ‪ OR‬ثم‬
‫عكس الصورة الناتجة‪.‬‬
‫مثـال)‪ : (13‬صمم الشكل )‪ (28-3‬والذي يحتوي على صندوق صورة‬
‫ومستعرض مشغل القراص وقائمة المجلدات ومستعرض الملفات ‪ ،‬أجعل‬
‫المشروع يعرض أسماء الملفات من نوع ‪ jpg‬في مستعرض الملفات وتظهر‬
‫صورة الملف المختار في صندوق الصورة‪.‬‬

‫‪13‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪1‬‬
‫هاني عبد الحسين هادي‬

(28-3) ‫الشكل‬
‫ نكون مشروع جديد ونحدد عنوان النموذج ونضيف الكائنات الربعة‬: ‫التصميم‬
‫ لمستعرض‬Pattern ‫ونغير حجمها لتصبح كما مبين في الشكل ونجعل صفة‬
.‫ في حدث التحميل للنموذج‬jpg.* ‫الملفات مساوية لـ‬
.‫ ندخل الشفرات المطلوبة كما مبين أدناه‬: ‫الشفرة‬
Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub
Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive
End Sub
Private Sub File1_Click()
ccName = File1.Path & "\" & File1.FileName
Pic1.Picture = LoadPicture(ccName)
End Sub
Private Sub Form_Load()
File1.Pattern = "*.jpg"
End Sub

13 d_pro2001@yahoo.com 07705853496
2
‫هاني عبد الحسين هادي‬

‫التنفيذ ‪ :‬بعد تنفيذ المشروع نختار وحدة الخزن )نقرة واحدة( فتعرض مجلدات‬
‫تلك الوحدة في قائمة المجلدات ‪ ،‬نختار المجلد )بنقرتين( فتعرض ملفات ذلك‬
‫المجلد )من نوع ‪ (jpg‬في مستعرض الملفات ‪ ،‬ثم نختار أي ملف )نقرة واحدة(‬
‫فيتم عرض الصورة المخزونة داخل الملفا في صندوق الصورة‪.‬‬
‫مـلحظـة ‪ :‬أن أضافة الرمز "\" في حدث النقر يعتبر ضروري اذا كان ملف‬
‫الصورة داخل مجلد ولكنه غير ضروري ويؤدي الى ظهور عبارة خظأ عند وجود‬
‫الملف على جذر وحدة الخزن‪.‬‬
‫مثـال)‪ : (14‬أستخدم الطريقة ‪ PaintPicture‬في أستنساخ وقلب الصورة حسب‬
‫طلب المستخدم أصمم الشكل )‪.(28-3‬‬

‫الشكل )‪.(28-3‬‬
‫التصميم ‪ :‬نكون مشروع جديد ونحدد عنوان النموذج ونضيف الكائنات التية‪:‬‬
‫• صندوقي صورقي بالسماء ‪ PicSrc‬و ‪.PicTar‬‬
‫• أربعة أزرار أوامر بالسماء ‪ CmdCopy‬و ‪ CmdHor‬و ‪ CmdVer‬و‬
‫‪ CmdHorVer‬ونحدد عناوينها كما موضح على الشكل‪.‬‬
‫• دللة باسم ‪ Label1‬وموقعها بين الصورتين‪.‬‬
‫الشفرة ‪ :‬ندخل شفرات أزرار الوامر الربعة وكما يلي‪:‬‬
‫)(‪Private Sub CmdCopy_Click‬‬

‫‪13‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪3‬‬
‫هاني عبد الحسين هادي‬

PicTar.PaintPicture PicSrc.Picture, 0, 0, PicTar.Width, PicTar.Height, _


0, 0, PicSrc.Width, PicSrc.Height, vbSrcCopy
Label1.Caption = "Copy"
End Sub
Private Sub CmdHor_Click()
PicTar.PaintPicture PicSrc.Picture, 0, 0, PicTar.Width, PicTar.Height, _
PicSrc.Width, 0, -PicSrc.Width, PicSrc.Height, vbSrcCopy
Label1.Caption = "Flip Horizontal"
End Sub
Private Sub CmdHorVer_Click()
PicTar.PaintPicture PicSrc.Picture, 0, 0, PicTar.Width, PicTar.Height, _
PicSrc.Width, PicSrc.Height, -PicSrc.Width, -PicSrc.Height, vbSrcCopy
Label1.Caption = "Flip Horizontal and Vertical"
End Sub
Private Sub CmdVer_Click()
PicTar.PaintPicture PicSrc.Picture, 0, 0, PicTar.Width, PicTar.Height, _
0, PicSrc.Height, PicSrc.Width, -PicSrc.Height, vbSrcCopy
Label1.Caption = "Flip Vertical"
End Sub
: ‫ملحظـات‬
‫( أو اهماله يؤدي الى‬vbSrcCopy ‫ )بالقيمة‬Opcade ‫• أن استخدام المتغير‬
.‫نفس النتائج‬
‫ عند أستخدان الطريقة‬Image ‫ بالصفة‬Picture ‫• يمكن أستبدال الصفة‬
.PaintPicture
‫• أن الرمز "_" في نهاية أي سطر يعني أن الذي يليه هو تكملة لذلك‬
.‫السطر‬
Image ‫ الصورة الثابتة‬5-16
‫يتشابه هذا الكائن مــع صــندوق الصــورة فــي أمكانيــة عــرض الصــور ولكنــه ل‬
‫ ويفضــل أســتخدام هــذا الكــائن أذا كــان المطلــوب هــو‬، ‫يمتلك المكانيات الخرى‬
.‫عرض الصور فقط لنه يستهلك جزء يسير من الذاكرة‬

13 d_pro2001@yahoo.com 07705853496
4
‫هاني عبد الحسين هادي‬

‫الصفات‬
‫لهذا الكائن صفات قليلة مقارنة بصندوق الصورة ومن الصفات المتشابهة بينهما‬
‫هي ‪ Picture ، DragIcon ، Visible :‬و ‪ DragMode‬وغيرها وبفتقر هذا الكائن لبعض‬
‫الصفات مثل ‪ Image‬و ‪ AutoRedraw‬وكذلك ‪ AutoSize‬وأهم صفة تميز هذا الكائن‬
‫عن غيره هي صفة ‪) Stretch‬تأخذ قيمة ‪ False‬أو ‪ (True‬والتي تؤدي الى تصغير أو‬
‫تكبير الصورة لكي تتلئم مع حجم الكائن‪ .‬يتذكر الطلبة بأن صفة ‪ AutoSize‬لصندوق‬
‫الصورة تؤدي الى تصغير أو تكبير حجم الصندوق ليتلئم مع حجم الصورة وليس‬
‫بالعكس كما في صفة ‪.Stretch‬‬
‫الحداث والطرق‬
‫للصورة الثابتة عدة أحداث وطرق ومن أبرز أحداثه هي ‪Click ، DblClick ، :‬‬
‫‪ DragDrop‬و ‪ MouseDown‬والخير ينفذ عند نقر الفأرة سواء بالزر اليسر أو اليمن‪.‬‬
‫أما طرقه فهي قليلة مثل طريقتي السحب ‪ Drag‬والحركة ‪.Move‬‬
‫مثـال)‪ : (15‬المطلوب تصميم الشكل )‪ (29-3‬والذي يحتوي على ثلث كائنات‬
‫من نوع الصورة الثابتة ويسمح المشروع بتبادل مواقع الصور من خلل عملية‬
‫السحب‪.‬‬

‫الشكل )‪(29-3‬‬
‫التصميم ‪ :‬نكون مشروع جديد وندخل عنوان النموذج ونضيف له ثلث كائنات‬
‫من نوع الصور الثابتة ونحدد لها الصفات التية‪:‬‬
‫• في صفة ‪ Picture‬نضيف صورة لكل منها ويمكن للطالب أن يختار أية‬
‫صورة مخزونة على وحدات الخزن في الحاسوب‪.‬‬
‫• نجعل صفة ‪ DragMode‬لكل منها مساوية لـ ‪.Manual-0‬‬
‫• في صفة ‪ DragIcon‬نختار ملف صورة بالمتداد ‪ ico‬يمثل شكل المؤشر‬
‫عند عملية السحب‬
‫الشفرة ‪ :‬نكتب شفرات الكائنات وكما يلي‬
‫)‪Private Sub Img1_DragDrop(Source As Control, X As Single, Y As Single‬‬

‫‪13‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪5‬‬
‫هاني عبد الحسين هادي‬

Img4.Picture = Img1.Picture
Img1.Picture = Source.Picture
Source.Picture = Img4.Picture
End Sub
Private Sub Img1_MouseDown(Button As Integer, Shift As Integer, X As Single,
Y As Single)
Img1.Drag 1
End Sub
Private Sub Img2_DragDrop(Source As Control, X As Single, Y As Single)
Img4.Picture = Img2.Picture
Img2.Picture = Source.Picture
Source.Picture = Img4.Picture
End Sub
Private Sub Img2_MouseDown(Button As Integer, Shift As Integer, X As Single,
Y As Single)
Img2.Drag 1
End Sub
Private Sub Img3_DragDrop(Source As Control, X As Single, Y As Single)
Img4.Picture = Img3.Picture
Img3.Picture = Source.Picture
Source.Picture = Img4.Picture
End Sub
Private Sub Img3_MouseDown(Button As Integer, Shift As Integer, X As Single,
Y As Single)
Img3.Drag 1
End Sub
‫ لبدء التنفيذ ونقوم بسحب أية صورة من كائن الى‬F5 ‫ نضغط المفتاح‬: ‫التنفيذ‬
‫أخرى لستبدال الصور بين الكائنات ونلحظ تغير شكل المؤشر أثناء عملية‬
.‫السحب‬

13 d_pro2001@yahoo.com 07705853496
6
‫هاني عبد الحسين هادي‬

‫ملحظـات‪:‬‬
‫• أن مفتاح العمل لها المشروع هي قيمة الصفة ‪ DragMode‬ولقد جعلناها‬
‫عن قصد في مرحلة التصميم غير تلقائية لنتعلم أستخدام طريقة ‪Drag‬‬
‫والتي توضع داخل الحدث ‪ MouseDown‬ويجب وضع الرقم ‪ 1‬بعد الطريقة‬
‫لتحويل عملية السحب الى تلقائية )أي السماح بعملية السحب(‪.‬‬
‫• أذا جعلنا صفة ‪ DragMode‬مساوية لـ ‪ Auomatic-1‬فأننا سوف لن نحتاج‬
‫لحدث ‪ MouseDown‬للكائنات الثلثة‪.‬‬
‫• يأخذ الحدث ‪ MouseDown‬ثلث متغيرات هي‪:‬‬
‫‪ : Button ‬تكون قيمته ‪ 1‬عند أستخدام الزر اليسر و ‪ 2‬للزر‬
‫اليمن و ‪ 4‬للزر الوسط‪.‬‬
‫‪ : Shift ‬يأخذ هذا المتغير القيمة ‪ 1‬عند ضغط مفتاح ‪ Shift‬والقيمة‬
‫‪ 2‬عند ضغط مفتاح ‪ Ctrl‬والقيمة ‪ 4‬عند ضغط مفتاح ‪.Alt‬‬

‫أسئلة الفصل‬
‫سؤال ‪ : 1‬كون مشروع قياسي فيه صندوق مركب فارغ وزري خيارات ‪ ،‬عند أختيار‬
‫الزر الول يمليء الصندوق بأسماء دول من قارة أسيا وعند أخنيار الزر الثاني‬
‫يمليء بأسماء دول من قارة أفريقيا‪ .‬أستخدم الحدث ‪.DropDown‬‬
‫سؤال ‪ : 2‬صمم الشكل التي والذي يحتوي على ثلث أشرطة تمرير تمثل اللوان‬
‫)الحمر والخضر والزرق( وأجعل قيمة ‪ Min‬و ‪ Max‬لهذه الشــرطة هــي ‪ 0‬و ‪255‬‬
‫وفي أعلى الشكل يوضع أطار وبداخله ثلث دللت لعرض قيم اللوان أما اللــوان‬
‫فتعرض داخل الطار ‪ ،‬أستخدم دالة ‪ .RGB‬يلحظ الطلبة أن قيم اللوان عنــد بــدء‬
‫التشغيل هي ‪ 255‬والتي تعطي اللون البيض‪.‬‬

‫‪13‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪7‬‬
‫هاني عبد الحسين هادي‬

‫سؤال ‪ : 3‬أعد حل مثال صندوق الصورة ‪ ،‬الشكل )‪ ، (28-3‬بأبقاء صفة ‪ Pattern‬على‬


‫القيمة الفتراضية وأضافة صندوق قائمة منسدلة يحتوي على العناصر *‪ bmp.‬و *‪jpg.‬‬
‫و *‪ gif.‬يقوم المستخدم بفتح القائمة المنسدلة والختيار منها فتعرض أسماء‬
‫الملفات من ذلك النوع ثم تعرض صورة الملف المختار في صندوق الصورة‪.‬‬
‫سؤال ‪ : 4‬أعد حل المثال الثاني الخاص بمستويات تعريف المعطيات بحيث يسمح‬
‫للمستخدم بثلث محاولت لدخال كلمة السر وفي حالة عدم تحقق صحة كلمة السر‬
‫يتم غلق النموذج الثاني ويعرض النموذج الول‪.‬‬
‫سؤال ‪ : 5‬صمم نموذج فيه صندوقي صورة فارغين ‪ ،‬يسمح المشروع للمستخدم‬
‫بالنقر داخل الصندوق الذي على اليسار لرسم دوائر صغيرة بألوان مختلفة‬
‫)تضاف دائرة واحدة عند كل عملية( وعند النقر داخل الصندوق الثاني يستنسخ‬
‫كل ما موجود داخل الصندوق الول الى الصندوق الثاني ‪ ،‬أنظر للشكل التي‪:‬‬

‫سؤال ‪ : 6‬كون مشروع قياسي يحتوي على نموذج واحد فيه صندوقي قائمة وأملىء‬
‫الذي على اليسار بعناصر تمثل بعض مكونات الحاسوب كما موضح بالشكل أدناه ‪،‬‬
‫المشروع يسمح للمستخدم بنقل العنصر الى الصندوق الثاني عند النقر عليه مع‬

‫‪13‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪8‬‬
‫هاني عبد الحسين هادي‬

‫الضغط على مفتاح ‪ Shift‬ويسمح بأستنساخه عند النقر عليه والضغط على مفتاح‬
‫‪.Ctrl‬‬

‫سؤال ‪ : 7‬كون النموذج التي وفيه صندوق نص وثلث أزرار أحدهما لضافة رسالة‬
‫ترحيب والخر لضافة التاريخ )من خلل الدالة ‪ (Date‬والخير لمسح ما مكتوب داخل‬
‫الصندوق ‪ ،‬أجعل زر المسح غير فعال عندما يكون صندوق النص فارغ ويتحول الى‬
‫فعال عند أضافة الرسالة أو التاريخ‪.‬‬

‫سؤال ‪ : 8‬كون مشروع فيه نموذجين الول فيه صندوق نص وزري أوامر ‪ ،‬صندوق‬
‫النص لدخال أسمك وزر للغلق وزر للنتقال للنموذج الثاني )هذا الزر ل يكون فعال‬
‫أل بعد أدخال السم( والنموذج الثاني فيه صندوق نص لعرض رسالة ترحيب للسم‬
‫الذي أدخل في النموذج الول وزر للرجوع للنموذج الول‪.‬‬

‫سؤال ‪ : 9‬كون مشروع من نموذج واحد فيه زري أوامر أحدهما للغلق والخر لبدء‬
‫تشغيل المشروع والفكرة هي أدخال أسماء وأعمار عشرة طلب والتأكد من أدخال‬
‫متغير رمزي عند أدخال السم وكذلك التأكد من أدخال متغير رقمي عند أدخال العمر‬

‫‪13‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪9‬‬
‫هاني عبد الحسين هادي‬

‫)أي ل يسمح المشروع بأدخال رقم بدل السم أو أسم بدل العمر( وتتم طباعة‬
‫السماء والعمار على النموذج بعد أدخالها والتأكد من صحتها‪.‬‬

‫سؤال ‪ : 10‬صمم نموذج فيه كائنين هما التوقيت والصورة الثابتة ‪ ،‬أختر صورة‬
‫بالمتداد ‪ ico‬للصورة الثابتة وأستخدم كائن التوقيت لتحريك الصورة داخل النموذج‪.‬‬

‫‪14‬‬ ‫‪d_pro2001@yahoo.com‬‬ ‫‪07705853496‬‬


‫‪0‬‬

You might also like