دروس الاستاذ خالد المسيهيج لتعليم الفيجويل

    • عمليات نسخ النصوص إلى الحافظة ولصقها - (30)

      سنتناول في هذه الحلقة وظيفتين من الوظائف الهامة وهما وظيفتا نسخ ولصق النصوص، وهذه الوظائف دائماً ما نشاهدها في جميع البرامج التي تعتمد على عملية الإدخال من قبل المستخدم، وتعتمد فكرتهما على الاحتفاظ بمادة النص في الذاكرة المؤقتة للكمبيوتر في ما يسمى بالحافظة Clipboard.
      وهذه الوظائف تعتمد على دوال جاهزة من دوال فيجوال بيسك، وسنبين ذلك من خلال المثال التالي.
      تطبيق :
      نريد إنشاء برنامج مكون من مربعي نص، وزري أوامر، بحيث نجعل مربع النص الأولText1 هو مصدر النص الذي سيتم النسخ منه، بينما مربع النص الثانيText2 هو الوجهة والذي سيكون المساحة التي سيلصق بها النص المنسوخ، وزر الأمر الأول Command1 نخصصه لتنفيذ عملية النسخ، والثاني Command2 سيختص بإجراء عملية اللصق. وسيكون الكود للعمليتين على النحو المبين بالشكل رقم (1) .




      لاحظ أنه في الجزء الأول من الكود (كود النسخ) جاءت الدالة على هيئة SetText بمعنى تثبيت النص في الذاكرة، بينما الثاني GetText بمعنى استحضار النص المحفوظ بالذاكرة.



      الآن سنجرب ونكتب نص (السلام عليكم ورحمة الله وبركاته) في مربع النص الأول وننفذ عملية النسخ، ثم نقوم بلصقه في مربع النص الثاني .

    • عمليات نسخ الصور إلى الحافظة ولصقها - (31)

      في لقائنا السابق تعرفنا على عملية نسخ النصوص ولصقها، وفي هذه الحلقة سنتعلم عملية نسخ الصور ولصقها، وكذلك عملية تنظيف الحافظة Clipboard من أي مواد محفوظة بها.
      وهذه الوظائف أيضاً كسابقتها تعتمد على الدوال جاهزة تسمى دوال الحافظة، وسنبين ذلك من خلال تطبيقنا القادم.
      تطبيق :
      نريد إنشاء برنامج مكون من صندوق صورةPicture1، وثلاثة أزرار أوامر، ومربع صورةImage1 بحيث نجعل صندوق الصورةPicture1 هو المصدر الذي سيتم النسخ منه ، بينما مربع الصورة الثانيImage1 هو الوجهة التي سيلصق بها النص المنسوخ وقد تعمدت أن أجعله مختلفاً عن المصدر لتوضيح أن العملية متعددة الاستخدامات وتفيد في أكثر من مكان، أما الأزرار فالأولCommand1 سنخصصه لتنفيذ عملية النسخ، والثانيCommand2 سيختص بإجراء عملية اللصق. أما الزر الثالث Command3 فهو لتفريغ الحافظة وتنظيفها من أي مواد تم نسخها إليها في السابق . وسيصبح كود العمليات على النحو المبين بالشكل رقم (1) .



      والآن سنجري عملية النسخ للصورة الموجودة في صندوق الصورة بالضغط على زر نسخ، ثم نقوم بلصقها في مربع الصورة من خلال الضغط على زر لصق .



      وبالمناسبة لو جربت بعد إجراء النسخ وفتحت برنامج الرسام واستدعيت الصورة من خلال قائمة تحرير ومن ثم لصق ستجد أن الصورة موجودة وجاهزة للاستخدام في أي مكان. ونلاحظ أن الكود الثالث يفهم منه أنه خاص بالتنظيف Clear ولو استخدمته لقام بتنظيف الذاكرة تماماً من أي مواد سبق حفظها سواء من هذا البرنامج أو أي برنامج آخر.

    • (إضافة عناصر تحكم OCX) - (32)

      تعد لغة الفجوال بيسك من اللغات المرنة، إذ إنه يسمح للمبرمج بالاستفادة من بعض الأدوات الجاهزة والتي يطلق عليها مصطلح (عناصر التحكم OCX) والتي تصنع لتسهيل عملية البرمجة، خصوصاً وأن بعض الأكواد يتكرر استخدامها بشكل مستمر، مثل صناديق الحوار، وشبكات الجداول، وأدوات الاتصال وغيرها .. وهي تضاف إلى الأدوات الأساسية Components وهي الواقعة يسار البرنامج والتي دائماً نستدعي منها مربعات النصوص والأزرار وغيرها، فكيف إذاً تتم عملية الإضافة؟


      اضغط بزر الماوس الأيمن في أي منطقة فارغة من مستطيل الأدوات الأساسية سيظهر لك قائمة منسدلة صغيرة اختر منها Components وهي المحاطة باللون الداكن في الصورة رقم (1) حيث سينقلك ذلك إلى مربع يضم أغلب الأدوات المتوفرة كما هو ظاهر من الصورة (2) حيث أن بإمكان المبرمج إضافة أدوات جديدة.



      وسنتعرض لوصف ذلك بشيء من التفصيل، ففي الصورة (2) نجد ثلاث طبقات أو ما تسمى بألسنة التبويب الأولى منها Controls وهي خاصة بالأدوات ذات الامتداد ocx ويمكن إضافة ما تشاء من أدوات جديدة من خلال الضغط على زر استعراض Browse ومن ثم تحديد المكان واختيار الأداة التي تريد، كما أنه في حالة الضغط على المربع الصغير Selected Items Only لا يتم عرض سوى ما تم اختياره فقط من أدوات وإخفاء الباقي، وفي الطبقة الثانية Designers أي المصممات، وهي مكتبات ربط ديناميكية وتحمل الامتداد dll وتختص هذه الطبقة في أدوات التصميم. أما الطبقة الثالثة فهي Insertable Objects وهي العناصر القابلة للإدراج. قد يتبادر لذهن القارئ سؤال : هل هناك سلبيات لاستخدام هذه الأدوات؟ بالطبع نعم، فالأدوات تؤدي إلى زيادة حجم البرنامج وقد لا يتم إرفاقها أثناء عملية التجهيز في ملف Installation فتظهر رسائل الخطأ عند استدعاء الوظيفة التي تعتمد على هذه الأداة وقد لا يعمل البرنامج نهائياً إن كان البرنامج يعتمد بشكل أساسي على هذه الأداة المفقودة.
      وسنتعرف في الدروس القادمة على استخدامات الأدوات الإضافية

    • التعامل مـع صناديق الحوار - (33)

      كنا قد بدأنا في الدرس الماضي طريقة إضافة عناصر تحكم ocx إضافية إلى مشروعات فيجوال بيسك، وهذا اللقاء يعد امتداداً لما سبق حيث سنتعلم إحدى أهم الأدوات التي يحتاجها المبرمج في أغلب برامجه بشكل عام.
      فمثلاً من المؤكد أنه قد مر بك مرات ومرات العديد من البرامج التي تعتمد على خاصية (فتح) ملف من ملفاتها، ومنها الفيجوال بيسك نفسه، جرب تستخدم قائمة ملف ستجد أن العملية محصورة فقط على *.vbp; *.mak; *.vbg وهي الملفات التي يتعامل معها البرنامج ولو جربت في برنامج الوورد ستجد أن عملية الفتح ستشمل فقط البرامج التي يتعامل معها وهكذا ، ويضاف إليها خاصية عرض جميع الملفات، هذه العملية المحددة لنوعية معينة من الملفات تسمى عوامل التصفية أو الفلترة ، وتعتمد بشكل أساسي على أداة CommonDialog والخاصة بصناديق الحوار، ويتم استدعاؤها بنفس الطريقة التي أشرنا إليها في الحلقة 32وتحديداً من عناصر التحكم الأساسية. إذن نحن بحاجة إلى مربع صورة Picture1 وزر أمر Command1 لاستدعاء صندوق حوار (فتح) الذي يفترض أننا وضعناه على سطح النموذج Form1 ثم يجري تفعيل عامل التصفية لصندوق الحوار باستخدام الدالة CommonDialog1.Filter بعد ذلك تحدد الملفات المطلوب التعامل معها من خلال برنامجك على النحو المبين



      بالشكل رقم (1) ثم تطلب من البرنامج أن يعرض لك صندوق حوار فتح باستخدام الدالة CommonDialog1.ShowOpen ونحن في برنامجنا هذا نريد من صندوق الحوار أن لا يفتح سوى الصور فقط والمحددة بالفلتر، وبطبيعة الحال يمكنك إضافة ما تريد من الأنساق.


      جرب التشغيل الآن، ستجد أن البرنامج يعمل بشكل جيد حيث لا يفتح سوى الصور فقط، ما لم تقم بتحديد عرض الكل، انظر الشكل (2).

    • (إضافة وإزالة المجلدات)- (34)

      سيكون موضوعنا هذا اليوم حول المجلدات حيث سنتعلم طريقة إنشاء وحذف مجلد، فقد تحتاج لهذه الوظائف في عمليات نقل أو نسخ الملفات (والتي سنتعرف عليها لاحقاً إن شاء الله).
      تطبيق :
      سنحتاج الآن إلى زري أمر، Command1 لإنشاء الدليل، و Command2 لإزالة ذلك الدليل، لكن وكما ذكرنا لن تعرف عمليتي الإنشاء والحذف إلا إذا توجهت إلى محرك C لتجد أن الدليل المسمى Khalid قد أنشئ أو أزيل، وحتى تضمن سلامة التنفيذ يتوجب أن تظهر لك رسالة تخبرك عن نجاح العملية.
      ويجب عليك أن تعرف أين ستضع هذه الرسالة فإذا وضعتها قبل أمر الإنشاء فاعلم بأنه لن يتم التنفيذ إلا بعد أن تضغط زر موافق في الرسالة، وإلا فسيتم الإنشاء بمجرد ضغط زر إنشاء الدليل وستظهر الرسالة بعد ذلك.

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


      وهذه الطريقة يمكنك استخدامها في أي برنامج خصوصاً إذا كنت تريد أن تعرف هل تم تنفيذ مرحلة من مراحله التي حددتها أم لا.
      نجرب الآن إنشاء مجلد اخترنا له اسم Khalid على أن يتم إنشاؤه في محرك الأقراص C .


      لاحظ أنه عند التنفيذ تظهر لك رسالة تنبئك عن نجاح الأمر كما في الشكل رقم (2).


    • التعامل مع الملفات (1)- (35)

      التعامل مع الملفات من استحداث وحذف.
      تطبيق :
      سيكون أول ما نبدأ به تطبيقنا عملية إنشاء ملف نصي، بحيث ترتبط عملية الإنشاء بالتأكد من وجود الملف، فإذا كان الملف موجوداً من السابق تعرض رسالة تفيد بوجود هذا الملف، وإذا لم يكن موجوداً تعرض رسالة تفيد ذلك وتنبئ عن إنشائه. أما عند القيام بحذف الملف تظهر رسالة تتبع هذه العملية تفيد بنجاح الحذف وسنبدأ الآن بالتطبيق فنقوم باستدعاء زري أمر، الأول Command1 لإنشاء ملف نصي، وCommand2 لحذف هذا الملف. وسنقوم ببناء الكود على النحو المبين بالشكل رقم (1).


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

      عند التشغيل وإجراء الإنشاء سيظهر لنا البرنامج كما هو مبين بالشكل رقم (2).


      اختبار (1) :
      لبيانات الحلقة 33 أنشئ برنامجاً مبنياً على عدة خواص منها عرض الخطوط وحجمها وعرض مربع الطباعة وذلك باستخدام أداة صناديق الحوار CommonDialog .

      اختبار (2) :
      قم بعمل برنامجاً يقوم بإنشاء مجلد اسمه Test ثم يقوم بإنشاء ملف نصي اسمه Test.txt داخل ذلك المجلد.

    • التعامل مع الملفات (2)- (36)

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

      تطبيق :

      باستخدام البرنامج الذي عملناه في الحلقة السابقة سننشئ ملفاً اسمه khalid.txt ثم نبدأ في إنشاء برنامجنا الجديد حيث سنحتاج لثلاثة من الأزرار هي على التوالي Command1 لعرض حجم الملف بطباعته داخل الملصق الذي استدعيناه وأسميناه Label1 وزر Command2 لنسخ الملف من مسار الأصلي على قرص C إلى أحد الأقراص المرنة A ، وزر Command3 لنقل الملف بشكل جذري إلى محرك الأقراص A .

      ويمكن الحصول على نسخة من برنامجنا السابق

      بعد أن نتأكد من استدعاء كافة الأدوات المطلوبة نقوم ببناء الكود على النحو المبين بالشكل رقم (1) سواء بالكتابة المباشرة أو بالنقر المزدوج على كل أداة وكتابة كودها على حدة.



      نقوم الآن بتنفيذ البرنامج بأن نحضر قرصاً مرناً ونضعه في محرك الأقراص المرنة، ثم نقوم بالتطبيق حيث سنتأكد من وجود الملف المطلوب نسخه وفي المكان الذي حددناه بالبرنامج.


      اختبار 1 :

      باستخدام الرسائل اجعل حجم الملف يظهر على شكل رسالة بدلاً من استخدام أي أدوات أخرى.

      اختبار 2 :

      باستخدام صندوق الحوار CommonDialog اجعل المستخدم يختار الملف الذي يرغب في نقله، وكذلك يحدد مكان الحفظ .

    • تشغيل التطبيقات (1)– (37)

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

      مثال :

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

      Shell متبوعاً بعلامتي تنصيص يوضع بينهما مسار الملف المراد تشغيله ثم فاصلة يليها إيضاح وضعية البرنامج عند التشغيل . وسيتضح الأمر عند كتابتنا للكود، لكن هناك قائمة كالموضحة في الشكل رقم (1) تظهر لنا بمجرد أن نضع الفاصلة، وفيها ست حالات، هذه الحالات توضح شكل البرنامج عند التشغيل لكل منها قيمة رقمية تعمل عملها .. فالأولى vbHide يعادلها الصفر وتعني إخفاء البرنامج، بينما vbNormalFocus يعادلها الواحد وتقوم بإظهار البرنامج بالحجم الطبيعي مع وضع التركيز على البرنامج، و vbMinimizedFocus يعادلها الرقم إثنين وتقوم بتصغير البرنامج مع التركيز، أما vbMaximizedFocus فتعادل الرقم ثلاثة وهي التي تقوم بتكبير البرنامج إلى الحد الأقصى مع التركيز، ثم يأتي vbNormalNoFocus وتعادل الرقم أربعة حيث تقوم بتشغيل البرنامج لكن تفقده التركيز، وأخيراً vbMinimizeNoFocu وتأخذ الرقم ستة تعرض البرنامج مع التصغير وفقدان التركيز.




      الآن سنجرب تشغيل برنامج المفكرة مع ثلاثة خيارات، بينما نترك الثلاثة الباقية للقارئ الكريم لتنفيذها كاختبار تطبيقي.

      الآن سنقوم باستدعاء ثلاثة أزرار هي Command1 و Command2 و Command حيث تقوم على التوالي بتشغيل المفكرة مع التركيز مرة بالحجم الطبيعي ومرة مكبرة ومرة مصغرة. فيتم بناء الكود على النحو المبين بالشكل رقم (2) .


    • إنشاء القوائم (1) – (38)

      افتح أي تطبيق من تطبيقات مايكروسوفت الآن ستجدها تشتمل على قوائم (ملف، تحرير، عرض، ....) وكل قائمة تتضمن عدد من الوظائف، وأكثر البرامج الأخرى تأخذ نفس الفكرة فهل سألت نفسك يوماًَ ما عن فائدة هذه القوائم؟

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



      بداية نقوم بإنشاء مشروع جديد وليكن Project1 ثم نقوم باستدعاء صانع القوائم من خلال الضغط على الأداة المشار إليها بالشكل رقم (1) ليظهر لنا الشكل رقم (2) حيث نجد أنه


      اختبار 1 :

      باستخدام الرسائل اجعل حجم الملف يظهر على شكل رسالة بدلاً من استخدام أي أدوات أخرى.



      اختبار 2 :

      باستخدام صندوق الحوار CommonDialog اجعل المستخدم يختار الملف الذي يرغب في نقله، وكذلك يحدد مكان الحفظ .


    • إنشاء القوائم (2)– (39)

      كنا قد بدأنا في الحلقة الماضية طريقة إنشاء القوائم المنسدلة وهي التي تكون ظاهرة في أعلى نافذة البرنامج، وفي هذا اللقاء سنتعرف على آلية عملها.

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

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



      بمجرد الضغط على وظيفة خروج ستفتح لنا مساحة نكتب بها كود الخروج وهو المبين بالشكل رقم (2) .



    • كائن الطباعة...– (40)

      درسنا هذا اليوم - وبالرغم من بساطته المتناهية – يعد من الدروس المتقدمة أو التي قلما تجدها في كتاب وهو درس الطباعة .. طباعة أي شيء .. ويعتمد الدرس على كائن Printer حيث تكون صيغة الأمر على النحو التالي :

      Printer.print X

      حيث X يعبر عن أي قيمة تريد إرسالها إلى الطابعة . ولعلك تلاحظ معي أنه بمجرد كتابة كلمة Printer وإتباعها بنقطة ستظهر لك قائمة منبثقة تتضمن العديد من الوظائف أو التخصيصات كالتي تبدو بالشكل رقم (1).



      مثال :

      عند الرغبة في طباعة محتوى مربع نص فإنك تكتب أمر الطباعة وتستبدل الحرف X في الكود النموذجي بما نريد طباعته، فإن أردنا طباعة نص وضعناه في المكان المحدد بين علامتي تنصيص كما هو مبين في مثالنا الحالي وكما يوضحه الشكل رقم (2) .



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

    • قوائم العناصر Lists ء– (41)

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

      مثال :

      نريد أن ننشئ قائمة للأسماء بحيث يتاح للمستخدم أن يضيف ما يشاء من أسماء وأن يحذف ما يريد منها، كذلك حساب عدد العناصر المدخلة ، فنقوم باستدعاء أداة صندوق القوائم ListBox والمسماة List1 وكذلك مربع نص Text1 ليكون مكاناً يظهر فيه عدد العناصر ، وثلاثة أزرار هي Command1 لإضافة الأسماء، وCommand2 لإظهار عدد العناصر المدخلة، و Command3 لاستبعاد بعض أو كل العناصر بطريقة الواحد واحد .. فنقوم بإنشاء صندوق لإدخال القيم نطلب من خلاله أن يقوم المستخدم بإدخال الاسم حيث يقوم بالإضافة إلى القائمة عن طريق AddItem .. كما يظهر لك من الشكل رقم (1) .



      ولإظهار عدد العناصر نعتمد على ListCount وللحذف RemoveItem .

      ننفذ الآن ونقوم بإدخال عدد من الأسماء ثم نظهر عددها ، بعد ذلك نجرب عملية الحذف. أنظر الشكل (2) .



    • قواعد البياناتData Base (1)ا– (42)

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







      مراحل تطور قواعد البيانات :

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

      مكونات قواعد البيانات :

      عادة ما تشتمل قاعدة البيانات على جدول لحفظ البيانات ونموذج لعرضها، واستعلام لإجراء البحث والاستعلام، وتقرير يوثق البيانات المطلوبة ويظهرها على هيئة ورق مطبوع.

      برامج إدارة قواعد البيانات :

      توجد العديد من البرامج التي تستخدم لإدارة وتصميم قواعد البيانات، ومن أشهرها وأوسعها انتشاراً برنامج مايكروسوفت أكسس MS Access و مايكروسوفت فوكس برو MS Fox Pro هذا بالنسبة للأفراد والمنشآت الصغيرة، بينما هناك برامج متخصصة في توليد قواعد البيانات الضخمة والتطبيقات المرافقة لها ومن أشهر هذه البرامج أوراكل Oracle .

      هل يمكن أن نعمل برامج قواعد بيانات باستخدام فيجوال بيسك؟

      بكل تأكيد وهذا سيكون موضوع دروسنا القادمة بإذن الله تعالى .

    • قواعد البيانات (Data Base (2ا– (43)



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

      بداية عند الرغبة في إنشاء قاعدة بيانات جديدة هناك طريقتين لذلك، إما أن تقوم بإنشاء قاعدة البيانات باستخدام برنامج قواعد البيانات الخارجي كأن يكون باستخدام MS Access مثلاً أو أن يتم ذلك باستخدام مدير قواعد البيانات الداخلي المرفق بفيجوال بيسك، ويتم عن طريق قائمة Add-Ins ومن ثم اختيار Visual Data Manager كما يظهر لنا من الشكل (1)



      حيث يظهر لنا برنامج مستقل مكون من أزرار وقوائم وهو الذي يوضحه الشكل رقم (2) ومن حسن الحظ أن هذا البرنامج بسيط وخال من أي تعقيدات وسنكتفي في هذا اللقاء بالتعرف على وظيفة إنشاء قاعدة بيانات من قائمة ملف.



      عندما نفتح قائمة ملف File ومنه New حيث سنجد أن البرنامج قد اقترح لنا عدد من أنواع قواعد البيانات هي : Microsoft Access و Dbase و FoxPro و Paradox و محرك ODBC و ملف نصي Text.

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

    • قواعد البيانات (Data Base (3 ا– (44)

      أعتقد أننا قد غطينا الجوانب النظرية ولم يعد لدينا ما نضيفه في ذلك الجانب، لذلك سبندأ بالتطبيق العملي من خلال إنشاء برنامج يعمل ضمن بيئة فيجوال بيسك وبالتكامل مع قاعدة بيانات من مايكروسوفت أكسس لغرض حفظ عناوين الأصدقاء. والمطلوب : استدعاء معالج قواعد البيانات الذي تحدثنا عنه في الحلقة الماضية، ثم نختار من قائمة File إنشاء جديد New ومنه access سواء أكان الإصدار الثاني أو السابع . حيث سيطالبنا بمكان نحفظ به القاعدة، ويفضل أن نبدأ في إنشاء مجلد جديد نخصصه لملفات المشروع وليكن (Phone) ونحفظ قاعدة البيانات بنفس الاسم، عندها سيظهر لنا مستطيلين الأول على اليمين وهو خاص بلغة الاستعلام SQL ولن نحتاج للتوقف عنده في دروسنا هذه كونها موجهة للمبتدئين، لكن ما يهمنا هو المستطيل الواقع في اليسار الموضح بالشكل رقم (1)


      حيث نجد أنه يحتوي على كلمة Properties أي خصائص وهي تتضمن كافة خصائص قاعدة البيانات كالمسار، أو محرك الاتصال، وليست هناك ضرورة للتعديل فيها (في هذه المرحلة على الأقل) فكل ما علينا هو أن نضغط بزر الفأرة الأيمن في أي منطقة خالية كما توضحه الصورة رقم (1) التي أشرنا إليها حيث ستظهر لنا قائمة منبثقة نختار منها بناء جدول جديد New Table ليظهر لنا معالج الجداول وهو عموماً بسيط وأوامره محدودة (شكل 2)


      كل ما عليك أن تقوم بكتابة اسم الجدول وتلاحظ أنا أسميناه phone ثم ضغنا على زر Add Field بمعنى إضافة حقل فتظهر لنا الشاشة التي تبدو في المقدمة موضحاً بها اسم الحقل Name والتي أشرنا إليه بالحرف اللاتيني A يليه نوع الحقل B نصي أو رقمي أو نعم ولا ... وعادة ما يقوم به المبرمجون هو أن يختار النص ثم يتحكم بالإدخال عن طريق كود برمجي، والحرف C يشير للمنطقة التي يتاح لك من خلالها تحديد طول الحقل، D خيارات الحقل من حيث الثبات أو التغير، ومدى المطالبة بقيمة للحقل. وبعد أن ننتهي من كتابة الحقل نضغط زر موافق ثم يختفي هذا المعالج، وبعده نقوم ببناء الجدول بالزر Build the Table.

    • قواعد البيانات (Data Base (4ا– (45)

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

      معالج قواعد البيانات في قائمة أدوات Utility واسمه Data Form Designer المحاط بالمستطيل الأزرق بالشكل رقم (1)



      حيث يظهر لنا مصمم النوافذ وهو المبين بالشكل رقم (2)



      وقد قسمناه إلى ستة أقسام كل قسم يشير إليه حرف لاتيني، فالقسم A هذا يكتب في جزئه الأول اسم النافذة Form Name بدون أن نكتب امتداد له وهذا ما تعنيه (w/o Extension)، وفي الأسفل لسان التبويب يوصلنا إلى قاعدة البيانات مصدر السجلات RecordSource حيث بمجرد الضغط عليه يظهر لك قاعدة البيانات التي قمت بإنشائها من قبل وهي Phone التي يؤدي اختيارها إلى ظهور الحقول التي أنشئت بها وهي التي يشير إليها الحرف B والمطلوب منك أثناء التصميم اختيار الحقول التي ترغب في ظهورها بالنافذة عن طريق المجموعة C التي تتيح لك (على التوالي) اختيار حقل حقل أو الحقول جميعها أو استبعاد حقل أو استبعاد الحقول جميعها، وعند الاختيار ستنتقل الحقول من المنطقة B إلى المنطقة D ويمكنك التحكم بترتيبها عن طريق الأزرار التي يشير إليها الحرف E ثم ضغط زر البناء Build the Form ثم إغلاق Close المشار إليهما بالحرف F وبذلك يكون البرنامج جاهزاً ولا يبقى سوى مسألة التنسيق وتعريب الأدوات .

    • قواعد البيانات (Data Base (5 ا– (46)

      تعلمنا في اللقاء السابق كيفية استخدام مصمم النوافذ في تشغيل قواعد البيانات، وفي هذه الحلقة سنتعلم كيفية الربط اليدوي لحقول البيانات بأداة قواعد البيانات وهي التي يستخدمها المبرمجون المحترفون نظراً لما تتيحه من مرونة وتحكم شديدين في المشروع، والفكرة بسيطة، فبعد أن تقوم بتصميم قاعدة البيانات والجدول كما اتفقنا تقوم باستدعاء أداة قواعد البيانات عن طريق النقر المزدوج على الزر المشار إليه بالحرف اللاتيني A في الشكل رقم (1) لتبدو كما هو ظاهر أمام الحرف اللاتيني B .



      بعد ذلك تقوم بإجراء عملية الربط بأن تضع التركيز على أداة قواعد البيانات السابق ذكرها ثم تذهب إلى مربع الخصائص الذي يشير له الحرف اللاتيني C لتحدد اسم قاعدة البيانات في الخانة DatabaseName ومصدر السجلات (الجدول) في الخانة RecordSource ، وبعد أن تجري عملية الربط تقوم باستدعاء ملفات نص بعدد الحقول ثم تضع التركيز على كل منها وتقوم بربطه كما يتضح لك من الشكل رقم (2) حيث أنه قد تم ربط مربع النص المشار له


      بالحرف E بحقل الاسم كما يتضح من الشكل السابق أمام الحرف F وهذا يتم بعد أن يتم تعريف مصدر البيانات بأنها Data1 ونفس الحال يتم مع مربعات النصوص لبقية الحقول.

      أما أوامر التحرير للبيانات من إضافة وتعديل وخلافه فهي لا تختلف أبداً عنها في الطريقة التي تعرضنا لها في الحلقة الماضية لذلك لا فائدة من تكرارها.

    • قواعد البيانات (Data Base (6 ا– (47)

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




      إذا فما المخرج؟! المخرج يكون بوضع كود يُعرّف قاعدة البيانات بمسار البرنامج نفسه، بمعنى أنك تعرف قاعدة البيانات من داخل المجلد دون تحديد محرك القرص فيقوم البرنامج بالبحث الداخلي في المجلد فقط وبذلك لن يتغير طالما أن المجلد ينقل من مكان لآخر حتى وإن تم تغيير اسم المجلد. فما هي صيغة الكود؟

      في مثالنا السابق نود أن نجعل برنامج دليل الهاتف يتعرف على قاعدة البيانات فنضع كود التعريف (كما يظهر ذلك الشكل رقم (2) )



      وتفسير الكود : اسم قاعدة البيانات هو داخل مجلد البرنامج (ونحدد اسم قاعدة البيانات) بين علامتي تنصيص مسبوقاً بشرطة المسار المائلة

    • استخدام الأداة MSFlexGrid ا– (48)

      درسنا لهذا اليوم والدرس القادم يعد من الدروس المتقدمة في قواعد البيانات، وهو استخدام أداة الشبكة MSFlexGrid والتي تعرض البيانات على نحو جدولي وهذه الطريقة يفضلها الكثير من المستخدمين. إذاً أول ما يتوجب علينا فعله هو استدعاء هذه الأداة عن طريق الضغط بزر الفأرة الأيمن في أي مكان من مربع الأدوات الذي يقع على يسار النافذة، ثم اختيار Components وبعد ذلك تنشيط أداة MSFlexGrid كما يظهر من الشكل رقم (1)


      حيث ستظهر الأداة في مربع الأدوات بنفس الصورة التي تظهر أسفل الرقم (1) وكل ما عليك لاستدعائها هو النقر عليها بشكل مزدوج أو بطريقة السحب والإفلات، ومن ثم التحكم بمكانها وحجمها، يلي ذلك إجراء الربط لها بقاعدة البيانات من خلال تحديد أداة قواعد التي سترتبط بها في مربع الخصائص حيث ستجد DataSource وأداة قاعدة البيانات التي ستظهر لك هي وبعد التشغيل ستجد أن جميع بياناتك قد أدرجت بشكل تلقائي في أداة MSFlexGrid1 وظهرت البيانات على نحو مجدول. كما يبين ذلك الشكل رقم (2) .



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

    • استخدام الأداة (MSFlexGrid (2 ا– (49)

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

      Data1.Refresh

      نأتي الآن إلى عملية التعديل، ففي مثالنا السابق رأينا أن هناك صف وعمود لونهما مميزاً عن بقية أجزاء الجدول، لذلك فإن ترتيب كل منهما يأخذ الرقم صفر فيمكن الاستفادة من الصف (صفر) لتسمية رؤوس الحقول، والعمود (صفر) يفيدنا لو أردنا أن نضع خانة للتسلسل, وسنبدأ بالتسمية، لكن كيف سنميز كل خانة عن غيرها؟ الحل بسيط قبل أن نكتب اسم الحقل نقوم بتعريف خانته قبل كل شيء .. فمثلاً نجد في الصورة أننا عرفنا الخلية التي ستجري تسميتها بذكر ترتيبها، أي أنه عندما أردنا تسمة العمود الأول ذكرنا أن رقمه (1) ثم كتبنا التسمية وهكذا مع بقية الأعمدة. أما تحديد الأحجام فنجد أن الإسم خانته يجب أن تكون كبيرة نسبياً لذلك سنجعله (2500) أما خانة رقم الهاتف ورقم الجوال فيكفي أن نحدد لكل منهما حجم (1500) كما يظهر لنا في الصورة


    • إنشاء كلمات المرور – (الحلقة الأخيرة)

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

      قبل أن نبدأ يجب علينا أن نعرف بعض الجوانب المهمة حول كلمات المرور، فهناك أكثر من طريقة لإنشاء كلمات المرور، الطريقة البدائية وهي التي يضعها المبرمج ويعلن عنها عند التنصيب وهي ثابتة لا تتغير (وهي غير عملية ولا تحقق الغرض الذي أوجدت من أجله كونها متاحة للجميع)، الطريقة الثانية أن تنشئ قاعدة بيانات لكلمات المرور ويصبح التغيير فيها بمثابة تعديل بيانات، ويعاب على هذه الطريقة أيضاً أنها بدائية ويسهل كشفها لذلك لن نتعرض لأي من الطريقتين، لكن طريقتنا الثالثة هي التي يستخدمها كبار المبرمجين والتي تقوم على تسجيل البيانات في ملف الريجستري . الفكرة تقوم على مرحلتين مرحلة إرسال وحفظ، ومرحلة استدعاء، ويفترض بالمبرمج أن يقوم بوضع نافذتين أو إطارين من أجل أن يكون الأول بوابة دخول والثاني للتحكم والتغيير، وأنا جمعت ذلك في نافذة واحدة بإطارين، لكن هذين الإطارين لن يظهران معاً ففي الحالة العامة تكون الشاشة الرئيسية التي تظهر هي البوابة التي تتحكم بإمكانية الدخول لمن يحمل مفتاح الدخول (كلمة المرور) وإذا لم تدخل بيانات فسيفترض البرنامج أن كلمة المرور فارغة ولكن هناك زر يقوم بإخفاء الإطار الرئيسي ويستدعي الإطار الآخر الذي يتيح للمستخدم تغيير كلمة المرور وهو مكون من مربعي نص يجب أن تتطابق الإدخالات بهما فالأول لكلمة المرور الجديدة والثاني تأكيد كلمة لها لضمان كتابتها بالشكل الصحيح. وعندما تتطابق الكلمتين تظهر لك رسالة تنبئك بنجاح العملية وإلا فلن يمكن التغيير حتى لا يقع أحد بخطأ . فإن تم التغيير فإن هذا الإطار سيختفي ويظهر الإطار الأساسي لذلك يوصى أن يوضع الإطاران فوق بعضهما البعض حتى لا يكون الحجم كبيراً وحتى يكون المنظر مقبولاً لكني تركت كل منهما على وضعه لكي تضح لكم طريقة العمل. كما وضعنا شرح الأكواد في نفس الأكواد. أما إخفاء الأحرف واستبدالها بالنجوم أو أي رموز أخرى فهي من خلال خصائص النص الوظيفة PasswordChar الموضحة بالصورة رقم (1)


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

    • أخيراً أنتهيت من وضع الدروس أتمنى لكم الفائدة ، وكما لاحظتم أن الدروس سهلة وخفيفة ومدعومة بملفات تساعدك على تجنب الأخطاء.

      الموضوع مفتوح لملاحظاتكم وتعليقاتكم.

      إلى اللقاء -عت أشرد عنكم فتره مره ثانية |a -
    • طريق الخير كتب:

      شكرا على هذا الشرح الرائع
      أخي الريامي
      عندي سؤال في vb اذا ممكن
      وهو كيف اجعل الكتابة في inputBox من اليمين الى اليسار يعني بالعربي
      ومشكور

      هل تقصدي الكتابة في TextBox
      ~!@q