شرح برنامج الدالفي الدرس الثاني :

Share:
الدرس الثاني :
أسس البرمجة بلغة باسكال في برنامج الدالفي :
مقدمة
كما ذكرنا سابقاً أن البرمجة المرئية تمر بمرحلتين المرحلة الأولى تصميم المشروع والمرحلة الثانية كتابة الإجراءات المناسبة وهذا ما يسمى بالبرمجة المرئية وتسمى أيضاً البرمجة بالأحداث حيث أن كل الإجراءات البرمجية التي تكتب في التطبيق ترتبط بأحداث معينة بمعنى أنه بعد تصميم التطبيق ووضع كل العناصر بالشكل المطلوب على المبرمج اختيار الأحداث المراد برمجتها بإجراءات مناسبة. وفيما يلي أمثلة عن هذه الخطوات من خلال مجموعة من التطبيقات :
التطبيق الأول (كلمة المرور) :  -   
لفتح تطبيق أو مشروع جديد نقوم باستخدام الأمر New ثم Application من قائمة File فنحصل على Form1 جاهز للتصميم وإطار الوحدة Unit Windows باسم Unit1 مرافق للإطار Form1  
.بمجرد الحصول على الإطارين السابقين فإن التطبيق جاهز للتصميم وما عليم سوى أن تحدد خصائص الإطار Form1ثم تضع العناصر أو المكونات Components المناسبة عليه وتقوم بتحديد خصائص كل عنصر.
فمثلاً لتحديد عنوان للإطار Form1 وتغييره من Form1 إلى An Example نقوم بكتابة العنوان الجديد أمام الخاصية Caption .
كما يمكن تغيير أبعاد الإطار باستخدام الماوس وهذه التغييرات المباشرة التي تحدث على الإطار أو على أي عنصر مثل تغير الحجم أو المكان فإن الخصائص التابعة لهذه التغييرات تتغير تلقائياً مثل العرض Width الارتفاع Height .
فكرة التطبيق:
نفترض أن التطبيق يستخدم لعرض صورة خاصة ولكن بعد إدخال كلمة مرور صحيحة بمعنى أن التطبيق يطلب إدخال كلمة مرور لعرض الصورة وإلا يتم إغلاق التطبيق.
الآن لنضع بعض العناصر على الإطار كالآتي :


نلاحظ من الشكل أنه تم وضع العناصر الآتية :
- العنصر Label1
- العنصر Edit1
- العنصرين Button1 و Button2
و كل هذه العناصر توجد في الصفحة Standard من مكتبة المكونات المرئية بالإضافة إلى :
- العنصر Bevel1 ويوجد في الصفحة Additional من مكتبة المكونات المرئية.
نلاحظ أن العناصر السابقة وضعت على الإطار دون أن يتم تغيير أي من خصائصها إلا أن لغة Delphi قد قامت بتحديد بعض خصائصها تلقائياً وذلك بتحديد مكان كل عنصر على الإطار وحجمه وذلك بتحديد الخصائص Left و Top لتحديد المكان و الخاصية Width و Left لتحديد أبعاد كل عنصر.
الخاصية Caption كما نلاحظ تحدد الاسم الظاهري ونلاحظ أن العناصر Form ، Label ، Button لها نفس الخاصية .
ملاحظة:
  تم إضافة الرمز & قبل الحرف Y و الحرف N في خاصية Caption لكلاً من Button1 و Button2 وذلك لجعل الحرفين مسطرين لاستخدامها مع مفتاح Alt أثناء تشغيل التطبيق.
- الخاصية Text للعنصر Edit تعبر عن النص الذي يكتب داخل مربع لنص وهنا في التطبيق السابق تم استبدال Text1 بفراغ ليظهر مربع النص Edit1 خالي.
- الخاصية Password Char للعنصر Edit تستخدم لتحديد الرمز الذي سيظهر بدلاً من أي أحرف أو أرقام عند إدخال كلمة المرور .وهنا تم تحديد علامة النجمة ( * ) لتظهر محل أي أحرف أو أرقام والنجمة هي الرمز الأشهر استخداماً في هذه الحالة.
الآن نحتاج إلى إطار جديد لوضع الصورة عليه وبالتالي يتم إضافة إطار جديد بنقر زر السرعة الخاصة بإضافة إطار جديد أو باستخدام الأمر New ثم Form من قائمة File . سيكون اسم الإطار الجديد Form2 لأنه الإطار الثاني في التطبيق.
نقوم بوضع العنصر Image على الإطار الجديد وذلك لكي نضع عليه الصورة ، العنصر Image هو عبارة عن إطار فارغ يتم رسمه على الإطار Form بالحجم المناسب وفي المكان المناسب. كما يظهر في الشكل التالي :
نلاحظ من الشكل أنه تم وضع عنصر Image واسمه الافتراضي هو Image1 والعنصر Button وسوف نقوم بتحديد الخصائص لكل عنصر .
بذلك تنتهي المرحلة الأولى من إنجاز التطبيق وهي مرحلة التصميم وفيما يلي شرح للمرحلة الثانية وهي مرحلة كتابة الإجراءات اللازمة وهي كما يلي :
في الإطار الأول Form1 النقر على الزر Yes يؤدي إلى ظهور الإطار الثاني المحتوي على الصورة في حالة كانت كلمة المرور المدخلة صحيحة وإلا يتم إغلاق التطبيق ككل. أي أن عند تطبيق البرنامج يقوم المستخدم بإدخال كلمة مرور ثم النقر على الزر Yes فيتحقق التطبيق من كلمة المرور فإذا كانت الكلمة المدخلة هي الكلمة المطلوبة يقوم التطبيق بعرض الإطار الذي يحتوي على الصورة وإلا يتم إغلاق التطبيق و في حالة النقر على الزر NO يتم إغلاق التطبيق مباشرة.
في الإطار الثاني Form2 يوجد زر واحد فقط هو Close يستخدم لإغلاق الإطار فقط.
كتابة إجراء النقر على الزر Yes :
لكتابة إجراء النقر على الزر Yes نقوم بنقر الزر نقراً مزدوجاً أو نجعل الزر Yes هو العنصر الحالي و نفتح صفحة الأحداث events الموجودة في نافذة مفتش العناصر Object Inspector أي (نافذة الخصائص والأحداث) ويتم اختيار الحدث OnClick الخاص بالزر Yes وذلك بنقره نقراً مزدوجاً وفي الحالتين سنحصل على الإجراء الخاص بنقر الزر جاهز لكتابة الأسطر البرمجية الخاصة به بين الكلمتين المحجوزتين Begin و End .
ملاحظة :
النقر على أحد العناصر نقراً مزدوجاً يؤدي إلى فتح محرر الإجراءات وتجهيز الإجراء الأكثر شيوعاً بالنسبة للعنصر المختار ، بمعنى أنه إذا أردنا كتابة إجراء غيره ففي هذه الحالة يجب اختياره من قائمة الأحداث الموجودة في نافذة الخصائص والأحداث و المسماة ( Object Inspector ) .
الآن ، نكتب السطر البرمجي التالي بين الكلمتين Begin و end :
If Edit1.text = ‘Hello’ then Form2.Show else close ;
ونلاحظ انه تم استخدام جملة If الشرطية للتحقق من أن الكلمة المدخلة في مربع حوار كلمة المرور مساوية لكلمة المرور وهي هنا Hello فإذا كان قد أدخل المستخدم كلمة المرور صحيحة فإن جملة If الشرطية ستقوم بتطبيق الجملة Form2.Show والتي تعني عرض الإطار الثاني Form2 والذي تم تجهيزه سابقاً و يحتوي على الصورة ، أما إذا كانت الكلمة المدخلة غير صحيحة فإن جملة If الشرطية تقوم بتنفيذ الأمر Close والذي يعني إغلاق الإطار وبالتالي يتم إغلاق البرنامج بالكامل لأن الإطار الأول هنا Form1 هو الإطار الرئيسي في التطبيق.
كتابة إجراء النقر على الزر No :
يتم استدعاء إجراء النقر على الزر No بنفس الطريقة المشروحة أعلاه ويكفي كتابة الأمر Close فقط بين العبارتين Begin وEnd لإغلاق البرنامج عند النقر على الزر No.
كتابة إجراء النقر على الزر Close :
يوجد هذا الزر في الإطار الثاني Form2 الذي يحتوي على الصورة ويستخدم لإغلاق الإطار وبالتالي فإنه يتم كتابة الأمر Close أيضاً بين العبارتين Begin و End في إجراء النقر على هذه الزر وهذه الأمر سيؤدي إلى إغلاق الإطار المحتوي على الصورة والرجوع إلى النموذج الأول.
بهذا نكون قد أكملنا كتابة إجراءات التطبيق وأنهينا المرحلة الثانية والأخيرة من إعداد التطبيق و تبقى الآن عملية تخزين التطبيق و حفظه على القرص المغناطيسي سواء الصلب أو المرن.
حفظ التطبيق :
يجب دائماً حفظ التطبيق بكل ملفاته في مجلد مستقل يحمل اسم يشير إلى التطبيق لسهولة الحصول عليه عند فتحه لاحقاً وبالتالي يتم إنشاء مجلد على القرص الصلب مثلاً ويسمى Password Example ولإجراء عملية الحفظ نفتح قائمة File ونختار الأمر Save All فنحصل على نافذة حوار الحفظ ومن خلالها يجب فتح المجلد الخاص بهذه التطبيق والمراد نسخ ملفات التطبيق تحته وهو في هذا المثال باسم Password Example وعند فتحه ننقر على الزر Save لنحفظ أول ملف في التطبيق وهو على الأرجح سيكون الملف Unit1 الخاص بالإطار الأول Form1 ، بالطبع يمكن تسمية الملف باسم آخر غير الاسم الحالي ، وبعد تخزين الملف الأول تطلب نافذة الحوار حفظ الملف الثاني وهو على الأرجح سيكون الملف Unit2 الخاص بالإطار الثاني Form2 وبعدها سيتم حفظ ملف التطبيق نفسه واسمه الافتراضي هو Project1 مع إمكانية تغيير الاسم طبعاً ، وبهذا يتم حفظ التطبيق و تخزينه على القرص الصلب تحت مجلد باسم Password Example .
تشغيل التطبيق:
يتم تشغيل التطبيق بتنفيذ الأمر Run من قائمة Run أو نقر زر السرعة Run الموجود في مجموعة أزرار السرعة الخاصة بدلفي.
عند تشغيل التطبيق تقوم لغة Delphi بترجمة و تنقيح أسطر البرمجة الخاصة بإجراءات التطبيق ككل وتنشأ الملفات اللازمة والمرافقة للتطبيق بما فيها الملف التنفيذي للتطبيق Exe File .
إغلاق التطبيق :
يتم إغلاق التطبيق بتنفيذ الأمر Close All الموجود في قائمة File .
فتح التطبيق من جديد:
يتم فتح التطبيق بتنفيذ الأمر Open Project من قائمة File أو اختيار اسم التطبيق من القائمة الفرعية التي تتفرع من الأمر Reopen الموجود في قائمة File وهذه القائمة الفرعية تظهر أسماء آخر مجموعة من التطبيقات تم فتحها والعمل عليها مؤخراً وذلك لسرعة فتح التطبيق المطلوب.
مرشد اللغة :
مرشد اللغة عبارة عن فقرة ستعتاد على قراءتها في نهاية كل تطبيق من تطبيقات هذا الكتابة ، تتناول هذه الفقرة أهم الجمل Statements و الإجراءات Procedures والوظائف Functions وأيضاً الخصائص Properties التي تمس موضوع التطبيق وتعتبر ذات صلة بإجراءاته .
الوظيفة ShowModal :
تستخدم لعرض أي إطار Form وجعله في مقدمة الإطارات الأخرى المفتوحة في البرنامج مع عدم السماح بالانتقال إلى أي إطار Form آخر إلى أن يغلق هذا الإطار .
مثال:
Form2.ShowModal ;
هذا السطر البرمجي يعني عرض الإطار Form2 وجعله في مقدمة الإطارات الأخرى إلى أن يغلق.
• Application.Terminate :
هذا السطر البرمجي مكون من شطرين ، الأول هو كلمة Application وهي تشير إلى إمكانية تنفيذ إجراء ما على التطبيق الحالي ، والثاني هو عبارة عن إجراء هو Terminate ويستخدم لإنهاء التطبيق.
القصد من الإشارة إلى هذا السطر البرمجي هو إمكانية استخدامه لإنهاء التطبيق بدلاً من الإجراء Close المستخدم في التطبيق السابق.
الفرق في استخدام Close أو Application.Terminate هو أن الأخير يستخدم لإنهاء التطبيق في أي مناسبة يستخدم فيها أما Close فيستخدم لإغلاق الإطار الحالي ، فإذا كان الإطار الحالي هو الإطار الرئيسي فإن التطبيق بالتأكيد سيغلق .

الإطار Password Dialog :
- هو إطار حوار جاهز يستخدم في أي تطبيق لإدخال كلمة مرور ما وهو بالشكل التالي :
أنقر على الرابط التالي لرؤية الصورة :
- للحصول علي هذا الإطار قم بفتح قائمة File ثم New ثم Others فتحصل على الإطار التالي :
أنقر على الرابط التالي لرؤية الصورة :
- من هذا الإطار يمكنك إدراج العديد من الإطارات بأنواع مختلفة ومن ضمنها الإطار Form العادي طبعاً كما يظهر في الصورة ، إلا أننا نود أن ندرج الآن الإطار Password Dailog ولهذا سنقوم بنقر التبويب Dialogs فنحصل على الشكل التالي :
أنقر على الرابط التالي لرؤية الصورة :
- نلاحظ أن من بينهم الإطار المطلوب وهو Password Dialog ، بالتأكيد تعرف الباقي .
- هذا الإطار Password Dialog هو إطار Form كأي إطار آخر إلا أن لغة Delphi تقوم بتجهيزه لمن يرغب في استخدامه مباشرة لإدخال كلمة مرور ما ، مع ملاحظة إمكانية تغيير خصائص أي عنصر من عناصره كما ترغب كأن تقوم بتغيير قيمة أي Caption لجعلها تظهر باللغة العربية مثلاً .
- أخيراً ، انتبه إلى أن اسم Name الإطار Password Dialog هو PasswordDlg .
التطبيق الثاني : ( العمليات الحسابية )
الآن ، سنقوم بتصميم وبرمجة تطبيق آخر وهو عبارة عن برنامج يقوم بالعمليات الحسابية الأولية ( الجمع والطرح و الضرب والقسمة )
ونلاحظ من إطار البرنامج أنه تم استخدام العناصر الآتية :
قوائم (Menus) وهي : قائمة ( عملية) وقائمة (خدمات) .
مجموعة Labels للساعة وللعدد الأول والثاني وللناتج.
مربعي نص (Edit) للعددين.
خمسة أزرار ، أربعة للعمليات الحسابية والأخير للخروج من البرنامج.
عنصري Bevel للتنسيق كما هو ظاهر في الإطار.
كما نلاحظ أن البرنامج يأخذ الشكل والاتجاه العربي حيث يظهر عنوان الإطار وأيضاً القوائم على اليمين.
وفكرة تطبيق البرنامج هي أن يتم إدخال عددين في مربعي النص ثم اختيار العملية الحسابية المطلوبة.
ونلاحظ الآتي:
- قائمة ( عملية ) تحتوي على أوامر العمليات الحسابية والخروج من البرنامج ، أما قائمة ( خدمات ) فتحتوي على أمرين فقط هما ( مسح ) ويستخدم لمسح مربعي النص وخانة الناتج والأمر ( حول البرنامج ) يظهر إطار يحتوي على معلومات عن البرنامج .
كل أمر من أوامر القائمتين يحتوي على حرف اختصار (ShortCut) كما هو موضح.
ويتم إضافة و تصميم القوائم في أي إطار كما يلي :
يوضع على الإطار العنصر MainMenu ويوجد في الصفحة Standard في مكتبة العناصر المرئية .
يشغل إطار تصميم القائمة بنقر العنصر MainMenu نقراً مزدوجاً .
يتم إدخال اسم القائمة والأوامر التابعة لها باستخدام الخاصية Caption مع ملاحظة إمكانية جعل أي حرف مسطر وذلك بكتابة الرمز & قبله.
الانتقال بين أسماء القوائم والأوامر في إطار تصميم القوائم يتم بمفاتيح الأسهم أو النقر بالماوس كما يمكن استخدام المفتاح Del لمسح أي أمر من الأوامر وأيضاً المفتاح Insert لإضافة أمر بين الأوامر الموجودة.
الخط الفاصل بين الأوامر والذي يفصل الأمر ( خروج ) عن بقية الأوامر في قائمة ( عملية ) يتم إنشاءه بكتابة رمز علامة الطرح ( - ) في الخاصية Caption وستتولى Delphi الباقي.
أحرف الاختصار يتم تحديدها بالخاصية ShortCut لكل أمر ، حيث يمكن عرض لائحة من أحرف الاختصارات لاختيار منها ما يناسب الأمر الحالي.
- بعد إكمال تصميم القوائم نعود إلى الإطار Form لنجد القائمة قد أخذت مكانها على الإطار.[/size]
تحديد خصائص العناصر:
في بداية التصميم يتم تحديد خصائص الإطار Form1 نفسه حيث نقوم بتغيير العنوان بواسطة الخاصية Caption ثم نجعل الإطار يدعم اتجاه اللغة العربية وذلك بتغيير قيمة الخاصية BiDiMode وجعلها bdRightToLeft ، كما نغير قيمة الخاصية Position ونجعلها poDesktopCenter وذلك ليظهر الإطار دائماً عند تشغيله في وسط سطح المكتب.
يتـم تحديد خصائص الـ Labels باستخدام الخاصية Caption لتصبح كما تظهر في الإطار أعلاه وتوضع القيمة ‘0’ للـ Label الخاصة بالناتج كقيمة مبدئية كما تترك الـ Label الخاصة بالساعة كما هي وسيتم شرح كيفية جعلها ساعة رقمية تشتغل بعد قليل.
يتم تحديد الخاصية Text للعنصرين Edit1 و Edit2 وجعلها ‘0’ وذلك ليظهر الرقم صفر في بداية تشغيل البرنامج في كل مرة.
يتم تحديد خاصية Caption للأزرار ، كما هو موضح في إطار البرنامج.
العنصر Bevel الخارجي يتم تغيير قيمة الخاصية Shape وجعلها bsFrame لتظهر لإطار محفور كما نشاهده في الإطار ، أما العنصر

 Bevel الآخر (الصغير) فيترك كما هو عليه أي bsBox وهو الشكل التلقائي له.
رابط الدرس الاول :