دوال تشغيل الفيديو موجودة في ملف Microsoft.DirectX.AudioVideoPlayback.dll
الذي أضفناه إلى التطبيق في الدرس السابق
دوال الفيديو تشبه إلى حد كبير دوال الصوت عدى عن إختلافات بسيطة
من اهم هذه الإختلافات أنه يمكنك أن تحدد كائن حاضن Owner Control لشاشة الفيديو
معنى كائن حاضن اي كائن يعمل كشاشة فيديو
أما إذا لم تحدد كائن حاضن فان التطبيق سيفتح نافذه جديدة لتكون شاشة الفيديو
قراءة أحداث المفاتيح كل كائن له صفات و دوال كما عرفنا سابقاً , والكائنات تحتوي أيضاً على أحداث Events
مثلاً الزر له عدة أحداث منها عند الضغط عليه Click وعند الضغط المزدوج DoubleClick
و عند مرور مؤشر الماوس به MouseOver
وفي الدروس السابقة إستخدمنا حدث Click فقط
للتصفح بين أحداث الكائن , إختر الكائن ثم أفتح نافذة الصفات "الخواص" واختر زر الأحداث:
ستظهر لك قائمة بجميع الأحداث للكائن المحدد
ولكي تضيف تعليمات عند حدوث حدث معين اضغط مزدوجاً على أسم الحدث في القائمة
ستتنتقل إلى الشفرة لتكتب التعليمات التي تنفذ عن حدوث ذلك الحدث
ومن الأحداث المهة حدث KeyPress وينطلق هذا الحدث عند الضغط على أي مفتاح
في لوحة المفاتيح .
التطبيق إفتح تطبيق الدرس السابق وعدل النص في زر فتح ملف الصوت إلى "فتح ملف ميديا"
وفي زر تشغيل ملف الصوت إلى "تشغيل ملف ميديا"
أضف زراً جديداً وغير النص فيه إلى "ملئ الشاشة"
قبل تشغيل ملف الفيديو يجب أن نحدد له كائن حاضن ليعمل كشاشة
افتح التصميم وأضف أدات البانيل إلى الفورم:
تأكد من إختيار البانيل و غير صفة الإسم إلى p1
غير صفة العرض Width إلى 400 وصفة الإرتفاع Height إلى 300
من خلال صفة BackgroundImage إختر اي صورة لتكون خلفية الشاشة
ليصبح شكل النافذة هكذا:
أضغط مزدوجاً على أي زر للذهاب إلى الشفرة ,
نحتاج إلى تعريف كائن عام Global من نوع فيديو ولأننا سنستخدمة في أكثر من إجراء
سنعرفه خارج جميع الإجراءات والدوال , إذهب إلى الشفرة حيث عرفنا متغير الصوت في الدرس السابق
وأكتب تعريف كا ئن الفيديو :
- الكود:
-
private Video vp;
تحت تعريف كائن الصوت من الدرس السابق :
سنجعل التطبيق يفتح ملفات صوت أو ملفات فيديو , لكن المشكلة أن للصوت كائن
وللفيديو كائن آخر , وبالتالي يجب أن نعرف نوع الملف حتى نستخدم الكائن المحدد
وبما أن أنواع الفيديو كثيرة جداً فلا يمكننا فحص نوع الملف لتأكد من نوعه
وبالتالي فالحل الوحيد هو أن نحاول أولا تشغيل الملف بكائن الفيديو
فإن ظهر لنا خطأ فنحاول نشغلة بكائن الصوت , وأن ظهر لنا خطأ للمرة الثانية فالملف غير صالح
قد يسأل البعض لماذا بدأنا بتجربة كائن الفيديو مع أن معظم الملفات ستكوت صوت
والإجابة أن كائن الصوت ممكن أن يشغل ملفات فيديو بدون صورة , يعني انه يفتح ملف الفيديو
ويشغل الصوت الذي فيه , وبالتالي فربما يكون الملف فيديو ويتم تشغيله كملف صوت
لذلك يجب أولاً تجربة كائن الفيديو حتى إذا كان ملف فيديو يشغل الصوت مع الصورة
وإذا كان ملف صوت نجرب كائن الصوت ..
لعمل ذلك نحتاج إلى تنفيذ جملة تعقب الإخطاء try مرتين متداخلتين:
- الكود:
-
try
{
//شغل ملف الفيديو
}
catch
{
[COLOR="Blue"]try
{
//شغل ملف الصوت
}
catch
{
[U] //الملف غير صالح[/U]
}[/COLOR]
}
أولا سنجرب فتح ملف فيديو فإذا حدث خطأ فإن المترجم ينتقل لتنفيذ التعليمات داخل جملة catch
والتي هي باللون الأزرق , وهناك جملة tryأخرى نقوم من خلالها بتجربة فتح ملف صوت
فإذا حدث أي خطأ فان المترجم ينتقل لتنفيذ تعليمات catch التي تحتها خط
في زر فتح ملف الميديا أمسح الكود السابق وأكتب بدلاً عنه :
- الكود:
-
OF.ShowDialog();
try
{
vp = Video.FromFile(OF.FileName);
vp.Owner = p1;
p1.Width = 400;
p1.Height = 300;
}
catch
{
[COLOR="Blue"]try
{
ap = Audio.FromFile(OF.FileName);
}
catch
{
[U]MessageBox.Show("الرجاء إختيار ملف صالح");[/U]
} [/COLOR]
}
التعليمة OF.ShowDialog تفتح نافذة فتح ملف ميديا
عند إختيار الملف نجرب تشغيل الفيديو عبر هذه التعليمات:
- الكود:
-
vp = Video.FromFile(OF.FileName);
vp.Owner = p1;
p1.Width = 400;
p1.Height = 300;
في السطر الأول نحمل الملف الموجود في كائن فتح الملف إلى كائن الفيديو
في السطر الثاني نحدد الكائن الحاضن Owner لكائن الفيديو
في السطر الثالث والرابع , نعيد تحديد حجم الكائن الحاضن إلى الحجم الأصلي
لأن ملفات الفيديو لها أحجام مختلفة وحجم الكائن الحاضن قد يختلف على حسب حجم الصورة
في ملف الفيديو لذلك من الأفضل إعادة تحجيم الكائن الحاضن
عند حدوث أي خطأ سينتقل المترجم لتنفيذ الكود باللون الأزرق وتعليمة تحميل ملف الصوت إلى كائن الصوت:
- الكود:
-
ap = Audio.FromFile(OF.FileName);
عند حدوث خطأ آخر هنا سينتقل المترجم إلى تنفيذ تعليمة catch الداخلية وهي إظهار رسالة الخطأ
سنستخدم نفس الطريقة في إجراء الضغط على زر تشغيل ملف الميديا
إفتح التصميم وأضغط علية مزدوجاً للإنتقال للشفرة أمسح الشفرة الموجودة وأكتب بدلاً منها:
- الكود:
-
try
{
vp.Play();
}
catch
{
[COLOR="Blue"]try
{
ap.Play();
}
catch
{
[U] MessageBox.Show("حدث خطأ اثناء محاولة تشغيل الملف");[/U]
}[/COLOR]
}
نجرب تشغيل ملف الفيديو وإذا حدث خطا نجرب تشغيل ملف الصوت وإذا حدث خطأ آخر نظهر رسالة.
افتح التصميم واضغط مزدوجاً على زر ملئ الشاشة وأكتب تعليمة ملئ الشاشة لكائن الفيديو:
- الكود:
-
vp.Fullscreen = true;
كائن الفيديو يحتوي على صفة Fullscreen من نوع قيمة بوليانية اما صح أو خطأ
فإذا حددنا الصفة بقية true فأن تشغيل الفيديو سيكون ملى الشاشة
و إذا حددناها false سيرجع تشغيل الفيديو إلى الكائن الحاضن
عرفنا كيف نجعل التشغيل ملئ الشاشة لكن المشكل كيف نرجعه للكائن الحاضن
لأنه في وضع ملى الشاشة لن نستطيع أن نرى أي شيئ في شاشة الكمبويتر سوى الفيديو
يأتي هنا دور حدث الضغط على أي من مفاتيح لوحة المفاتيح حيث سنجعل الفيديو
يرجع إلى الكائن الحاضن بمجرد الضغط على أي من مفاتيح لوحة المفاتيح
إفتح التصميم وإختر النافذة الأساسية "لا تختر أي زر أو كائن تأكد من إختيار النافذه كلها"
إذهب إلى قائمة الإحداث وأضغط مزردوجاً على الحدث KeyPress
ستنتقل إلى شفرة الحدث , أكتب تعليمة إعادة صورة الفيديو إلى الكائن الحاضن :
- الكود:
-
vp.Fullscreen = false;
هناك مشكلة ستواجهنا هنا وهي في حالة إذا كان تركيز لوحة المفاتيح على زر محدد
فلن ينطلق حدث الضغط على النافذة , سينطلق الحدث على الزر المحدد فقط
والشفرة السابقة على النافذه الأساسية ,,,
الحل أن هناك صفة في النافذة تمكنها من إطلاق الحدث حتى ولو حصل في أي كائن من الكائنات
هذه الخاصية هي KeyPreview عدلها من False إلى True لتصبح كما في الصورة
الآن شغل البرنامج وجرب تشغيل ملف صوت أو فيديو او ملف نصي
تلميحات الأدوات أحيانا تحتاج إلى إظهار ملا حظة بسيطة للمستخدم عن وظيفة زر في التطبيق مثلاً
وتظهر هذا الملاحظات في مستطيل أصفر يظهر بمجرد مرور الماوس من فوق الزر
مثلاً لو تمرر الماوس فوق زر Start في شريط المهام ستظهر هذه الملاحظة
Click here to begin
لعمل مثل هذه الملاحظات في تطبيقنا نحتاج لإضافة كائن جديد
افتح التصميم واسحب كائن تلميحات الأدوات ToolTip
الآن في أي كائن تختارة ستجد صفة جديدة إسمها ToolTip on toolTip1
أكتب فيها أي تلميح نصي للكائن :
عند تشغيل البرنامج وتمرير الماوس من فوق الزر ستظهر الملاحظة هكذا:
الواجب أرسل التطبيق.
.نهاية الدرس الخامس.