الـــمؤقت والبرنامج متعدد الوثائق & MDI Program Timer

فى هذا الفصل نشرح كيفيه تنفيذ عملية معينه كل وقت محدد عن طريق استخدام الــ Timer وكيفيه تحديد مقدار الوقت المحدد وتحديد العملية المطلوب تنفيذها كل وقت محدد وكذلك كيفية إيقاف الــ Timer كما يتم شرح البرنامج متعدد الوثائق (MDI ) والفرق بينه وبين البرنامج ذو الوثيقة الواحدة SDI )) الذى شرح فى الفصل السابع ، مع تصميم برنامج محرر سطور متكامل ومتعدد الوثائق وذلك من خلال أمثلة هذا الفصل.

معنى Timer (المؤقت)

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

مثال :

افتح ملف البرنامج vcex 18 من الفهرس chpt 10 ونفذه أو تابع مراحل تصميم البرنامج وتنفيذه تحصل على الشكل 10-1

clip_image001

والشكل 10-1 عبارة عن برنامج من نوع SDI يحتوى على زر أوامر مكتو ب عليه كلمه Start والثانى مكتوب عليه كلمه Stop ، كما يحتوى البرنامج على أداة نص وأداة اختيار (Check box) وعند تنفيذ البرنامج تقوم أداة النص بعد أرقام بداية من القيمة صفر ثم تزداد بمقدار واحد وتقوم أداة الاختبار بتغيير حالتها مع سماع صوت صفارة من سماعة الجهاز كل فترة زمنية محددة ، وعند الضغط على زر الأوامر Stop يتوقف العمل فيتوقف العد وتغير حالة أداة الاختبار وسماع صفاره من الجهاز وعند الضغط مرة أخرى على زر الأوامر Start يعود العمل مرة أخرى ، جرب استعمال البرنامج ثم تابع معنا مراحل تصميم البرنامج.

مراحل تصميم البرنامج

1. ابدأ برنامج جديد وذلك بإختيار File ثم New ثمworkspace Project ثم اكتب اسم للبرنامج وليكن vcex16 ثم Createحدد نوع البرنامج من النوع single document

2. اكمل خطوات تصميم البرنامج بإختيار Next كل مرة حتى تحصل على شاشه الفصائل (Classes) التى يتكون منها البرنامج كما فى الشكل10- 2

clip_image003

3. غير الفصيله CView إلى CView Form وذلك بإختيار الفصيله CView ثم من صندوق قائمة اختيار الفصائل الموجودة أسفل الشكل اختار CViewForm ثم finish ثم ok يتم تخليق برنامج بهذه المواصفات.

تعديل البرنامج

4. ابدا فى تعديل البرنامج ليوافق الشكل المطلوب كما يلى :

من صندوق عرض ملفات المشروع اختار رمز ملفات الموارد (resources) تحصل على ملفات الأدوات الموجودة بالبرنامج انقره بالفارة vcex 18 Resources مرتين تحصل على قائمة بالأدوات الموجودة.

5.اختار Dialog ومنه اختار IDD-vcex18-Form تحصل على الشكل المبدئى لصندوق الحوار الموجود فى خلفيه البرنامج

6. احذف الرسالة الموجودة بالنقر عليها بالفارة ثم الضغط على Del.

7.من صندوق الأدوات اسحب الأدوات التالية زر أوامر وأداة ونص وأداة اختيار check وقعها على صندوق حوار خلفية البرنامج (Form )مع تغيير عناوينها لتحصل على الشكل 10- 3 وهو شكل البرنامج بعد توقيع الادوات وتغير عناوينها .

clip_image004

اعطاء متغيرات للأدوات

للتعامل مع أداة النص وأداة الأختيار لابد من أعطائهما متغيرات كما سبق ويتم ذلك كما يلى:

- اضغط المفتاحين Ctrl+w للحصول على شاشه Class Wizard.

- اختار Member Variables.

- اختار IDC-Check1 اختار Add Variable واعطه الاسم m1 اترك النوع Bool كما هو.

- بالمثل اختار IDC-Edit1 واعطه المتغير m2 من نوع Long ثم Ok.

ملحوظة :-

حتى الان نستخدم طريقتين لتعريف المتغيرات لك أن تستخدم فهما ما يحلو لك .

الاولى : استعمال شاشة class wizard ثم member varable

والثانية :الضغط على مفتاح ctrl ثم النقر على الاداة مرتين.

كتابة سطور البرنامج

هذا البرنامج يحتاج إلى أوامر تقوم بما يلى :

1. إنشاء المؤقت (Timer) وتحديد مواصفاته (مقدار المدة الزمنيه).

2. تحديد ا لعمليه والوظيفه التى يتم تنفيذها كل فترة زمنيه.

3. كتابة أوامر زرى الأوامر Start و Stop.

ويتم ذلك كما يلى :

1. إنشاء Timer

- اضغط المفتاحين Ctr+W ثم اختار Message Maps.

- من صندوق العناصر اختار أول اختيار وهو vcex18view

- من صندوق الرسائل اختار الرسالة WM-Creat( وهذه الرسالة تصدر للبرنامج فى بداية التنفيذ ) ثم Add Function ثم Ok فيتم اضافة دالة بالاسم المقترح ثم Edit Code واكتب الأوامر التالية :

1: if (SetTimer (1,500,NULL) ==0)

2: MessageBox (“Can not Create timer! “);

فى هذه السطور

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

cannot create time أى لا يمكن تخليق timer

ملحوظة

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

2. تحديد العمليه المطلوبة

فى هذا المثال نريد زيادة القيمه الموجودة فى أداة النص لتعمل كعداد وتغيير حاله أداة الاختبار كلما أرسل الـ Timer نبضة (كل 500 ms) ويتم ذلك بالخطوات التالية :

- اضغط المفتاحين Ctrl+W تحصل على شاشه Class Wizard.

- من صندوق العناصر اختار vcex18View ، من صندوق الرسائل اختار الرساله WM-TIMER ثم Add Function فيتم اضافة الدالة التى تنفذ كل 500 ملى ثانية كما سبق.ثم انقر Edit Code و اكتب السطور التالية :

1: m1 = ! m1;

2: m2 ++;

3: UpdateData (FALSE);

فى هذه السطور

* فى السطر رقم 1 يتم وضع قيمه المتغير m1 فى المتغير m1 ولكن بعد تنفيذ المؤشر ! (NOT) عليها وهو مؤشر النفى الذى يقوم بعكس قيمه المتغير وبالتالى إذا كانت قيمه المتغير m1 هى 1 تقلب إلى صفر واذا كانت صفر تقلب 1 وهكذا ، وهذا المتغير هو المصاحب لأداة الاختيار Check1 وبالتالى كلما ارسل الـ Timer نبضه يتم عكس قيمه المتغير m1 وبالتالىعكس حالة Check1.

* فى السطر رقم 2 يتم زيادة قيمه المتغير m2 بمقدار واحد وذلك باستخدام مؤشر الزيادة ++ وهذا ينفذ أيضاً كل نبضه وبالتالى تظهر أداة النص كعداد.

* فى السطر رقم 3 تقوم الداله UpdateData ( ) بنقل محتويات المتغيرات إلى الأدوات المصاحبة لها حتى تظهر النتيجة فى الادوات المصاحبة.

3. كتابه سطور زر الأوامر

المطلوب كتابة أوامر للزر Stop بحيث يتوقف عمل ال Timer عند الضغط على هذا الزر ، وكتابة أوامر للزر Start لإعادة عمل ال Timer..

أولاً : أوامر الزر Stop

اضغط المفتاحين Ctrl+W ثم IDC-Button2 ثم BN-Clicked ثم Add Function ثم Edit Code واكتب السطور التالية :

KillTimer(1);

فى هذا السطر يتم استعمال الداله KillTimer ( ) لإيقاف المؤقت (Timer) ورقم 1 يشير الى الtimer الذى تم إنشائه بالداله SetTimer ( ) فيتوقف عمل Timer ويتوقف العدد وتغيير حاله الأداة.

ثانياً : أوامر Start

اضغط Ctrl+W ثم IDC-Button1 ثم BN-Clicked ثم Add Function ثم Edit Code واكتب ما يلى :

SetTimer (1,500,Null);

فى هذا السطر يتم إنشاء Timer بالرقم 1 بفتره زمنيه 500 كما سبق فيتم إعادة عمل Timer مرة اخرى .

ملحوظة

يمكن اضافة دوال للبرنامج بدون استعمال شاشة Class Wizard كما يلى :

فى شاشة نص البرنامج يوجد صندوقي قائمة اختيارات أحدهما يحتوى على قائمة للعناصر الموجودة بالبرنامج ويسمى Object IDs والاخر يحتوى على الرسائل الممكنة (الاحداث) كما بالشكل 10-4.

clip_image006

-من صندوق العناصر اختار العنصر المطلوب كتابة دالة له وليكن IDC_BUTTON1

-من صندوق الرسائل اختار رسالة لتكن BN_CLICKED تحصل على صندوق حوار باسم الدالة اضغط Ok للموافقة على اسم الدالة فيتم اضافة دالة بهذا الاسم.

ترجمة وتنفيذ البرنامج

بعد الإنتهاء من تصميم البرنامج قم بترجمة وتنفيذ البرنامج بالضغط على المفتاحين Ctrl+F5 يتم الترجمه والتنفيذ ، جرب إستعمال البرنامج ولاحظ التغيرات.

برنامج متعدد الوثائق

Multiple Document Interface

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

وشرحنا كيفيه بناء برنامج من نوع (SDI) Single Document Interface وهو الشكل المبدئى للتطبيق بقائمة الاختيارات التقليدية لبرامج النوافذ وهو الشكل الشائع لمعظم البرامج.

والآن نشرح كيفيه بناء برنامج من نوع (MDI) Multiple Document Interface وقبل ذلك نوضح الفرق بين برنامج MDI و برنامج SDI.

بالتأكيد استعملت برنامج الكتابة الموجود مع برنامج النوافذ وهو Write ، جرب استعماله فى الكتابه وبعد الإنتهاء من كتابة مجموعة سطور اختار القائمه الرئيسيه ومنها File ومنها New لفتح ملف جديد ماذا تلاحظ ؟

يقوم برنامج Write بإغلاق الملف المفتوح أولاً ثم فتح ملف جديد أى لا يستطيع فتح ملفين فى نفس الوقت. وهذا ما يسمى SDI أى برنامج ذو وثيقه واحدة.

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

برنامج محرر سطور متعدد الوثائق

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

خطوات تصميم البرنامج

* افتح ملف البرنامجvcex19 من الفهرس Chpt10 (أو تابع معنا مراحل تصميم البرنامج) وقم بتنفيذه تحصل على الشكل رقم10-5.

clip_image008

* جرب استعمال البرنامج بكتابة نصوص ثم احفظها ثم اغلاق الملف واسترجاعه جرب فتح اكثر من ملف وعرضهم بشكل متجاور كما فى شكل 10- 6

clip_image010

* وبالطبع تتخيل أن هذا البرنامج بما يوفره من خدمات مثل الحفظ والاسترجاع وعمليات النسخ واللصق وكذلك تعدد الوثائق يحتاج الى سطور كثيرة ولكن الواقع أن تصميم هذا البرنامج لا يحتاج الى كتابة أمر واحد وهذا ما تراه خلال تصميم البرنامج و لتصميم البرنامج تابع المراحل الآتية :

1. ابدأ برنامج جديد وذلك باختيار File ثم New اكتب اسم وليكن vcex19 ثم workspace Projectثم Create.

2. من شاشة أنواع البرامج اختار Multiple Documents وهو النوع الذى يفترضه برنامج VC++ ثم Next.

3. من شاشه تحديد ملف قواعد البيانات اضغط Next.

4. من شاشه التعامل مع OLE اختار Next

5. من شاشة إمكانية البرنامج اختر Next.

6. من شاشة تعليمات البرنامج ومكتبه DLL اختار Next.

7. تحصل على شاشة بها الفصائل التى يستعملها هذا البرنامج كما فى الشكل 10 -7

clip_image011

8. تحرك بالأسهم أو بالفأرة إلى آخر سطر وهو .cve ex 19 View

8. اختر صندوق قائمة الاختيارات المكتوب عليه Base Class. 9.من صندوق قائمة الاختيارات اختر C edit View ثم Finish ثم Ok فيتم تخليق برنامج بهذه المواصفات.

ترجمة وتنفيذ البرنامج

بدون التعديل فى البرنامج وبدون كتابة أمر برمجة واحد قم بترجمة وتنفيذ البرنامج بالضغط على المفتاحين Ctrl+F5 تحصل على رسالة بعدم وجود برنامج تنفيذى وسؤال هل ترغب فى ذلك اختار Yes فيقوم برنامج VC++ بترجمة وتنفيذ البرنامج حتى تحصل على نتيجة تنفيذ البرنامج جرب استعمال البرنامج بالكتابة والحفظ والاسترجاع وجرب استعمال عمليات النسخ واللصق وجرب فتح أكثر من ملف فى نفس الوقت وعرض الملفات بشكل متجاور.

ملاحظات

يعتمد هذا البرنامج على خطوتين :

الأولى : تحديد نوع البرنامج من نوع Multiple Document.

الثانيه : تحديد نوع الفصيله Cview من نوع CEdit.

والفصيلة CEdit أحد فصائل مكتبه الفصائل الخاصه بــ VC++ وهى فصيلة لها جميع خصائص برنامج كتابة الرسائل من نسخ ولصق وهكذا وبهذا يتم عمل برنامج محرر سطور متعدد الوثائق بدون كتابة امر برمجه واحد.

وهناك كثيرا من الفصائل المفيدة التى سوف نراها فى الجزء الانى من الكتاب.

تعليقات

المشاركات الشائعة من هذه المدونة

المؤثرات الحسابية في C++

الرسم Graphics

دوال النمط الرسومي في ++C