أضف مؤقت Timer , ستلاحظ انه سيضاف إلى الشريط الأصفر تحت نافذة التصميم
إختر المؤقت وقم بتعديل خاصية Interval إلى 1000 ,"ثانية واحدة"
وعدل قيمة الخاصية Enabled إلى True , هذه الخاصية تقوم بتشغيل أو تعطيل عمل الموقت
فإذا كانت القمية True فالمؤقت مفعل , أما إذا كانت False فهو معطل ولن يعمل
أضف كائن التنقل TrackBar ليستخدم كأداة تنقل عبر الملف
إختر كائن التنقل و عدل الخاصية TickFrequency إلى 0 لكي تختفي خطول القياس
وعدل الخاصية TickStyle إلى Both إذا أردت
كائن التنقل يرجع قيمة بين الخاصيتين Minimum و Maximum
فمثلاً إذا كان Minimum = 0 و Maximum=50 فإن الخاصية Value سترجع قيمة بين 0 و 50
تمثل مكان المؤشر بالنسبة للكائن فمثلاً إذا كان المؤشر في منتصف الكائن فإن Value سترجع الرقم 25
وبما اننا نحتاج للتنقل عبر الملف فالمفروض أن نعدل الخاصية Minimum إلى 0
ونعدل الخاصية Maximum إلى طول الملف حتى ترجع القمية Value رقم بين 0 وطول الملف
وبما أن طول كل ملف يختلف عن الملف الآخر , فإننا سنعدل الخاصية Maximum عند تحميل أي ملف
ولن نحتاج لتعديل الخاصية Minimum لأن قيمتها الإفتراضية هي 0
سيصبح شكل النافذه هكذا:
إجراء ضبط كائن التنقل إنقل هذا الكود إلى شفرة البرنامج مع مراعات أن يكون خارج أي إجراء آخر
- الكود:
-
void SetTrackBar()
{
if (type=="V")
{
trackBar1.Maximum=Convert.ToInt32(vp.Duration);
}
else if (type=="A")
{
trackBar1.Maximum=Convert.ToInt32(ap.Duration);
}
else if (type=="R")
{
trackBar1.Maximum=Convert.ToInt32(rp.GetLength());
}
}
إسم الإجراء هو SetTrackBar ونقوم فيه بفحص نوع الملف كما شرحنا في الدرس السابق
فإذا كان نوع الملف صوت أو فيديو فإنا نأخذ طول الملف عبر الخاصية Duration
ثم نحول الرقم إلى عدد صحيح عبر كائن التحويل Convert.ToInt32
والرقم الناتج نحملة لخاصية Maximum في كائن التنقل , وبهذا مهما تنقلنا في الكائن فأن القيمة الناتجة ستكون بين 0 و طول الملف
إما إذا كان نوع الملف rm فإنا نأخذ طول الملف عبر الخاصية GetLength ونحول الرقم إلى عدد صحيح ونحمله للخاصية Maximum
ذلك هو إجراء ضبط القيمة العظمى لكائن التنقل ,لكن أين نستدعي هذا الإجراء ؟؟؟
أفضل مكان لإستدعاء هذا الإجراء هو بعد تحميل الملف أي بعد إستدعاء إجراء التحميل LoadFile
إفتح كود زر فتح الملف وأضف تعليمة الإستدعاء بعد تعليمة إستدعاء إجراء تحميل الملف:
- الكود:
-
OF.ShowDialog();
LoadFile(OF.FileName);
[COLOR=Blue] SetTrackBar();[/COLOR]
PlayFile();
اللون الأزرق يمثل الزيادة التي أضفناها إلى الشفرة.
بعد أن قمنا بضبط القمية العظمى لكائن التنقل نحتاج لكود التنقل عبر الملف
إي أننا نحتاج لكود يقوم بالتنقل عبر الملف بمجرد تغيير مؤشر كائن التنقل
إضغط مزدوجا على كائن التنقل لتنتقل إلى الكود الذي يتنفذ بمجرد تغيير المؤشر TrackBar1Scroll
إنسخ الكود التالي :
- الكود:
-
if (type=="V")
{
vp.CurrentPosition=trackBar1.Value;
}
else if (type=="A")
{
ap.CurrentPosition=trackBar1.Value;
}
else if (type=="R")
{
rp.SetPosition(trackBar1.Value);
}
عند تغيير مؤشر كائن التغيير سيقوم المعالج بتنفيذ الكود السابق
trackBar1.Value ترجع رقم بين 0 و طول الملف على حسب موقع المؤشر
حيث نقوم بفحص نوع الملف فإذا كان فيديو أو صوت نعدل موقع التشغيل عبر الخاصية CurrenPosition
أما إذا كان rm فنعدل موقع التشغيل عبر الخاصية SetPosition.
الآن نحتاج إلى كود لتحريك مؤشر كائن التنقل ليحدد الموقع الذي وصل إليه التشغيل
لعمل ذلك نحتاج لإستخدام المؤقت حيث نقوم كل ثانية بفحص موقع التشغيل ونعدل موقع المؤشر
إضغط مزدوجاً على كائن المؤقت لتنتقل إلى الكود الذي ينفذ كل ثانية وأنسخ الكود التالي :
- الكود:
-
if (type=="V")
{
trackBar1.Value=Convert.ToInt32(vp.CurrentPosition);
}
else if (type=="A")
{
trackBar1.Value= Convert.ToInt32(ap.CurrentPosition);
}
else if (type=="R")
{
trackBar1.Value=Convert.ToInt32(rp.GetPosition());
}
الكود السابق سينفذ كل ثانية لإننا حددنا خاصية Interval في المؤقت إلى 1000
يقم الكود السابق بفحص نوع الملف فإذا كان صوت أو فيديو نقوم بأخذ موقع التشغيل الحالي
عبر الخاصية CurrentPosition ونحولها إلى عدد صحيح ونحمل الرقم الناتج إلى الخاصية Value
حيث أن الخاصية Value تمثل موقع مؤشر كائن التنقل .
وإذا كان الملف rm نأخذ طول الملف عبر الخاصية GetPosition ونحولها إلى عدد صحيح
ونحملها في خاصية موقع المؤشر Value
الكود السابق يقوم بتغيير موقع مؤشر كائن التنقل على حسب موقع التشغيل الذي وصل إليه الملف.
بقي لنا كود زري التقديم والتأخير ..
إضغط مزدوجاً على زر التقديم وأنقل الكود التالي :
- الكود:
-
if (type=="V")
{
vp.CurrentPosition=vp.CurrentPosition+20;
}
else if (type=="A")
{
ap.CurrentPosition=ap.CurrentPosition+20;
}
else if (type=="R")
{
rp.SetPosition(rp.GetPosition()+20000);
}
في الكود السايق نقوم بتعديل موقع التشغيل ليكون موقع التشغيل الحالي + 20 ثانية
أي أننا إذا ضغطنا على زر التقديم فان التشغيل سيقفز 20 ثانية إلى الأمام
يمكن وضع عدد أكبر من العشرين ثانية إذا أردت أو أصغر ..
لاحظ أنه إذا كان نوع الملف rm فإننا إضفنا إلى الموقع الحالي 20000 لأن مشغل rm يتعامل بالملي ثانية
شغل البرنامج وإفتح ملف ميديا وجرب تحريك مؤشر كائن التنقل.
الواجب * أكتب كود زر التأخير ..
* قد يحدث خطأ في زري التقديم والتأخير إذا تم التأخير لأقل من صفر أو التقديم لأكثر من طول الملف
لذلك يجب وضع كود الزرين داخل جملة try هكذا:
- الكود:
-
try
{
//كود التقديم أو التأخير
}
catch
{
}
عند حدوث خطأ لن يتم تنفيذ أي شيئ.
* أرسل التطبيق.
ملاحظات:
* تأكد من إتجاه مؤشر كائن التنقل من خلال الخاصية RightToLeft.
* لجعل خلفية الزر شفافة عدل خاصية FlatStyle إلى Popup
و خاصية BackColor إلى Transparent
* يمكن تغيير الصور في الأزرار بواسطة الخاصية Image.
* يمكن تعديل لون خلفية الكائن الحاضن للفيديو إلى شفاف لتصبح كما في الصورة .
* للأسف ليست كل الكائنات تدعم الخلفية الشفافة , فكائن التنقل مثلاً لا يدعمها ..
ملاحظة لمستخدمي بيئة Sharp Developer: إحياناً عند الضغط المزدوج على المؤقت يحصل خطأ وتغلق بيئة التطوير
ولكتابة كود المؤقت إذا حدث هذا الخطأ دون الضغط مزدوجاً على المؤقت:
افتح شفرة التصميم من خلال فتح مستعرض الملفات ثم فتح MainForm.Designer.cs
و ابحث عن كود تعريف المؤقت وأضف بعده هذا السطر:
- الكود:
-
this.timer1.Tick+=new System.EventHandler(this.Timer1Tick);
كما في الصورة :
ثم إفتح شفرة البرنامج عند الإجراءات من خلال إختيار MainForm.cs
وأضف هذا الإجراء وتأكد أنه خارج أي إجراء:
- الكود:
-
void Timer1Tick(object sender, System.EventArgs e)
{
if (type=="V")
{
trackBar1.Value=Convert.ToInt32(vp.CurrentPosition);
}
else if (type=="A")
{
trackBar1.Value= Convert.ToInt32(ap.CurrentPosition);
}
else if (type=="R")
{
trackBar1.Value=Convert.ToInt32(rp.GetPosition());
}
}
.نهاية الدرس السابع.