ملاحظة منقول من المنتدي السابق للعضو:- أنس محمود
بداية ، يجب أن تعرف انه لحساب موعد الأذان لأي صلاة يجب أن يتوافر ما يلي :-
طبعا في موضوع للأخ silverlight قدم الفئة PrayerTimes .
تطبعا أولا تنشأ كائن جديد من الفئة ، ثم تستدعي الإجراء setCalculationMethod وتمرر له طريقة حساب الصلاة ؛ قيمة من :
أضفت لهذه الفئة طريقة باسم GetPrayerTimes_Date بنفس المدخلات تعود بمواقيت الصلاة ولكن بمصفوفة من النوع Date .
لذلك قمت بعمل قاعدة بيانات تحتوي على بيانات 252 دولة و9512 مدينة ! ( باستخدام السلسلة لفئات خاصة أيضاً ) والتعامل معها أيضا في منتهى السهولة ،
كيف اصنع برنامج للتنبيه بمواقيت الأذان ؟ :
يمكن ذلك بمنتهى البساطة ( تعمدت اختيار ابسط طريقة حتى لا يكون هناك صعوبة في فهم الدرس )،
أضف الفئة PrayerTimes من قائمة Project çAdd Existing File ç ثم اختر الملف PrayerTimes.vb .
طبعا للـ AzanTimer الخاصية Enabled بـ True ، Interval بـ 2000 .
الآن إلى الكود :-
أريد أن أوضح أن مشيد الفئة AzanInfo يتطلب وسيطة تمثل مسار قاعدة بيانات الدول .
الآن انتهينا من جزء التصريحات ،
أحداث الكائنات :-
نحن الآن قطعنا نصف المسافة ، والباقي عليك ! ،
هذا كل شيء :
عموما المرفقات رفعتها في هذه المشاركة :-
قاعدة البيانات الدول .
ملف الـمكتبة DLL .
الفئة المضاف لها الطريقة .
كود المكتبة .
المثال
بسم الله الرحمن الرحيم
بداية ، يجب أن تعرف انه لحساب موعد الأذان لأي صلاة يجب أن يتوافر ما يلي :-
- خط الطول للمدينة ( longitude ) .
- خط العرض للمدينة ( latitude ) .
- فارق التوقيت للمدينة .
- تاريخ اليوم المراد حساب توقيت صلاة به .
- مذهب المدينة ( لصلاة العصر ) .
- طريقة حساب باقي الصلوات ( اقصد المؤسسة أو التقويم الذي تتبعه المدينة ويتم حساب الصلوات على أساسه )
طبعا في موضوع للأخ silverlight قدم الفئة PrayerTimes .
تطبعا أولا تنشأ كائن جديد من الفئة ، ثم تستدعي الإجراء setCalculationMethod وتمرر له طريقة حساب الصلاة ؛ قيمة من :
- Makkah : تقويم أم القرى .
- Egypt : الهيئة المصرية العامة للمساحة .
- Karachi : جامعة العلوم الإسلامية بكراتشي .
- ISNA : المجتمع الإسلامي بأمريكا الشمالية .
- MWL : رابطة العالم الإسلامي .
- كائن من النوع Data يمثل اليوم المراد حساب المواقيت عنده .
- خط العرض من النوع Double .
- خط الطول من النوع Double .
- فارق التوقيت من النوع Integer .
أضفت لهذه الفئة طريقة باسم GetPrayerTimes_Date بنفس المدخلات تعود بمواقيت الصلاة ولكن بمصفوفة من النوع Date .
لذلك قمت بعمل قاعدة بيانات تحتوي على بيانات 252 دولة و9512 مدينة ! ( باستخدام السلسلة لفئات خاصة أيضاً ) والتعامل معها أيضا في منتهى السهولة ،
كيف اصنع برنامج للتنبيه بمواقيت الأذان ؟ :
يمكن ذلك بمنتهى البساطة ( تعمدت اختيار ابسط طريقة حتى لا يكون هناك صعوبة في فهم الدرس )،
- افتح مشروع جديد من النوع WindowsApplication وغير اسم المشروع إلى AzanProject ،
- أنسخ ملف قاعدة البيانات إلى المجلد Bin\Debug من ملفات مشروعك ،
أضف الفئة PrayerTimes من قائمة Project çAdd Existing File ç ثم اختر الملف PrayerTimes.vb .
- الآن عدل النموذج المنشأ ليصبح شبيه بما يلي :-
طبعا للـ AzanTimer الخاصية Enabled بـ True ، Interval بـ 2000 .
الآن إلى الكود :-
- أولا قم باستيراد مجال الأسماء التالي :-
كود :
[align=left]Imports ContriesAzanInfo[/align]
- الآن قم بتعريف الحدث التالي الذي يتم إطلاقه عند حلول وقت صلاة ما .
كود :
[align=left] 'حدث حلول ميعاد الأذان
Event AzanTime(ByVal PrayName As String)[/align]
- ثم قم بتعريف الحقول التالية في التصريحات العامة :-
كود :
[align=left] 'كائن حساب الأذان
Dim PrayerTimesObj As New PrayerTimes[/align]
[align=left] 'Date كائن مواقيت الصلاة لليوم من النوع
Dim PrayerTimesDate As Date()[/align]
[align=left] 'كائن قاعدة البيانات
Dim CountriesInfo As New AzanInfo(Application.StartupPath & "\Azan.adb")[/align]
[align=left] 'مصفوفة باسماء الصلوات الخمس والشروق والغروب
Dim PreysNames() As String = {"الفجر", "الشروق", "الظهر", "العصر", _
"الغروب", "المغرب", "العشاء"}[/align]
[align=left] 'مصفوفة لعدم تكرار التنبية بنفس الصلاة اكثر من مرة
Dim MM() As Integer = {0, 0, 0, 0, 0, 0, 0}[/align]
أريد أن أوضح أن مشيد الفئة AzanInfo يتطلب وسيطة تمثل مسار قاعدة بيانات الدول .
- الآن عرف الإجراء التالي والذي يختبر هل الوقت الحالي يمثل احد عناصر المصفوفة المرسلة ( بمعنى هل الوقت الحالي معاد أذان أم لا ) ، و بناء على ذلك يطلق الحدث AzanTime :-
كود :
[align=left] 'اجراء إختبار هل حان موعد اي صلاة
Sub CheckAthan(ByVal PrayTimes() As Date)[/align]
[align=left] For CurPrayIndex As Integer = 0 To PrayTimes.Length - 1[/align]
[align=left] If CurPrayIndex = 1 Or CurPrayIndex = 4 Then 'ـ 1 تعبر عن الشروق 4 تمثل الغروب
CurPrayIndex += 1
End If[/align]
[align=left] If Now.Minute + (Now.Hour * 60) = (PrayerTimesDate(CurPrayIndex).Minute) + (PrayTimes(CurPrayIndex).Hour * 60) Then[/align]
[align=left] ' اذا تحقق شرط نفس ميعاد الصلاة ،
' فانه يتم اختبار هل تم اطلاق الحدث خلال هذه الدقيقة ام لا [/align]
[align=left] If MM(CurPrayIndex) = 0 Then[/align]
[align=left] ' في حال لم يتم اطلاق الحدث في هذه الدقيقة_
' فانه يتم تعليم هذه الصلاة بانه تم اطلاق الحدث لها
' وازالة التعليم من باقي الصلوات
' ثم إطلاق الحدث[/align]
[align=left] For a As Integer = 0 To MM.Length - 1
MM(a) = 0
Next[/align]
[align=left] MM(CurPrayIndex) = 1[/align]
[align=left] RaiseEvent AzanTime(PreysNames(CurPrayIndex))[/align]
[align=left] Application.DoEvents()
End If[/align]
[align=left] End If[/align]
[align=left] Next
End Sub[/align]
الآن انتهينا من جزء التصريحات ،
أحداث الكائنات :-
- داخل الحدث Load لـ Form1 اكتب :-
كود :
[align=left] 'ملى قائمة الدول من قاعدة البيانات
For Each Country As Country In CountriesInfo.Contries
Me.CountryLst.Items.Add(Country.CountryName)
Next[/align]
[align=left] 'اختيار الدولة الأولى والمدينة الأولى بها ( يمكنك تغييرها ) ـ
CountryLst.SelectedIndex = 0
TownsLst.SelectedIndex = 0[/align]
- داخل الحدث SelectedIndexChanged لـ Countrylst اكتب :-
كود :
[align=left] 'افراغ قائمة المدن
Me.TownsLst.Items.Clear()[/align]
[align=left] 'ملىء قائمة المدن من قاعدة البيانات
For Each Town As Town In CountriesInfo.Contries(Me.CountryLst.SelectedIndex).Towns
Me.TownsLst.Items.Add(Town.TownName.Split("-")(0))
Next[/align]
[align=left] 'اختيار المدينة الأولى
TownsLst.SelectedIndex = 0[/align]
- داخل الحدث SelectedIndexChanged لـ TownsLst اكتب :-
كود :
[align=left] 'المدينة الحالية
With CountriesInfo.Contries(Me.CountryLst.SelectedIndex). _
Towns(Me.TownsLst.SelectedIndex)[/align]
[align=left] 'تعيين طريقة الحساب
PrayerTimesObj.setCalculationMethod([Enum].Parse(GetType(PrayerTimes.Methods), .CalcMethod.ToString))[/align]
[align=left] '( Now ايجاد مواقيت الصلاة لليوم ( لاحظ
PrayerTimesDate = PrayerTimesObj.GetPrayerTimes_Date(Now, .latitude, .longitude, .TimeZonePlus)[/align]
[align=left] 'ملى بيانات المدينة
Me.LatitudeTxt.Text = .latitude
Me.LongitudeTxt.Text = .longitude
Me.TimeZonePlusTxt.Text = .TimeZonePlus
Me.MazhabCmb.SelectedIndex = CInt(.Mazhab)
Me.MethodCmb.SelectedIndex = CInt(.CalcMethod)[/align]
[align=left] 'ملئ مواقيت الصلاة
Me.lblFjr.Text = PrayerTimesDate(0).ToString("mm : hh tt")
Me.lblsunrise.Text = PrayerTimesDate(1).ToString("mm : hh tt")
Me.lblthuhr.Text = PrayerTimesDate(2).ToString("mm : hh tt")
Me.lblasr.Text = PrayerTimesDate(3).ToString("mm : hh tt")
Me.lblsunset.Text = PrayerTimesDate(4).ToString("mm : hh tt")
Me.lblmgrb.Text = PrayerTimesDate(5).ToString("mm : hh tt")
Me.lblisha.Text = PrayerTimesDate(6).ToString("mm : hh tt")[/align]
[align=left] 'تغيير العنوان الى اسم المدينة والدولة
Me.Label40.Text = Me.CountryLst.SelectedItem & " -- " & Me.TownsLst.SelectedItem[/align]
[align=left] 'ازالة التعليم من كل الصلوات
For a As Integer = 0 To MM.Length - 1
MM(a) = 0
Next[/align]
[align=left] End With[/align]
- الآن داخل حدث Tick لـ AzanTimer اكتب :-
كود :
[align=left] CheckAthan(PrayerTimesDate)[/align]
نحن الآن قطعنا نصف المسافة ، والباقي عليك ! ،
- يمكنك اقتناص الحدث AzanTime والتفنن في عرض التنبيه كما يحلو لك ، أنا سأقوم بعرض رسالة MsgBox :p !!
كود :
[align=left] Private Sub Form1_AzanTime(ByVal PrayName As String) Handles Me.AzanTime[/align]
[align=left] MsgBox("حان الآن موعد أذان " & PrayName)[/align]
[align=left] End Sub[/align]
هذا كل شيء :
عموما المرفقات رفعتها في هذه المشاركة :-
قاعدة البيانات الدول .
ملف الـمكتبة DLL .
الفئة المضاف لها الطريقة .
كود المكتبة .
المثال
أتمنى أن تدعو لي بظهر الغيب
تقبلوا تحياتي ؛ أخوكم / أنس محمود
تقبلوا تحياتي ؛ أخوكم / أنس محمود