الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تعلم تصميم برنامج مواقيت الصلاة

مغلق
بدأه محمد الفياض في 30 يونيو 2001 · 2 رد · 3,717 مشاهدة · في مشاريع ومسابقات القسم
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

++++++++ من مجلة بي سي +++++++++++

مواقيت الصلاة

تعلم تصميم برنامج لرفع الأذان في أوقات الصلاة، باستخدام لغة فيجوال سي ++

نبيل حسين

تقدم هذه المقالة، طريقة مبسطة، لبرمجة تطبيق يقوم برفع الأذان في المواقيت الصحيحة للصلاة، ليوم 5/9/2000 لمدينة مكة المكرمة. ولا يحتوي هذا البرنامج على حسابات فلكية، لحساب مواقيت الصلاة في مواعيدها، بالنسبة لمختلف خطوط الطول والعرض، فهذا أمر يخرج عن نطاق هذه المقالة التعليمية، التي تستهدف شرح أسلوب برمجة هذا النوع فقط، من البرامج.

إنشاء تطبيق بصندوق حوار

المرحلة الأولى من إنشاء برنامجنا، هي إنشاء تطبيق يعتمد على صندوق (نافذة) حوار، باستخدام البرنامج الإرشادي MFC AppWizard (.exe)، باتباع الخطوات التالية:

1- شغّل بيئة التطوير للغة فيجوال سي++، ثم اختر البند New، من القائمة File، فتظهر النافذة New.

2- حدد الشريط Projects، ثم اختر البند MFC AppWizard (.exe)، وأدخل اسم المشروع ضمن مستطيل التحرير Project name:، ولنطلق على مشروعنا اسم PrayerTime، مثلاً. انقر بعد ذلك، على الزر Ok.

3- ستظهر الخطوة الأولى من خطوات المعالج MFC AppWizard (.exe)، التي تسألك عن نوع التطبيق الذي تريد إنشاءه. اختر البند Dialog based، ثم انقر على الزر Finish، لتكوين الهيكل الرئيسي، والملفات الأساسية لهذا المشروع.

4- سيظهر الإطار New Project Information، الذي يحتوي على معلومات عن المشروع الجديد. انقر على الزر Ok، لإغلاق هذا الإطار.

تصميم الإطار الرئيسي للبرنامج

المرحلة التالية هي تصميم الإطار الرئيسي للبرنامج، وذلك باتباع الخطوات التالية:

1- انقر ضمن مساحة العمل على الشريط ResourceView، ثم انقر نقراً مزدوجاً على المجلد PrayerTime resources، لفتح مصادر البرنامج للتحرير. انقر نقراً مزدوجاً على المجلد Dialog، ثم انقر نقر مزدوجاً على الإطار IDD_PRAYERTIME_DIALOG، لفتحه للتحرير.

2- يجب تغيير لغة الإطار، كي يتمكن من عرض النصوص العربية، وذلك بالنقر بالزر الأيمن للماوس، على البند IDD_PRAYERTIME_DIALOG، الموجود ضمن مجلد Dialog الخاص بإطارات البرنامج، واختيار البند Properties، فيظهر الإطار Dialog Properties. اختر البند Neutral (Sys. Default) من القائمة المنبثقة Language، ثم أغلق الإطار بالنقر على علامة x الصغيرة الموجودة أعلاه. ويمكنك بعد ذلك، المباشرة بتصميم الإطار الرئيسي للبرنامج رسومياً.

3- احذف العبارة TODO: Place dialog controls here بعد تحديدها بالنقر عليها، ثم انقر على الزر Delete.

4- انقر بالزر الأيمن للماوس على الزر OK، ثم اختر البند Properties، فيظهر الإطار Push Button Properties. استبدل كلمة OK، بكلمة "إغلاق"، وانقل هذا الزر إلى أسفل ووسط الإطار.

5- احذف الزر Cancel.

6- انقر بالزر الأيمن للماوس على شريط العنوان الخاص بإطار البرنامج، ثم اختر البند Properties من القائمة المنبثقة. واستبدل العبارة PrayerTime، بعبارة "مواقيت الصلاة"، ضمن مربع التحرير Caption:. وتظهر هذه العبارة على شريط العنوان في برنامجنا. انقر على الشريط Extended Styles، ثم عيّن البند: Right aligned text، لتغيّر جهة عرض عنوان الإطار إلى الجهة اليمنى.

7- اختر من شريط عناصر التحكم، العنصر Static Text، ثم انقر بالماوس على الإطار، فتضاف إليه الكلمة Static، التي تستطيع تغييرها إلى النص الذي تريده. انقر بالزر الأيمن للماوس على هذه الكلمة، ثم اختر البند Properties، فيظهر الإطار Text Properties. اكتب بدلاً من كلمة Static ضمن مربع التحرير Caption:"، "مواقيت الصلاة لمدينة مكة المكرمة ليوم 5/9/2000". انقر على الشريط Styles، ثم حدد الخيار Center vertically، ثم انقر على الشريط Extended Styles، وحدد الخيارين Client edge، وModal frame، لإضافة إطار حول هذه العبارة، ثم وسّع حدود الإطار حول العبارة "مواقيت الصلاة لمدينة مكة المكرمة ليوم 5/9/2000".

8- كرر الخطوة السادسة، وأضف نصوص الجدول 1 إلى إطار البرنامج، فيبدو إطار البرنامج الرئيسي كما في الشكل 1.

تصميم إطار رفع الأذان

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

1- انقر بالزر الأيمن للماوس ضمن مساحة العمل على المجلد Dialog، ثم اختر البند Insert Dialog، فيضاف إطار ثالث إلى مجلد الإطارات الخاص بمشروعنا.

2- انقر بالزر الأيمن للماوس على البند IDD_DIALOG1، وهو الإطار الجديد الذي أضفناه أخيراً، ثم اختر البند Properties، فيظهر الإطار Dialog Properties. اكتب ضمن مستطيل التحرير ID:، رقم التعريف الخاص بالإطار الجديد، ولنعطه القيمة التالية: IDD_CALL_TO_PRAY_DIALOG، مثلاً. اختر بعد ذلك، البند Neutral (Sys. Default)، من القائمة المنبثقة Language، ثم أغلق هذا الإطار بالنقر على علامة x الصغيرة الموجودة أعلاه.

3- انقر بالزر الأيمن على شريط العنوان الخاص بإطار البرنامج، ثم اختر البند Properties من القائمة المنبثقة. وانقر على الشريط Extended Styles، ثم عيّن البند: Right aligned text، لتغيّر جهة عرض عنوان الإطار إلى الجهة اليمنى. لن نغيّر هنا، اسم الإطار إلى اسم ثابت، بل سنرسل اسم الإطار برمجياً، حسب وقت الصلاة. فعندما يحين موعد أذان المغرب مثلاً، سنرسل القيمة "لقد حان الآن موعد أذان المغرب"، وهكذا.

4- احذف الزرين Cancel، وOK.

5- سنضيف في هذه الخطوة، صورة لأحد الأماكن المقدسة. وعليناً أولاً، إضافة هذه الصورة إلى مصادر البرنامج، وذلك بالنقر بالزر الأيمن للماوس، على المجلد الرئيسي لمصادر البرنامج PrayerTime resources، ثم اختيار البند Import…، فيظهر إطار يمكنك من اختيار مكان واسم ملف الصورة (يجب أن يكون ملف الصورة من نوع BMP). اختر البند All Files (*.*) من القائمة المنبثقة Files of type:، لعرض جميع أنواع الملفات، ثم اختر ملف الصورة وانقر على الزر Import. لن يعرض محرر فيجوال سي++، ألوان الصورة، إذا كان عددها أكبر من 256 لوناً، لكن، لا تهتم لذلك. لاحظ أن محرر فيجوال سي++، أضاف مجلداً جديداً إلى مجلدات مصادر البرنامج، وأسماه Bitmap، وهو يحتوي على البند IDB_BITMAP1. انقر بالزر الأيمن للماوس على هذا البند، ثم اختر البند Properties…، فيظهر الإطار Bitmap Properties. استبدل قيمة مستطيل التحرير ID:، بالقيمة: IDB_ATABAT_BITMAP، ثم أغلق هذا الإطار.

6- ارجع إلى الإطار الذي يجب أن يظهر عند رفع الأذان، كي تضيف إليه الصورة. اختر عنصر التحكم Picture (وهو العنصر الثاني عمودياً، ضمن شريط عناصر التحكم الذي توفره لغة فيجوال سي++)، ثم انقر بزر الماوس ضمن مساحة الإطار، لإضافة عنصر التحكم Picture إليه. انقر بالزر الأيمن على عنصر التحكم الجديد، ثم اختر البند Properties…، فيظهر الإطار Picture Properties. اختر البند Bitmap، من القائمة المنبثقة Type:، واختر البند IDB_ATABAT_BITMAP، من القائمة المنبثقة Image، فتلاحظ ظهور الصورة ضمن مساحة الإطار. لاحظ أنه يمكنك تكبير مساحة الإطار، ليستوعب قياس الصورة التي أضفتها.

إضافة صنف للتحكم بالإطار الجديد

علينا كي يمكننا استعمال الإطار الجديد، إضافة صنف للتحكم به، باتباع الخطوات التالية:

1- افتح الإطار الجديد، بالنقر نقراً مزدوجاً، على عنوانه (IDD_CALL_TO_PRAY_DIALOG).

2- اختر البند ClassWizard…، من القائمة View، فيشتغل هذا البرنامج الإرشادي، ويعرض إطاراً يخبرك فيه عدم وجود صنف للتحكم في الإطار الجديد، ويخيرك بين إنشاء صنف جديد، وتحديد أحد الأصناف الموجودة. أبق التحديد على الخيار الأول Create a new class، ثم انقر على الزر OK.

3- سيُعرض الإطار New Class، ضمن مستطيل التحرير Name. اكتب اسم الصنف الجديد، وليكن CCallToPray، مثلاً، وهو صنف موروث من الصنف CDialog. انقر بعد ذلك، على الزر OK، فينشئ البرنامج الإرشادي الصنف CCallToPray، ويجعله مسؤولاً عن الإطار الجديد الخاص برفع الأذان، ويولد الملفين CallToPray.cpp، وCallToPray.h. انقر على الزر OK، لإغلاق إطار البرنامج الإرشادي.

إضافة النصوص البرمجية

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

1- انقر ضمن مساحة العمل على الشريط ClassView، ثم انقر نقراً مزدوجاً على المجلد الرئيسي PrayerTime classes، ثم على المجلد CPrayerTimeDlg، ثم انقر نقراً مزدوجاً على المهمة OnInitDialog() لتصبح جاهزةً للتحرير.

2- أضف السطرين البرمجيين التاليين في نهاية هذه المهمة، تحت عبارة TODO:….:

// TODO: Add extra initialization here

flag=TRUE;

SetTimer(1,1000,NULL);

يعين السطر الأول قيمة True، لمتغيّر، الهدف منه تكرار رفع الأذان في كل ثانية يفحص البرنامج الوقت. فعندما يحين موعد صلاة العصر، مثلاً، يرفع البرنامج الأذان في الساعة 3:44، فإذا أوقف المستخدم الأذان، يغلق البرنامج إطار رفع الأذان، ويعود إلى الإطار الرئيسي للبرنامج. ما لذي سيحصل عندئذ؟ سيفحص البرنامج الوقت مرة أخرى، ليجد أن الساعة 3:44:30 مثلاً، فيرفع الأذان مرةً أخرى! يمكننا لتفادي هذه المشكلة، تعريف متغير منطقي من النوع المنطقي BOOL، لنضع فيه القيمة FALSE فور رفع الأذان أول مرة.

يعرف السطر البرمجي الثاني منبهاً زمنياً ينفذ المهمة OnTimer() كل ثانية.

علينا قبل كل شيء، أن نعرف المتغيّر flag، بالنقر بالزر الأيمن للماوس على المجلد CPrayerTimeDlg، ثم اختيار البند Add Member Variable…، فيظهر الإطار Add Member Variable. أدخل ضمن مربع التحرير Variable Type:، القيمة المنطقية BOOL، وأدخل flag، ضمن مربع التحرير Variable Name:، ثم انقر على الزر OK.

ويمكنك بالطريقة ذاتها، تعريف المتغيرات المبينة في الجدول 2، والتي سنحتاج إليها لاحقاً.

المتغير الأول، كائن (Object) من الصنف (Class) CTime، سنستخدمه لاحقاً، لمعرفة الوقت الحالي للحاسوب. أما المتغيران الثاني والثالث، فهما متغيران رقميان (من نوع int)، سنستخدمها لحفظ الساعة، والدقيقة الحالية حسب توقيت الحاسوب. المتغير الأخير كائن من الصنف CCallToPray، وسنحتاج إليه لاستدعاء إطار رفع الأذان.

الخطوة التالية هي إضافة المهمة OnTimer، باتباع ما يلي:

1- اختر البند ClassWizard… من القائمة View، لتشغيل هذا البرنامج الإرشادي.

2- اختر الصنف CPrayerTimeDlg، من القائمة المنبثقة Class name:.

3- اختر الحدث WM_TIMER، من اللائحة Messages:، ثم انقر على الزر Add function، وانقر على الزر Edit Code لفتح هذه المهمة للتحرير. أضف السطور البرمجية التالية في بداية هذه المهمة:

m_CurrentTime=CTime::GetCurrentTime();

m_Hour=m_CurrentTime.GetHour();

m_Minute=m_CurrentTime.GetMinute();

if ((m_Hour==4) && (m_Minute==45) && (flag==TRUE))

{

flag=FALSE;

m_CallToPrayDlg.Title=حان الآن موعد أذان الفجر;

m_CallToPrayDlg.DoModal();

}

if ((m_Hour==12) && (m_Minute==19) && (flag==TRUE))

{

flag=FALSE;

m_CallToPrayDlg.Title=حان الآن موعد أذان الظهر;

m_CallToPrayDlg.DoModal();

}

if ((m_Hour==3) && (m_Minute==44) && (flag==TRUE))

{

flag=FALSE;

m_CallToPrayDlg.Title=حان الآن موعد أذان العصر;

m_CallToPrayDlg.DoModal();

}

if ((m_Hour==6) && (m_Minute==36) && (flag==TRUE))

{

flag=FALSE;

m_CallToPrayDlg.Title=حان الآن موعد أذان المغرب;

m_CallToPrayDlg.DoModal();

}

if ((m_Hour==8) && (m_Minute==5) && (flag==TRUE))

{

flag=FALSE;

m_CallToPrayDlg.Title=حان الآن موعد أذان العشاء;

m_CallToPrayDlg.DoModal();

}

تعمل الخطوة البرمجية الأولى على قراءة الوقت الحالي للحاسوب، وحفظه في المتغيّر m_CurrentTime، وتستخرج الخطوتين الثانية والثالثة الساعة، والدقيقة من المتغيّر m_CurrentTime، وتحفظهما في المتغيّرين اللذين عرفناهما لهذا الغرض. تبدأ بعد ذلك، بعض عمليات الفحص على المتغيّرين الخاصين بالساعة والدقيقة، وقيمة المتغيّر flag. فإذا صادف وقت أحد الصلوات الخمس يعطى المتغيّر flag القيمة FALSE للأسباب التي شرحناها سابقاً، ثم يعطى المتغيّر Title العنوان الذي نريد عرضه في شريط العنوان الخاص بإطار رفع الأذان، علماً بأننا سنعرف هذا المتغيّر على أنه متغيّر حرفي عام، تابع للصنف CCallToPray. تعرض الخطوة التالية إطار رفع أذان الصلاة بواسطة الأمر DoModal().

علينا الآن، تعريف المتغيّر Title، بالنقر بالزر الأيمن للماوس على المجلد CCallToPray، واختيار البند Add Member Variable…، فيظهر الإطار Add Member Variable. أدخل ضمن مستطيل التحرير Variable Type:، القيمة : CString، وأدخل في مستطيل التحرير Variable Name:، القيمة : Title. انقر بعد ذلك، على الزر OK.

شغّل البرنامج الخدمي ClassWizard من القائمة View، واختر من إطاره الصنف CCallToPray من القائمة المنبثقة Class name:، ثم ابحث عن البند WM_INITDIALOG وحدده، وانقر على الزر Add Function، ثم انقر على الزر Edit Code، فتفتح هذه المهمة للتحرير. أضف السطر التالي البرمجي تحت عبارة TODO:….:

SetWindowText(Title);

وهو السطر البرمجي الذي يستبدل عنوان الإطار الحالي بقيمة المتغيّر Title.

يمكنك الآن، أن تربط وتنفذ البرنامج باختيار البند Build PrayerTime.exe، من القائمة Build، فيتم فحص البرنامج للتأكد من خلوه من الأخطاء، ويولد الملف التنفيذي للبرنامج، في حالة خلوه منها (عليك تصحيح الأخطاء، في حال وجودها، وإعادة تنفيذ هذه الخطوة). ويمكنك في حالة خلو البرنامج من الأخطاء، اختيار البند Execute PrayerTime.exe، من القائمة ذاتها، فيعمل البرنامج، ويعرض عند موعد إحدى الصلوات الخمس، إطار رفع الأذان، لكننا لن نسمع صوت الأذان، وهذا طبيعي، لأننا لم نضف الصوت، حتى الآن!

إضافة صوت الأذان

سنضيف إلى إطار رفع الأذان عنصر تحكم أكتف أكس Microsoft Multimedia Control, version 6.0، يمكننا من تشغيل ملف صوتي يحتوي على الأذان، مع أزرار إيقاف وإعادة تشغيل الصوت.

يمكن إضافة تحكم أكتف أكس هذا، باتباع الخطوات التالية:

1- افتح القائمة Project، فالقائمة الفرعية Add To Project…، ثم اختر البند الفرعي Components and Controls…، فيظهر الإطار Components and Controls Gallery، الذي يحتوي على مجلدين. انقراً نقراً مزدوجاً على المجلد الأول Registered ActiveX Controls.

2- اختر من القائمة الطويلة التي تحتوي على أسماء عناصر تحكم آكتف إكس المسجلة لدى النظام، عنصر التحكم Microsoft Multimedia Control, version 6.0، ثم انقر على الزر Insert، فتظهر رسالة تسألك إذا كنت متأكداً من أنك تريد إضافة هذا العنصر إلى مشروعك. انقر على الزر OK، لإضافة هذا التحكم إلى المشروع، فيظهر الإطار Confirm Classes، والذي يخبرك فيه عن أسماء الصنفين اللذين سيضافان إلى المشروع. انقر على الزر OK لإغلاق هذا الإطار، فتعود إلى الإطار Components and Controls Gallery، ثم انقر على الزر Close لإغلاقه.

لاحظ بعد ذلك، إضافة عنصر تحكم جديد إلى شريط عناصر تحكم فيجوال سي++ (انظر إلى الشكل 2).

الخطوة التالية، هي إضافة عنصر التحكم هذا إلى إطار رفع الأذن، باتباع الخطوات التالية:

1- انقر على أيقونة عنصر التحكم هذا، ثم أضفه إلى إطار رفع أذن الصلاة. ستلاحظ إضافة مربع يحتوي على أزرار التحكم بالصوت، لكنها غير فعالة.

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

3- اكتب رقم التعريف التالي: IDC_AZAN_MMCONTROL، ضمن مربع التحرير ID:.

4- انقر الآن، على الشريط Control، واكتب ضمن مربع التحرير Device Type:: waveaudio. ثم انقر على الزر الصغير الذي تعلوه ثلاث نقط، والموجود بجانب مربع التحرير FileName:، لتحديد مكان وجود الملف المتضمن الأذان. سيظهر الإطار Open MCI file، الذي يمكنك من تحديد مكان وجود أحد ملفات الوسائط المتعددة. حدد ملفاً صوتياً من نوع WAV، يحتوي على صوت الأذان، ثم انقر على الزر Open.

5- انقر على الشريط Controls، الذي يُمّكنك من تحديد أزرار التحكم بالصوت المطلوبة، ثم حدد ما يلي فقط:

PauseEnabled, PauseVisible,PlayEnabled, PlayVisible, StopEnabled, StopVisible

ثم أغلق إطار الخصائص هذا، وشغّل البرنامج الإرشادي ClassWizard، من القائمة View، فيعرض إطار هذا البرنامج الإرشادي. انقر على الشريط Member Variables، ثم اختر الصنف CCallToPray من القائمة المنزلقة Class name:، وعيّن عنصر التحكم IDD_AZAN_MMCONTROL، ثم انقر على الزر Add Variable…. اكتب m_MCI ضمن مربع التحرير Member variable name:، ثم انقر على الزر OK لإغلاق هذا الإطار، وانقر على الزر OK الخاص بالبرنامج الإرشادي ClassWizard ، لإغلاقه أيضاً.

أضفنا في الخطوة السابقة متغيراً، للتحكم بأزرار رفع الأذان، ولم يبق سوى إضافة بعض السطور البرمجية، التي تشغّل ملف الأذان فور عرض إطار رفع الأذان، وذلك باتباع الخطوات التالية:

1- انقر على الشريط ClassView، ضمن مساحة العمل، ثم انقر نقراً مزدوجاً على المجلد الرئيسي PrayerTime classes، ثم على المجلد CPrayerTimeDlg، وانقر نقراً مزدوجاً على المهمة OnInitDialog()، لفتحها للتحرير.

2- أضف السطور البرمجية التالية، إلى هذه المهمة، تحت السطر البرمجي SetWindowText…بالتحديد:

m_MCI.SetCommand (Open) ;

m_MCI.SetCommand (Play) ;

m_MCI.SetCommand (Prev) ;

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

يظهر الشكل 3 إطار رفع الأذان بشكله النهائي.

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

يمكنك تنزيل ملفات البرنامج المصدرية من العنوان http://www.pcmag.co.ae/download/May2001

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

#2

الله يعطيك العافية

جديد مدونتي الشخصية http://www.badwi.com

ادعو لنا بظاهر الغيب

MyBooksExchange.jpg

#3

البرنامج فية 102 خطاء... ياليت احد يشوف وين الاخطاء لاني مالية خبرة كثير بتصحيحها

تحياتي

هذا الموضوع مغلق.

مواضيع مشابهة