العودة   منتدى رياض الجنة - Riad Al-Ganah > الرياض التقنية > روضة الكورسات والدورات التقنية والعلمية > روضة دورات تقنية الـ .NET بلغاتها المختلفة > روضة دورات لغة الـ CSharp > دورة CSharp 2005 من منتديات المشاغب

دورة CSharp 2005 من منتديات المشاغب مقدم الدورة : مجموعة حماة النهضة . حالة الدورة : انتهت . عدد الدروس : 17 درس

إضافة رد

 
أدوات الموضوع انواع عرض الموضوع
  #1  
قديم 03-22-2010, 03:37 PM
الصورة الرمزية khaledbelal
khaledbelal khaledbelal غير متواجد حالياً
مبرمج المنتدى
الادارة تكليف لا تشريف
 
تاريخ التسجيل: Oct 2009
العمر: 34
المشاركات: 3,606
افتراضي الدرس السابع : التنقل في ملف الميديا - دورة CSharp 2005

الدرس السابع


التنقل في الملف

ملف الصوت أو الفيديو يحتوي على خاصية طول الملف أي أن كل ملف له طول زمني

ويتم قياس الطول في مشغلات ميكروسوفت بالثانية , وفي مشغلات rm بالملي ثانية

يتم إيجاد طول الملف من خلال الخاصية Duration في مشغلات ميكروسوفت

أو الخاصية GetLength في مشغلات rm

مثلا التعليمة التالية :
كود PHP:
     ap.Duration
ستنتج رقم يحدد طول الملف بالثواني مثلاُ إذا أنتجت رقم 100 يعني هذا أن طول الملف 100 ثانية

أم التعليمة التالية:

كود PHP:
     rp.GetLength(); 
فهي تنتج رقم يحدد طول الملف بالملي ثانية مثلاً إذا أنتجت 50000 يعني أن طول الملف 50 ثانية

إذاً هناك فرق كبير بين قيمة طول الملف في مشغلات ميكروسوفت ومشغلات rm

من أهم الوظائف لأي مشغل ميديا هو إمكانية التنقل عبر الملف سوءاً تقديماً أو تأخيراً

ويتم التنقل عبر الملف من خلال تعديل خاصية من خصائص كائن التشغيل

الخاصية ترجع قيمة تحتوي على رقم يمثل موقع التشغيل الحالي

مثلاً إذا أرجعت الخاصية الرقم 50 في مشغل ميكروسوفت فهذا يعني أن تشغيل الملف وصل إلى الثانية رقم 50

أما إذا أرجعت 40000 في مشغلات rm فهذا يعني أن تشغيل الملف وصل إلى الثانية رقم 40

الخاصية في مشغلات ميكروسوفت هي CurrentPosition سواءاً لقراءة القمية أو لتعديلها

فمثلاً التعليمة التالية:

كود PHP:
     ap.CurrentPosition
ترجع رقم يمثل رقم الثانية الذي وصل إليها التشغيل , فمثلاً لو كان طول الملف 100 ثانية

وأرجعت الرقم 50 فهذا يعني أن تشغيل الملف وصل إلى المنتصف

أما التعليمة التالية:
كود PHP:
     ap.CurrentPosition=60
هذه التعليمة تقوم بنقل التشغيل إلى الثانية رقم 60 , أي أن التشغيل يقفز من موقعه إلى الثانية رقم 60

وفي مشغلات rm هي GetPosition لقراءة القمية أو SetPosition لتعديل القيمة

فمثلاً التعليمة :
كود PHP:
     rp.GetPosition(); 
ترجع رقم يمثل رقم الملي ثانية الذي وصل إليها التشغيل فمثلاُ إذا كان طول الملف 10000 ملي ثانية

وأرجعت الرقم 5000 فهذا يعني أن التشغيل وصل إلى الثانية رقم 5 اي إلى منتصف الملف

أما التعليمة التالية:
كود PHP:
     rp.SetPosition(60000); 
هذه التعليمة تقوم بنقل التشغيل إلى الثانية رقم 60 , لاحظ أن جميع تعاملات مشغل rm تكون بالملي ثانية

وليست بالثانية كما في مشغلات ميكروسوفت , والثانية الواحد = 1000 ملي ثانية

إذاً التنقل عبر الملف يتم من خلال تعديل خاصية موقع التشغيل

الموقت Timer

المؤقت هو عبارة عن كائن لضبط الوقت , ويستخدم لتكرار حدث معين خلال فترة زمنية محددة

مثلاً إظهار رسالة كل 50 ثانية , أو تنفيذ كود معين كل 10 ثوان



يتم تحديد طول الفترة الزمنية من خلال تعديل الخاصية "الصفة" Interval

حيث أن هذه الخاصية تأخذ الزمن بالملي ثانية أي أنه إذا أردنا أن تكون الفتره ثانية واحدة

فإن الخاصية Interval يجب ان تكون قيمتها 1000 , وإذا أردنا ثانيتين تكون 2000

ويتم كتابة الكود المراد تنفيذه من خلال الضغط مزدوجاً على المؤقت

في هذا الدرس سنستخدم الموقت ليفحص موقع تشغيل الملف كل ثانية

التطبيق

إفتح تطبيق الدرس السابق , وأضف زرين للتقديم والتأخير

أضف مؤقت 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

سيصبح شكل النافذه هكذا:



إجراء ضبط كائن التنقل

إنقل هذا الكود إلى شفرة البرنامج مع مراعات أن يكون خارج أي إجراء آخر
كود PHP:
     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

إفتح كود زر فتح الملف وأضف تعليمة الإستدعاء بعد تعليمة إستدعاء إجراء تحميل الملف:

كود PHP:
     OF.ShowDialog();
 
LoadFile(OF.FileName);
 
SetTrackBar();
 
PlayFile(); 
اللون الأزرق يمثل الزيادة التي أضفناها إلى الشفرة.

بعد أن قمنا بضبط القمية العظمى لكائن التنقل نحتاج لكود التنقل عبر الملف

إي أننا نحتاج لكود يقوم بالتنقل عبر الملف بمجرد تغيير مؤشر كائن التنقل

إضغط مزدوجا على كائن التنقل لتنتقل إلى الكود الذي يتنفذ بمجرد تغيير المؤشر TrackBar1Scroll

إنسخ الكود التالي :
كود PHP:
     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.

الآن نحتاج إلى كود لتحريك مؤشر كائن التنقل ليحدد الموقع الذي وصل إليه التشغيل

لعمل ذلك نحتاج لإستخدام المؤقت حيث نقوم كل ثانية بفحص موقع التشغيل ونعدل موقع المؤشر

إضغط مزدوجاً على كائن المؤقت لتنتقل إلى الكود الذي ينفذ كل ثانية وأنسخ الكود التالي :
كود PHP:
     if (type=="V")
 {
 
trackBar1.Value=Convert.ToInt32(vp.CurrentPosition);
 }
 else if (
type=="A")
 { 
trackBar1.ValueConvert.ToInt32(ap.CurrentPosition);
 }
 else if (
type=="R"
{
 
trackBar1.Value=Convert.ToInt32(rp.GetPosition()); 

الكود السابق سينفذ كل ثانية لإننا حددنا خاصية Interval في المؤقت إلى 1000

يقم الكود السابق بفحص نوع الملف فإذا كان صوت أو فيديو نقوم بأخذ موقع التشغيل الحالي

عبر الخاصية CurrentPosition ونحولها إلى عدد صحيح ونحمل الرقم الناتج إلى الخاصية Value

حيث أن الخاصية Value تمثل موقع مؤشر كائن التنقل .

وإذا كان الملف rm نأخذ طول الملف عبر الخاصية GetPosition ونحولها إلى عدد صحيح

ونحملها في خاصية موقع المؤشر Value

الكود السابق يقوم بتغيير موقع مؤشر كائن التنقل على حسب موقع التشغيل الذي وصل إليه الملف.

بقي لنا كود زري التقديم والتأخير ..

إضغط مزدوجاً على زر التقديم وأنقل الكود التالي :
كود PHP:
     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 هكذا:

كود PHP:
     try
{
//كود التقديم أو التأخير
}
catch
{

عند حدوث خطأ لن يتم تنفيذ أي شيئ.

* أرسل التطبيق.

ملاحظات:

* تأكد من إتجاه مؤشر كائن التنقل من خلال الخاصية RightToLeft.

* لجعل خلفية الزر شفافة عدل خاصية FlatStyle إلى Popup

و خاصية BackColor إلى Transparent



* يمكن تغيير الصور في الأزرار بواسطة الخاصية Image.

* يمكن تعديل لون خلفية الكائن الحاضن للفيديو إلى شفاف لتصبح كما في الصورة .



* للأسف ليست كل الكائنات تدعم الخلفية الشفافة , فكائن التنقل مثلاً لا يدعمها ..



ملاحظة لمستخدمي بيئة Sharp Developer:

إحياناً عند الضغط المزدوج على المؤقت يحصل خطأ وتغلق بيئة التطوير

ولكتابة كود المؤقت إذا حدث هذا الخطأ دون الضغط مزدوجاً على المؤقت:

افتح شفرة التصميم من خلال فتح مستعرض الملفات ثم فتح MainForm.Designer.cs

و ابحث عن كود تعريف المؤقت وأضف بعده هذا السطر:

كود PHP:
     this.timer1.Tick+=new System.EventHandler(this.Timer1Tick); 
كما في الصورة :



ثم إفتح شفرة البرنامج عند الإجراءات من خلال إختيار MainForm.cs

وأضف هذا الإجراء وتأكد أنه خارج أي إجراء:
كود PHP:
     void Timer1Tick(object senderSystem.EventArgs e)
 {
 if (
type=="V"
{
 
trackBar1.Value=Convert.ToInt32(vp.CurrentPosition); 
}
 else if (
type=="A")
 { 
trackBar1.ValueConvert.ToInt32(ap.CurrentPosition); 
}
 else if (
type=="R"
{
 
trackBar1.Value=Convert.ToInt32(rp.GetPosition()); 


.نهاية الدرس السابع.

..


توقيع : khaledbelal



(أَفَأَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا بَيَاتاً وَهُمْ نَآئِمُونَ {97} أَوَ أَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا ضُحًى وَهُمْ يَلْعَبُونَ {98}
أَفَأَمِنُواْ مَكْرَ اللّهِ فَلاَ يَأْمَنُ مَكْرَ اللّهِ إِلاَّ الْقَوْمُ الْخَاسِرُونَ {99}).
سورة الأعراف.

رد مع اقتباس
إضافة رد


تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

الانتقال السريع

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
الدرس الخامس : تشغيل ملف فيديو - دورة CSharp 2005 khaledbelal دورة CSharp 2005 من منتديات المشاغب 0 03-22-2010 03:26 PM
الدرس الرابع : الإجراءات والدوال - دورة CSharp 2005 khaledbelal دورة CSharp 2005 من منتديات المشاغب 0 03-19-2010 03:39 PM
الدرس الثالث : الجمل الشرطيه - دورة CSharp 2005 microtop دورة CSharp 2005 من منتديات المشاغب 1 03-16-2010 06:19 PM
الدرس الثاني : المتغيرات - دورة CSharp 2005 khaledbelal دورة CSharp 2005 من منتديات المشاغب 0 03-12-2010 03:56 PM
الدرس الاول : مفهوم لغات البرمجة - دورة CSharp 2005 microtop دورة CSharp 2005 من منتديات المشاغب 0 03-09-2010 05:45 PM

استضافة الحياة

الساعة الآن 10:40 AM.


Powered by vBulletin® v3.8.4, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. , TranZ By Almuhajir
النسخة الفضية
Ads Management Version 3.0.1 by Saeed Al-Atwi

SlamDesignzslamDesignzEdited by Riad Al-Ganah Team - جميع الحقوق محفوظة لشبكة رياض الجنة

Privacy Policy Valid XHTML 1.0 Transitional By SlamDesignz Valid CSS Transitional By SlamDesignz