السلام عليكم ورحمة الله وبركاته

سلسلة رقم 2 تصميم إسطوانة قرآن كريم
إخوانى أعضاء وزوار المنتدى الكرام أقدم لكم سلسلة رقم 2 لشرح تصميم إسطوانة قرآن كريم وذلك لمحاولة تبسيط شرح بعض الطرق وبعض الأكواد الممكن إستخدامها فى هذا العمل
محتويات هذا الشرح هو لإستكمال السلسلة السابقة سلسلة رقم 1 لشرح تصميم إسطوانة قرآن كريم والإضافة إلى ما تقدم طريقة عمل تشغيل متتالى للآيات والسور وتشغيل من البداية أو من بداية أول سورة بعدما يتم الوصول إلى آخر سورة أو آخر آية وهذا أيضا يعتبر تشغيل متواصل أو متتالى
أيضا يجب أن نفرق دائما بين مصطلح التشغيل المتتالى ومصطلح التكرار للآيات أو السور فكلاهما سوف نتناولة بالشرح التدريجى
نبدأ إن شاء الله
من حيث إنتهينا فى السلسلة السابقة كان لدينا الملف المفتوح التالى وهو الذى سوف نكمل الشرح علية ولمن لم يقم بتحميلة إليك بالملف المفتوح مرة أخرى :

نموذج تصميم برنامج قرآن كريم
بعد تحميل الملف المفتوح السابق سوف ندخل إلى خصائص وأحداث عنصر الميديا بلير حيث هو العنصر الذى سوف يقوم بمهمة التشغيل المتتالى بعد نهاية كل آية والإنتقال أوتوماتيكيا إلى الآية التالية والسورة التالية بعد نهاية قراءة السورة الحالية أيضا بشكل أوتوماتيكيا
ترتيب الأفكار لوضع الأكواد اللازمة لهذه المهمة هو :
1- نريد معرفة عدد الآيات التى تحتويها السورة المختارة من قبل الضغط والإختيار من السور المكتوبة فى عنصر "Tree" فى كل مرة يتم تشغيل عنصر الميديا بلير .
2- بعد معرفة عدد آيات السورة المحددة يصبح من السهل جدا وضع شرط عند نهاية قراءة الآية الحالية أن نزيد رقما ليعبر عن الآية التالية .
3- مطلوب البحث عن المكان الصحيح الذى نضع فية أكوادنا التى نتحكم بها فى عمل البرنامج بشكل مناسب ودقيق كلما أمكننا ذلك وتتم هذه العملية بالتجربة والفهم الصحيح .
التطبيق العملى على الملف المفتوح السابق :
نذهب إلى أحداث عنصر الميديا بلير ونضع فى الحدث "On Play" الكود التالى :
فائدة الكود السابق هو إيجاد أو البحث عن جميع الملفات الصوتية ذات الإمتداد "mp3" فى مجلد السورة التى تم إختيار تشغيل آياتها وتخزين نتيجة البحث على شكل مصفوفة أو جدول فى حالة العثور على ملفات بداخل مجلد السورة المحددة وإذا لم يجد سوف يكون الناتج المخزن هو nil ووضعنا هذا الكود فى هذا الحدث من أحداث عنصر الميديا بلير نظرا لأنه الأنسب والأدق عن تجربة منى .
بعد ذلك نذهب إلى الحدث الأهم وهو "On Finish" فى أحداث الميديا بلير ونضع كود يتحقق من وجود ملفات أو كود شرطى فى حالة وجود ملفات صوتية بداخل مجلد السورة يعمل على الحصول على عددها فكما ذكرنا أن الملفات فى حالة العثور عليها تخزن جميعا كمصفوفة بدخل المتغير السابق الذى كان soura_files والذى وضعناه فى الحدث "On Play"
بالكود السابق يتم معرفة عدد الملفات الصوتية فى حالة العثور عليها فى مجلد السورة المحددة وتخزين القيمة العددية فى المتغير count
بعد ذلك نستطيع عمل مقارنة بسيطة وشرطية فى حالة إختيار آية معينة فإذا وجد أن رقم الآية التى تعمل على عنصر الميديا بلير أقل من العدد الكلى لآيات السورة المحددة
يتعرف العنصر على الآية الجديدة أو رقمها الذى نريد أن نزيد علية رقما ليكون بهذا هو المطلوب لتشغيل الآية التالية أو الآية الجديدة أو السورة الجديدة فيكون الكود المستخدم هو التالى :
وفى الكود السابق سيتم تخزين رقما جديدا معبرا عن رقم الآية التالية المراد تشغيلها عند الإنتهاء من قراءة الآية الحالية وقد إستخدمنا كود لتحويل نص المتغير aya إلى رقما وإضافة رقم 1
بالأكواد السابقة لدينا رقما جديدا معبرا عن الآية الجديدة التى سيعمل الميديا على تشغيلها بعد الحالية فيمكن بهذا أن نستخدم كودين كالتالى :
الكودين السابقين أحدهما أمر يوجه إلى عنصر الشجرة "Tree" يطلب منه أن يعمل على إختيار أو تحديد الآية الجديدة فى السورة التى يقرأها عنصر الميديا بلير وبشكل تلقائى
أما الكود الثانى فهو أمر تشغيل الآية الجديدة بعد إنتهاء الآية الحالية فى عنصر الميديا بلير بشكل تلقائى متتالى .
الكود السابق هو جملة شرطية نطلب منها فى حالة تساوى رقم الآية المنتهية قراءتها فى عنصر الميديا أو كما هو كتبناه الآية المحدد بواسطة عنصر "tree" حيث أن عنصر "Tree" يعمل بشكل تلقائى أيضا متتالى فإن أحد المتغيرات التى كتبناها فية كان المتغير aya
إذا تحقق شرط المساواه لرقم الآية مع المجموع العددى أو الكلى لآيات السورة يعمل على إغلاق نطاق السورة التى تم الإنتهاء من قراءتها بالكامل قراءة متتالية
يمكنك ملاحظة مايحدث عند الإنتهاء إذا نظرت إلى عنصر "Tree" فترى أن الآيات للسورة تم إخفاء ظهورها وقد وضعت حلقة تكرارية لعمل هذا أو تطبيق هذا من 1 إلى 114
والرقم 114 هو طبعا لإجمالى عدد سور القرآن الكريم " يعنى أنا وضعت الحلقة والأكواد للمستقبل ولمن حاول التجربة يجد الأكواد صالحة لجميع آيات و سور القرآن الكريم "
السطر الأول هو لوضع قيمة جديدة للسورة الجديدة المراد تشغيلها بعد الإنتهاء من قراءة آيات السورة الحالية بالكامل فيعمل على زيادة رقم على السورة الحالية ويخزن كرقم جديد معبرا عن السورة الجديدة أو التالية فى المتغير soura
السطر الثانى يعمل على إختار تلقائى فى عنصر الشجرة أو إنتقال تلقائى للسورة التالية
السطر الثالث فائدتة هو فتح النطاق للسورة التالية لإظهار آياتها فى العنصر "Tree" راقب العمل أثناء المعاينة تجد فى حالة إضافة سورة أخرى مع سورة الفاتحة تجد التغيرات المقصودة
السطر الرابع هو لإعادة قيمة المتغير new_aya إلى الرقم 1 لأننا بدأنا سورة جديدة بعد إنتهاء السورة الحالية وعلى ذلك السورة الجديدة أيضا ملفاتها الصوتية مبتدأه من الرقم 1 وحتى نهاية آياتها أى كان عدد آياتها المهم جميع السور تبدأ آياتها من الرقم 1 كملف صوتى فى مجلدها الخاص بها
السطر الخامس يعمل على إختيار أو الإنتقال التلقائى أيضا لتشغيل الآية التالية فى السورة الجديدة بحسب عدد آياتها تشغيلا متتاليا
السطر السادس يعمل على إعطاء أمر تشغيل تلقائى متتالى لعنصر الميديا بلير للآية الجديدة من السورة الجديدة .
فيصبح الكود كاملا فى الحدث "On Finish" فى أحداث الميديا بلير كالتالى :
فى المثال المفتوح التالى يوضح جميع الأكواد السابق شرحها ويعمل بشكل ممتاز متتالى يمكنك الإطلاع علية وعمل المعاينة لترى النتيجة بنفسك

نموذج تصميم برنامج قرآن كريم

وهذا ملف مفتوح يحتوى على سورة الفاتحة وسورة الناس ويمكن إضافة المزيد :
طبعا من المفترض أن أضع سورة الناس فى فولدر بإسم 114 وليس كما وضعتها بهذا المثال فى الفولدر 2 والسبب أنى وضعتها فى فولدر 2 هو عدم إمتلاكى الوقت الكافى حاليا لوضع جميع السور مرتبة وأيضا عدم إمتلاكى الوقت لتقطيع جميع السور القرآنية إلى آيات منفردة فكان هذا مجرد مثال للتوضيح
وطبعا هذا لن يؤثر على تشغيل السورة بالشكل السليم فى هذا المثال ألقى نظرة على هذا المثال :

نموذج تصميم برنامج قرآن كريم

يتبقى لنا المرحلة الأخيرة للتشغيل المتتالى وهى بمجرد الوصول إلى آخر آية من آخر سورة موجودة فى العنصر "Tree" أن يتم التشغيل من البداية أى من أول سورة وهى سورة الفاتحة مرة أخرى وهكذا إلى مالا نهاية ..............
تتم هذه العملية بنجاح بزيادة بسيطة جدا فى الأكواد الموجودة فى الحدث "On Finish" وهذه الزيادة عبارة عن جملة شرطية عند تحققها تتم هذة العملية
الجملة الشرطية تبدأ بالكود التالى :
وفائدة هذا الكود السابق هو إذا كانت السورة التالية تساوى إجمالى عدد السور الموضوعة فى البرنامج أو فى المثال السابق + 1
فى مثالى السابق كان عدد السور هو 2 فقط لذلك يكون الشرط كما هو موضح أعلاة
فعند تحقق هذا الشرط فعلا سوف يتم تنفيذ الكود التالى :
السطر الأول هو تعريف المتغير soura المعبر عن السورة التالية بعد الإنتهاء من قراءة السورة الحالية كاملة بأن السورة الجديدة المراد الإنتقال إليها ستكون هى السورة رقم 1
السطر الثانى يعطى أمر إختيار أو إنتقال إلى السورة فى العنصر "Tree" بشكل تلقائى
السطر الثالث يعطى أمر إظهار لآيات السورة التى سيتم تشغيلها والإنتقال إليها بشكل تلقائى
السطر الرابع هو تعريف المتغير new_aya والمعبر عن الآية الجديدة التى سيتم الإنتقال إليها فى السورة الجديدة التى تم الإنتقال إليها بأنها ستكون الآية رقم 1
السطر الخامس هو أمر موجه إلى عنصر "Tree" لإختيار أو الإنتقال إلى الآية الجديدة طبعا بشكل تلقائى .
فيصبح الكود بالكامل الواجب وضعة فى الحدث "On Finish" فى أحداث الميديا بلير هو كالتالى :
إليك أخى وعزيزى القارئ المثال المفتوح الذى من خلالة يمكنك المعاينة لرؤية النتيجة بنفسك :

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

سلسلة رقم 2 تصميم إسطوانة قرآن كريم
إخوانى أعضاء وزوار المنتدى الكرام أقدم لكم سلسلة رقم 2 لشرح تصميم إسطوانة قرآن كريم وذلك لمحاولة تبسيط شرح بعض الطرق وبعض الأكواد الممكن إستخدامها فى هذا العمل
محتويات هذا الشرح هو لإستكمال السلسلة السابقة سلسلة رقم 1 لشرح تصميم إسطوانة قرآن كريم والإضافة إلى ما تقدم طريقة عمل تشغيل متتالى للآيات والسور وتشغيل من البداية أو من بداية أول سورة بعدما يتم الوصول إلى آخر سورة أو آخر آية وهذا أيضا يعتبر تشغيل متواصل أو متتالى
أيضا يجب أن نفرق دائما بين مصطلح التشغيل المتتالى ومصطلح التكرار للآيات أو السور فكلاهما سوف نتناولة بالشرح التدريجى
نبدأ إن شاء الله
من حيث إنتهينا فى السلسلة السابقة كان لدينا الملف المفتوح التالى وهو الذى سوف نكمل الشرح علية ولمن لم يقم بتحميلة إليك بالملف المفتوح مرة أخرى :

نموذج تصميم برنامج قرآن كريم
بعد تحميل الملف المفتوح السابق سوف ندخل إلى خصائص وأحداث عنصر الميديا بلير حيث هو العنصر الذى سوف يقوم بمهمة التشغيل المتتالى بعد نهاية كل آية والإنتقال أوتوماتيكيا إلى الآية التالية والسورة التالية بعد نهاية قراءة السورة الحالية أيضا بشكل أوتوماتيكيا
ترتيب الأفكار لوضع الأكواد اللازمة لهذه المهمة هو :
1- نريد معرفة عدد الآيات التى تحتويها السورة المختارة من قبل الضغط والإختيار من السور المكتوبة فى عنصر "Tree" فى كل مرة يتم تشغيل عنصر الميديا بلير .
2- بعد معرفة عدد آيات السورة المحددة يصبح من السهل جدا وضع شرط عند نهاية قراءة الآية الحالية أن نزيد رقما ليعبر عن الآية التالية .
3- مطلوب البحث عن المكان الصحيح الذى نضع فية أكوادنا التى نتحكم بها فى عمل البرنامج بشكل مناسب ودقيق كلما أمكننا ذلك وتتم هذه العملية بالتجربة والفهم الصحيح .
التطبيق العملى على الملف المفتوح السابق :
نذهب إلى أحداث عنصر الميديا بلير ونضع فى الحدث "On Play" الكود التالى :
كود:
soura_files = File.Find("AutoPlay\\Docs\\"..soura, "*.mp3", false, false, nil, nil);
بعد ذلك نذهب إلى الحدث الأهم وهو "On Finish" فى أحداث الميديا بلير ونضع كود يتحقق من وجود ملفات أو كود شرطى فى حالة وجود ملفات صوتية بداخل مجلد السورة يعمل على الحصول على عددها فكما ذكرنا أن الملفات فى حالة العثور عليها تخزن جميعا كمصفوفة بدخل المتغير السابق الذى كان soura_files والذى وضعناه فى الحدث "On Play"
كود:
-- if soura_files~=nil then count = Table.Count(soura_files);
بعد ذلك نستطيع عمل مقارنة بسيطة وشرطية فى حالة إختيار آية معينة فإذا وجد أن رقم الآية التى تعمل على عنصر الميديا بلير أقل من العدد الكلى لآيات السورة المحددة
يتعرف العنصر على الآية الجديدة أو رقمها الذى نريد أن نزيد علية رقما ليكون بهذا هو المطلوب لتشغيل الآية التالية أو الآية الجديدة أو السورة الجديدة فيكون الكود المستخدم هو التالى :
كود:
-- if String.ToNumber(aya) < count then new_aya = String.ToNumber(aya)+1 ;
بالأكواد السابقة لدينا رقما جديدا معبرا عن الآية الجديدة التى سيعمل الميديا على تشغيلها بعد الحالية فيمكن بهذا أن نستخدم كودين كالتالى :
كود:
-- Tree.SetSelectedNode("Tree1", soura.."."..new_aya); MediaPlayer.Load("Plugin1", "AutoPlay\\Docs\\"..soura.."\\"..new_aya..".mp3");
أما الكود الثانى فهو أمر تشغيل الآية الجديدة بعد إنتهاء الآية الحالية فى عنصر الميديا بلير بشكل تلقائى متتالى .
كود:
-- elseif String.ToNumber(aya) == count then for i=1,114 do Tree.SetNode("Tree1", soura, {Expanded=false}); end
إذا تحقق شرط المساواه لرقم الآية مع المجموع العددى أو الكلى لآيات السورة يعمل على إغلاق نطاق السورة التى تم الإنتهاء من قراءتها بالكامل قراءة متتالية
يمكنك ملاحظة مايحدث عند الإنتهاء إذا نظرت إلى عنصر "Tree" فترى أن الآيات للسورة تم إخفاء ظهورها وقد وضعت حلقة تكرارية لعمل هذا أو تطبيق هذا من 1 إلى 114
والرقم 114 هو طبعا لإجمالى عدد سور القرآن الكريم " يعنى أنا وضعت الحلقة والأكواد للمستقبل ولمن حاول التجربة يجد الأكواد صالحة لجميع آيات و سور القرآن الكريم "
كود:
-- soura=tonumber(soura)+1; Tree.SetSelectedNode("Tree1", soura); Tree.SetNode("Tree1", soura, {Expanded=false}); new_aya = 1 ; Tree.SetSelectedNode("Tree1", soura.."."..new_aya); MediaPlayer.Load("Plugin1", "AutoPlay\\Docs\\"..soura.."\\"..new_aya..".mp3");
السطر الثانى يعمل على إختار تلقائى فى عنصر الشجرة أو إنتقال تلقائى للسورة التالية
السطر الثالث فائدتة هو فتح النطاق للسورة التالية لإظهار آياتها فى العنصر "Tree" راقب العمل أثناء المعاينة تجد فى حالة إضافة سورة أخرى مع سورة الفاتحة تجد التغيرات المقصودة
السطر الرابع هو لإعادة قيمة المتغير new_aya إلى الرقم 1 لأننا بدأنا سورة جديدة بعد إنتهاء السورة الحالية وعلى ذلك السورة الجديدة أيضا ملفاتها الصوتية مبتدأه من الرقم 1 وحتى نهاية آياتها أى كان عدد آياتها المهم جميع السور تبدأ آياتها من الرقم 1 كملف صوتى فى مجلدها الخاص بها
السطر الخامس يعمل على إختيار أو الإنتقال التلقائى أيضا لتشغيل الآية التالية فى السورة الجديدة بحسب عدد آياتها تشغيلا متتاليا
السطر السادس يعمل على إعطاء أمر تشغيل تلقائى متتالى لعنصر الميديا بلير للآية الجديدة من السورة الجديدة .
فيصبح الكود كاملا فى الحدث "On Finish" فى أحداث الميديا بلير كالتالى :
كود:
-- if soura_files~=nil then count = Table.Count(soura_files); if String.ToNumber(aya) < count then new_aya = String.ToNumber(aya)+1 ; Tree.SetSelectedNode("Tree1", soura.."."..new_aya); MediaPlayer.Load("Plugin1", "AutoPlay\\Docs\\"..soura.."\\"..new_aya..".mp3"); elseif String.ToNumber(aya) == count then for i=1,114 do Tree.SetNode("Tree1", soura, {Expanded=false}); end soura=tonumber(soura)+1; Tree.SetSelectedNode("Tree1", soura); Tree.SetNode("Tree1", soura, {Expanded=false}); new_aya = 1 ; Tree.SetSelectedNode("Tree1", soura.."."..new_aya); MediaPlayer.Load("Plugin1", "AutoPlay\\Docs\\"..soura.."\\"..new_aya..".mp3"); end end


نموذج تصميم برنامج قرآن كريم


طبعا من المفترض أن أضع سورة الناس فى فولدر بإسم 114 وليس كما وضعتها بهذا المثال فى الفولدر 2 والسبب أنى وضعتها فى فولدر 2 هو عدم إمتلاكى الوقت الكافى حاليا لوضع جميع السور مرتبة وأيضا عدم إمتلاكى الوقت لتقطيع جميع السور القرآنية إلى آيات منفردة فكان هذا مجرد مثال للتوضيح
وطبعا هذا لن يؤثر على تشغيل السورة بالشكل السليم فى هذا المثال ألقى نظرة على هذا المثال :

نموذج تصميم برنامج قرآن كريم

يتبقى لنا المرحلة الأخيرة للتشغيل المتتالى وهى بمجرد الوصول إلى آخر آية من آخر سورة موجودة فى العنصر "Tree" أن يتم التشغيل من البداية أى من أول سورة وهى سورة الفاتحة مرة أخرى وهكذا إلى مالا نهاية ..............
تتم هذه العملية بنجاح بزيادة بسيطة جدا فى الأكواد الموجودة فى الحدث "On Finish" وهذه الزيادة عبارة عن جملة شرطية عند تحققها تتم هذة العملية
الجملة الشرطية تبدأ بالكود التالى :
كود:
if soura==3 then
فى مثالى السابق كان عدد السور هو 2 فقط لذلك يكون الشرط كما هو موضح أعلاة
فعند تحقق هذا الشرط فعلا سوف يتم تنفيذ الكود التالى :
كود:
-- soura=1; Tree.SetSelectedNode("Tree1", soura); Tree.SetNode("Tree1", soura, {Expanded=false}); new_aya = 1 ; Tree.SetSelectedNode("Tree1", soura.."."..new_aya);
السطر الثانى يعطى أمر إختيار أو إنتقال إلى السورة فى العنصر "Tree" بشكل تلقائى
السطر الثالث يعطى أمر إظهار لآيات السورة التى سيتم تشغيلها والإنتقال إليها بشكل تلقائى
السطر الرابع هو تعريف المتغير new_aya والمعبر عن الآية الجديدة التى سيتم الإنتقال إليها فى السورة الجديدة التى تم الإنتقال إليها بأنها ستكون الآية رقم 1
السطر الخامس هو أمر موجه إلى عنصر "Tree" لإختيار أو الإنتقال إلى الآية الجديدة طبعا بشكل تلقائى .
فيصبح الكود بالكامل الواجب وضعة فى الحدث "On Finish" فى أحداث الميديا بلير هو كالتالى :
كود:
-- if soura_files~=nil then count = Table.Count(soura_files); if String.ToNumber(aya) < count then new_aya = String.ToNumber(aya)+1 ; Tree.SetSelectedNode("Tree1", soura.."."..new_aya); MediaPlayer.Load("Plugin1", "AutoPlay\\Docs\\"..soura.."\\"..new_aya..".mp3"); elseif String.ToNumber(aya) == count then for i=1,114 do Tree.SetNode("Tree1", soura, {Expanded=false}); end soura=tonumber(soura)+1; Tree.SetSelectedNode("Tree1", soura); Tree.SetNode("Tree1", soura, {Expanded=false}); new_aya = 1 ; Tree.SetSelectedNode("Tree1", soura.."."..new_aya); MediaPlayer.Load("Plugin1", "AutoPlay\\Docs\\"..soura.."\\"..new_aya..".mp3"); end end if soura==3 then soura=1; Tree.SetSelectedNode("Tree1", soura); Tree.SetNode("Tree1", soura, {Expanded=false}); new_aya = 1 ; Tree.SetSelectedNode("Tree1", soura.."."..new_aya); end
إليك أخى وعزيزى القارئ المثال المفتوح الذى من خلالة يمكنك المعاينة لرؤية النتيجة بنفسك :

نموذج تصميم برنامج قرآن كريم
إن شاء الله نضع السلسلة مرحلة مرحلة تدريجيا
إلى اللقاء مع تكرار الآيات

تحياتى أخوكم عبود

تعليق