موقع و منتدى لكل ابناء مدينة عين تاغروت وكل الجزائريين والعرب
 
الرئيسيةالرئيسية  أحدث الصورأحدث الصور  التسجيلالتسجيل  دخولدخول  
آخر المواضيع
الموضوع
تاريخ ارسال المشاركة
بواسطة
ترخيص شركات الفوركس في سوق الفوركس
عندما تتداول فى سوق العملات
أكبر سوق مالي على مستوى العالم
الطريقة الآمنة لتداول العملات الأجنبية
جرب التداول الحقيقي مع وسيط جيد
عروض سيارات نيسان
سيارات مستعملة بالتقسيط
حتي تنجح في سوق الفوركس
خبراء توصيات الفوركس
سوق تداول العملات الاجنبية
الخميس نوفمبر 22, 2018 2:28 pm
الأربعاء نوفمبر 21, 2018 11:25 am
الإثنين نوفمبر 19, 2018 12:50 pm
الإثنين نوفمبر 12, 2018 5:34 pm
الأحد أغسطس 12, 2018 6:40 pm
الإثنين يوليو 23, 2018 8:28 pm
الأربعاء مايو 02, 2018 8:17 pm
الخميس أبريل 19, 2018 3:46 pm
الأربعاء أبريل 18, 2018 6:23 pm
الثلاثاء أبريل 17, 2018 5:27 pm










أكثر المواضيع نشاطاًa7medvirus تحميل برنامج فوتوشوب 8 عربي مجانا , تحميل فوتوشوب بالعربي - 163 المساهماتa7medvirus حصريا Jailbreak PS3 3.66 - 136 المساهماتa7medvirus برنامج استعاده الملفات المحذوفه بعد الفورمات + سيريال - 93 المساهماتa7medvirus Windows XP Pro SP2 Français Original نسخة خام باللغة الفرنسية وبرابط واحد فقط !! - 39 المساهماتa7medvirus [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - 31 المساهماتa7medvirus [حصرياً] وضع اطار على البيانات الشخصية والصورة والرتبة بشكل احترافى للنسخة الثانية - 29 المساهماتa7medvirus توصيات الجوال في كل ما يتعلق بالعملات ، الان هنا . - 23 المساهماتa7medvirus كاركتير يعبر عن الثورات العربية ... - 20 المساهماتa7medvirus ::: كاريكاتير الثورة السورية ::: - 19 المساهماتa7medvirus تحميل فوتوشوب 7 عربي - برنامج Adobe Photoshop 7 ME - 18 المساهمات
أنظم لمتآبعينا بتويتر ...

آو أنظم لمعجبينا في الفيس بوك ...

شاطر
 

 [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال

استعرض الموضوع التالي استعرض الموضوع السابق اذهب الى الأسفل 
انتقل الى الصفحة : الصفحة السابقة  1, 2
كاتب الموضوعرسالة
المعلومات
الكاتب:
Tagrot
اللقب:
المدير العام
الرتبه:
المدير العام
الصورة الرمزية

Tagrot


البيانات
نسخة المنتدى :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Fmphpb10
نوع المتصفح :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Fmfire10
صورة البلد :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Dz10
عدد المساهمات :
3013
تاريخ التسجيل :
14/05/2009
العمر :
34
الموقع :
الجزائر

التوقيت

الإتصالات
الحالة:
وسائل الإتصال:
http://tagrot.mountada.biz
مُساهمةموضوع: [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال   [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 I_icon_minitimeالإثنين مارس 11, 2013 7:48 am

تذكير بمساهمة فاتح الموضوع :

السلام عليكم ورحمة الله وبركاته
بإختصار الموضوع عبارة عن مجموعة دروس مبسطة في لغة C# 2005 للمبتدئين
بهدف إنشاء هذا البرنامج لتشغيل الصوتيات والمرئيات :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 1
الدروس ستكون مقسمة إلى قسمين , قسم الدرس وقسم التطبيق
وفي كل درس نبدأ بشرح الفكرة أو المفهوم أو القاعدة
وفي قسم التطبيق نطبق اللي تعلمناه من الدرس على مشروع البرنامج
ونستمر بهذه الطريقة كل درس إلى أن ننجز المشروع
لكن قبل البداية يجب تجهيز برنامجين للعمل على اللغة
البرنامج الأول من ميكروسوف وهو برنامج ملفات لغة البرمجة .NET Framework
للتحميل من هنا
أو من صفحة التحميل الرئيسية لميكروسوفت :
http://www.microsoft.com/downloads/
ثم إبحث عن Net Framework 2.0
حجم الملف يقارب 24 ميجا بايت
عند فتح هذا اللينك ستجد زر مكتوب عليه Download
.........
البرنامج الثاني هو بيئة التطوير , أي المكان الذي سنكتب فيه تعليمات البرنامج ونجربه
يوجد هناك عدة بيئات تطوير مجانية متوفره منها بيئة ميكروسوفت بإصدارها المضغوط Express
لتحميل C# 2005 Express
حجم الملف يقارب 450 ميجا بايت
إذا لم تستطع تحميل هذه البيئة فهناك بيئة أخرى مجانية
Sharp Developer
حجم الملف يقارب 4 ميجا بايت
لتنظيم العمل على الدروس ينصح عمل مجلد جديد على القرص المحلي D وتسميته CS
يجب أولاً تنصيب البرنامج الأول dotnetfx.exe
وعند الإنتهاء منها يتم تنصيب البيئة SharpDevelop2_2.0.0.1591_Setup.exe أو C# Express
وبهذا تكون مستعداً لتلقي الدرس الأول

الموضوع الأصلي : [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال  المصدر : منتديات عين تاغروت
الاوسمه
 :
اوسمه (tagrot)


الرجوع الى أعلى الصفحة اذهب الى الأسفل

كاتب الموضوعرسالة
المعلومات
الكاتب:
Tagrot
اللقب:
المدير العام
الرتبه:
المدير العام
الصورة الرمزية

Tagrot


البيانات
نسخة المنتدى :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Fmphpb10
نوع المتصفح :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Fmfire10
صورة البلد :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Dz10
عدد المساهمات :
3013
تاريخ التسجيل :
14/05/2009
العمر :
34
الموقع :
الجزائر

التوقيت

الإتصالات
الحالة:
وسائل الإتصال:
http://tagrot.mountada.biz
مُساهمةموضوع: رد: [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال   [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 I_icon_minitimeالإثنين مارس 11, 2013 8:16 am











الدرس الثالث عشر


التحكم بالصوت

هناك العديد من الطرق للوصول إلى إجهزة الصوت في نظام التشغيل

منها الطريقة المباشرة و التي تتعامل مباشرة مع محركات أجهزة الصور

وهذه الطريقة معقدة نسبياً وقد تؤدي إلى إعطاب أجهزة الصوت في الحاسوب إذا ما أخطأ المبرمج في تعليمة واحدة

وهناك طرق غير مباشرة تتعامل مع أدوات تشكل وسيط بين أجهزة الصوت ولغة البرمجة

بحيث يسهل التعامل مع الإجهزة , و تجنب أي ضرر في أجهزة الحاسوب إذا ما حدث خطأ ما

الإداة الوسيطة التي سنستخدمها هي أداة Homa_Audio

وهذه الأداة تستخدم إصدار حديث من مكتبة Microsoft.DirectX.dll

وتستخدم مكتبة جديدة Microsoft.DirectX.DirectSound.dll

وبالتالي يجب إستبدال أداة Microsoft.DirectX.dll من الدروس السابقة

بالإصدار الجديد الذي سيتم تنزيله مع الأداة الوسيطة

التطبيق:

أنسخ هذا الملف إلى مجلد Debug داخل مجلد bin داخل مجلد المشروع

الإن إفتح المشروع , ومن نافذة متصفح المشروع إختر Add Reference كما فعلنا في الدرس الرابع :

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image4-3

ستظهر لك هذه النافذة:

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image13-1

إختر Browse من تبويب .Net Assemply ثم أضف ملف

Homa_Audio.dll

الذي قمت بتنزيله

حتى يظهر الملف في قائمة الملفات المختارة رقم 3 , ثم إختر OK

سترى أن الملف تم إضافتها إلى قائمة الملفات الملحقة :

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image13-2

الآن في أعلى كود النافذة الرئيسية للبرنامج

قم بإستدعاء الملف ليتعرف عليه المعالج وذلك بإضافة الكود:




كود:
using Homa_Audio;

يضاف هذا الكود أسفل تعليمات الإضافة السابقة كما في الصورة :

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image13-3

الآن قم بتعريف كائن التحكم بالصوت :




كود:
private HVolume hv=new HVolume();

تحت المتغيرات من الدروس السابقة :

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image13-4

وإذهب إلى التصميم , وإسحب إلى الفورم إداة TrackBar

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image7-2

وغير ترتيب أدوات الفورم حتى يصبح شكلها هكذا :

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image13-5

ثم إختر الأداة التي قمت بإضافتها وغير خاصية Name إلى vt

وغير أيضاً خاصية Value من 0 إلى 10 حيث ستكون هذه هي أداة التحكم بالصوت

من التصميم أنقر مزدوجاً على أداة التحكم بالصوت لتنتقل إلى الكود , ثم أكتب هناك الكود التالي :




كود:
hv.Volume=vt.Value;

كائن التحكم بالصوت hv يحتوي على خاصية Volume تستقبل رقم من 0 إلى 10 يمثل مستوى الصوت

فلو أسندنا لهذه الخاصية القيمة 0 فلن نسمع أي صوت

وبالتالي فهذه الخاصية ستأخذ أي قيمة من 0 إلى 10 من خلال كائن شريط التحكم بالصوت vt

الكود السابق يقوم بقراة قيمة شريط التحكم بالصوت vt و إسنادها إلى كائن التحكم بالصوت hv

الواجب :

أضف مربع إختيار Check Box يمثل خاصية كتم الصوت ليصبح التطبيق هكذا :

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image13-6

مساعدة :

إسحب أداة مربع الإختيار إلى النافذة الرئيسية :

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image13-7

ثم إختره وغير خاصية Name إلى mute وخاصية Text إلى "كتم"

ثم أنقر عليه مزدوجاً لتنتقل إلى الكود وأكتب هذا الكود هناك :



كود:
if(mute.Checked)
{
hv.Volume=...;
}
else
{
hv.Volume=vt.Value;
}

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

وإن لم يكن مختاراً ينفذ ما بين الحاصرتين الثانية وهي إسناد قيمة شريط التحكم بالصوت vt.Value

إلى خاصية Volume في كائن التحكم بالصوت hv

أكل الفراغ بقيمة محددة لكتم الصوت - تم شرحها سابقاً في الدرس -

ثم أرسل التطبيق

ملاحظة :

عند تشغيل التطبيق ثم تفعيل مربع "كتم" سينقطع الصوت

ولكن عند تحريك شريط التحكم بالصوت سيرجع الصوت مع أن مربع "كتم" مفعل

وبالتالي يجب وضح شرط في حدث تحريك كائن الصوت ليتم فحص مربع "كتم"

فإذا كان مربع "كتم" مفعلاً فلا يجب أن يتغير الصوت , ويصبح كود تحريك شريك التحكم بالصوت هكذا :




كود:
if(mute.Checked)
{
}
else
{
hv.Volume=vt.Value;
}

الكود السابق يفحص إذا كان مربع "كتم" مفعل فلن ينفذ شي

وإن لم يكن مفعلاً فسينفذ كود تغيير الصوت

يمكن كتابة الكود السابق بطريقة أخرى , بإستخدام معامل العكس !

حيث يتم إضافة رمز التعجب ! قبل الجملة المنطقية ليعكس الجملة كلها

مثلاً :




كود:
if(mute.Checked)

تعني إذا كان مربع الكتم مفعل , و :




كود:
if(!mute.Checked)

تعني إذا لم يكن مربع الكتم مفعلاً

وبالتالي فيمكن كتابة كود تحريك شريط التحكم بالصوت هكذا :




كود:
if(!mute.Checked)
{
hv.Volume=vt.Value;
}

. نهاية الدرس الثالث عشر





و ما زالت الدروس مستمرة




.

..

الموضوع الأصلي : [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال  المصدر : منتديات عين تاغروت
الاوسمه
 :
اوسمه (tagrot)


الرجوع الى أعلى الصفحة اذهب الى الأسفل
المعلومات
الكاتب:
Tagrot
اللقب:
المدير العام
الرتبه:
المدير العام
الصورة الرمزية

Tagrot


البيانات
نسخة المنتدى :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Fmphpb10
نوع المتصفح :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Fmfire10
صورة البلد :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Dz10
عدد المساهمات :
3013
تاريخ التسجيل :
14/05/2009
العمر :
34
الموقع :
الجزائر

التوقيت

الإتصالات
الحالة:
وسائل الإتصال:
http://tagrot.mountada.biz
مُساهمةموضوع: رد: [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال   [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 I_icon_minitimeالإثنين مارس 11, 2013 8:16 am


الدرس الرابع عشر


تسجيل الصوت

سنضيف في هذا الدرس خاصية مهمة للتطبيق

وهي إمكانية تسجيل الصوت سواء من الإجهزة الخارجية بواسطة لاقط الصوت

أو من الكمبيوتر نفسة بإستخدام خاصية Mix in

نحتاج في هذا الدرس إلى إصدار جديد من مكتبة Homa_Audio

إنسخ ملف المكتبة الجديد من هنا

وإستبدل الملف الموجود في مجلد Debug بهذا الملف

ثم من التطبيق إذهب إلى متصفح المشروح و أزل الملف القديم من References

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image14-0

ثم قم بإضافة الإصدار الجديد من المكتبة إلى References كما فعلنا سابقاً :

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image4-3


[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image4-4

الإصدار الجديد يحتوي على كائن HAudio الذي يقوم يقوم بعمليات التسجيل

ولإستخدام هذا الكائن في التطبيق لا بد من تعريفه وليكن إسمه ra

إنسخ كود التعريف التالي تحت تعريف كائن تغيير الصوت من الدرس السابق :




كود:
private HAudio ra=new HAudio();

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image14-1

هذا الكائن يحتوي على إجراء التسجيل Record والذي يستقبل مدخل من نوع سلسلة نصية تمثل مسار الملف الي سيتم التسجيل إليه

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




كود:
ra.Record(@"c:\record.wav");

تقوم بتسجيل الصوت إلى الملف record.wav في القرص المحلي c

أي أن كائن التسجيل يقوم بإنشاء الملف record.wav ثم تسجيل الصوت إليه

ولكن يجب أن لا يكون مسار الملف ثابت , يجب أن يختار المستخدم المكان الذي يرغب بتسجيل الصوت إليه

لذلك سنستخدم نافذة جاهزة أخرى وهي نافذة حفظ الملفات SaveFileDialog

التسجيل

إذهب إلى نافذة التصميم , وإسحب زر جديد من صندوق الادوات يمثل زر التسجيل وأضف إليه صورة مناسبة

إسحب أداة حفظ الملفات SaveFileDialog من صندوق الأدوات

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image14-2

وحددها من الشريط الأصفر في الأسفل

ثم غير خاصية Name إلى SF :

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image14-3

وغير خاصية FileName إلى new.wav

أنقر مزدوجا على زر التسجيل وأنسخ هذا الكود :




كود:
SF.ShowDialog();
ra.Record(SF.FileName);

السطر الأول يقوم بفتح أداة حفظ الملفات SF كما فعلنا سابقاً في أداة فتح الملفات OF

السطر الثاني يستدعي إجراء التسجيل في كائن تسجيل الصوت ra الذي عرفناه سابقاً

وإستبدلنا مدخل مسار ملف الصوت بناتج أداة حفظ الملفات حيث أن خاصية FileName في كائن SF

ترجع بقيمة سلسلة نصية تمثل المسار المختار من قبل المستخدم

إيقاف التسجيل

كائن التسجيل يحتوي على إجراء أخر يقوم بعملية إيقاف التسجيل وحفظ الملف

StopRecording هو إجراء إيقاف التسجيل , فالتعليمة التالية :




كود:
ra.StopRecording();

هي تعليمة إستدعاء إجراء إيقاف التسجيل

وهذا الإجراء يوقف عملية إلتقاط الصوت ثم يقوم بحفظ الملف الناتج

أي أن ملف التسجيل لن يتم إنشاؤه بشكل صحيح إلا بعد إستدعاء إجراء إيقاف التسجيل

إذهب إلى التصميم وأضف زر يمثل زر إيقاف التسجيل وأكتب داخله الكود المناسب

وذلك هو الواجب ..

ملاحظة :

يمكن للتطبيق الآن أن يسجل الصوت من نفسه , حيث أن إدوات التسجيل منفصلة عن ادوات التشغيل وهذه ميزه مهمة

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

..

الموضوع الأصلي : [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال  المصدر : منتديات عين تاغروت
الاوسمه
 :
اوسمه (tagrot)


الرجوع الى أعلى الصفحة اذهب الى الأسفل
المعلومات
الكاتب:
Tagrot
اللقب:
المدير العام
الرتبه:
المدير العام
الصورة الرمزية

Tagrot


البيانات
نسخة المنتدى :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Fmphpb10
نوع المتصفح :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Fmfire10
صورة البلد :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Dz10
عدد المساهمات :
3013
تاريخ التسجيل :
14/05/2009
العمر :
34
الموقع :
الجزائر

التوقيت

الإتصالات
الحالة:
وسائل الإتصال:
http://tagrot.mountada.biz
مُساهمةموضوع: رد: [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال   [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 I_icon_minitimeالإثنين مارس 11, 2013 8:17 am


الدرس الخامس عشر


القوائم:

نادراً ما نجد برنامجاً يخلوا من القوائم Menus ..

والقوائم تنقسم إلى ثلاث أنواع :

1 - قوائم ريسية , وهي القوائم التي تأتي عادة أعلى النوافذ

كقائمة "ملف" و "تحرير" في أي نا فذة من نوافذ وندوز

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image15-1

2 - قوائم فرعية Context Menu و هي القوائم التي تنبثق عادة عند النقر على زر الفأرة الأيمن

مثل قائمة التحرير في محررات النصوص

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image15-2

3- قوائم شريط المهام وهي القوائم التي تنبثق من أيقونات البرامج الي لها إختصارات في شريط المهام

كقائمة المسنجر

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image15-3

وطريقة التعامل مع القوائم بأنواعها المختلفة متشابهة جدا في معظم لغات البرمجة ومنها السي شارب

في درسنا اليوم سنضيف قائمة للتطبيق من النوع الثالث

حيث سنضيف إليها جميع وضائف الأزرار في النافذة الرئيسية

وسنضيف أيضاً خاصية إخفاء النافذة الرئيسية , وإضافة إيقونة للتطبيق في شريط المهام

إيقونة شريط المهام Notify Icon

وهي الإيقونات التي تظهر عادة في شريط المهام بجانب الساعة

مثل إيقونات المسنجر و الشبكة وغيرها

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image15-4

إفتح نافذة التطبيق الرئيسية , وإسحب كائن إيقونة التنبية من صندوق الأدوات من جزء Components

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image15-5

ستجد الإيقونة في الشريط الأصفر تحت النافذة , إخترها بالنقر عليها مرة واحدة بزر الفأرة الأيسر

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image15-6

ثم إذهب إلى جدول الخصائص ومن خاصية Icon إختر الإيقونة المناسبة

وغير خاصية Text إلى "مشغل الصوت والفيديو"

وعند تشغيل التطبيق ستلاحظ إيقونة التحذير التي إخترتها موجودة في شريط المهام

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image15-7

الآن سنضيف خاصية إخفاء النافذة للتطبيق وتعليمة إخفاء النافذة بسيطة جداً :




كود:
this.Hiade();

حيث أن this تمثل النافذة الحالية وهي النافذة الرئيسية

بقي أن نجد المكان المناسب لوضع تعليمة الإخفاء

وأفضل مكان لهذه التعليمة هي عند تصغير النافذة الرئيسية للبرنامج

حيث ستختفي النافذة من شريط المهام و لا يظهر منها سوى إيقوانة التنبية التي إخترناها

ولعمل ذلك يجب أن نكتب تعليمة الإخفاء في حدث Resize للنافذة , وهذا الحدث ينطلق عند تغيير حجم النافذة

ولكن هناك مشكلة , المفروض أن نخفي النافذة فقط عندما يتم تصغير النافذة , ولكن هذا الحدث ينطلف عند تصغير أو تكبير النافذة

وبالتالي فيجب أن نضيف جملة شرط if نختبر فيها حالة النافذة فإذا كانت النافذة مصغرة يتم تنفيذ كود الإخفاء

ونختبر حالة النافذة من خلال خاصية WindowsState من خصائص الكائن this والذي يمثل النافذة الرئيسية

فالتعليمة التالية ترجع قيمة تمثل حالة النافذة :




كود:
this.WindowState

ونتائج هذه الخاصية الشائعة هي ثلاث نتائج "حالات" :

1- الحالة العادية , وهي حالة تكون فيها النافذة بحجمها الأصلي كما في التصميم وترجع بقيمة :




كود:
FormWindowState.Normal

2- الحالة المكبرة , وهي حالة تكون فيها النافذة مكبرة ملئ الشاشة من زر التكبير في أعلى النافذة وترجع بقيمة :




كود:
FormWindowState.Maximized

3- الحالة المصغرة , وهي حالة تكون فيها النافذة مصغرة وموجودة فقط في شريط المهام وترجع بقيمة :




كود:
FormWindowState.Minimized

والحالة التي تهمنا هي آخر حالة , حيث سنختبر خاصية حالة النافذة WindowsState فإذا كانت Minimized فيتم تنفيذ كود الإخفاء

إذهب إلى نافذة التصميم , وإختر النافذة الرئيسية بالنقر مرة واحدة على مكان فارغ بالنافذة

ثم إذهب إلى جدول الخصائص جزء الأحداث , وأنقر مزدوجاً على حدث Resize

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image15-8

ستنتقل إلى الكود , لنكتب هناك كود الإخفاء مع جملة if :




كود:
if(this.WindowState == FormWindowState.Minimized)
{
this.Hide();
}

السطر الأول يمثل جملة شرطية تختبر حالة النافذة إذا كانت مصغرة Minimized أم لا

فإذا كانت مصغرة يتم تنفيذ الكود بين الحاصرتين وهو تعليمة الإخفاء

إنتهينا من خاصية الإخفاء , بقي أن نضيف خاصية إعادة الإظهار

وتعليمة الإظهار بسيطة أيضاً , وقد ذركناها في دروس سابقة :




كود:
this.Show();

حيث أن this يمثل النافذة الرئيسية

ولكن هذا الكود لا يكفي فهو يظهر النافذة على شريط المهام , ولا يقوم بتكبيرها

وبالتالي يجب إضافة كود تكبير النافذة , وهو تغيير لحالة النافذة WindowsState إلى Maximized

أي أن تعليمة تكبير النافذة كاملة هي :




كود:
this.WindowState = FormWindowState.Normal;

تعليمة الإظهار والتكبير سنضعها كما قلنا في حدث النقر المزدوج على إيقونة التنبية

إذهب إلى التصميم وأنقر مزدوجاً على إيقونة التحذير notifyIcon1 في الشريط الأصفر أسفل النافذة ستنتقل إلى الكود

أكتب هناك تعليمات الإظهار والتكبير :




كود:
this.Show();
this.WindowState = FormWindowState.Normal;

الآن شغل البرنامج وصغر النافذة , ستختفي النافذة من شريط المهام , وتبقى فقط إيقونة التحذير

وإذا نقرت عليها مزدوجاً ستظهر النافذة مرة أخرى .

القوائم الفرعية :

أحياناً نحتاج إلى التفاعل مع البرنامج وهو مخفي , كأن نوقف التشغيل مثلاً

في حالة البرنامج الحالية , يجب أولاً إظهار النافذة الرئيسية بالنقر مزدوجاً على إيقونة التحذير

ثم عندما تظهر النافذة نختر زر الإيقاف ..

يمكن إختصار هذا الإجراء بإضافة قائمة على إيقرنة التحذير , تحتوي على بند "إيقاف"

وبالتالي يمكن إيقاف التشغيل بدون إظهار النافذة الرئيسية

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

إذهب إلى التصميم , وإسحب كائن القائمة الفرعية من صندوق الأدوات :

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image15-9

ستجد كائن القائمة أضيف إلى الشريط الأصفر أسفل النافذة

إختر القائمة بالنقر عليها مرة واحدة , ستلاحظ أن شكل النافذة الرئيسية تغير و أضيفت إليها قائمة تحت شريط العنوان

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image15-10

هنا ستقوم بتحرير عناصر القائمة , ولإضافة عنصر جديد للقائمة أنقر مزدوجاً على المربع الأبيض الكتوب عليه Type Here

وأكتب هناك " إيقاف التشغيل "

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image15-11

بهذا تكون قد أضفت عنصر جديد للقائمة وهو عنصر إيقاف التشغيل

أضف عنصر جديد تحت العنصر السابق وليكن " إنهاء البرنامج "

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image15-12

الآن انقر في أي مكان فارغ في النافذة , ثم إخرت مرة أخري كائن القائمة من الشريط الأصفر في الأسفل

ولكن هذه المرة سنقوم بإضافة كود إلى كل عنصر من عناصر القائمة , إنقر مزدوجاً على عنصر " إيقاف التشغيل"

ستنتقل إلى الكود , لتكتب هناك تعليمة إيقاف التشغيل وهي نفس التعليمة في زر إيقاف التشغيل في النافذة الرئيسية من الدروس السابق :




كود:
StopFile();

ثم إذهب إلى التصميم مرة أخرى و أنقر مزدوجاً على عنصر " إنهاء البرنامج"

وأكتب هناك كود إغلاق البرنامج الذي عرفناه من الدروس السابقة :




كود:
System.Environment.Exit(0);

بقي أن نربط القائمة بإقونة التحذير , إذهب إلى التصميم و إختر إيقونة التحذير notifyIcon1 من الشريط الأصفر بالأسفل

ومن خاصية ContextMenuStrip إختر contextMenuStrip1

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image15-13

الآن جرب تشغيل البرنامج , و صغر النافذة الرئيسية و أنقر بزر الفارة الأيمن على زر التحذير

ستظهر لك القائمة الفرعية

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image15-14

الواجب

أضف عناصر أخري للقائمة تحتوي على جميع خصائص البرنامج

تشغيل , إيقاف مؤقت , تقديم , تأخير , فتح ملفات , التحكم بالألبومات , ملئ الشاشة, ....

.نهاية الدرس الخامس عشر .

الموضوع الأصلي : [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال  المصدر : منتديات عين تاغروت
الاوسمه
 :
اوسمه (tagrot)


الرجوع الى أعلى الصفحة اذهب الى الأسفل
المعلومات
الكاتب:
Tagrot
اللقب:
المدير العام
الرتبه:
المدير العام
الصورة الرمزية

Tagrot


البيانات
نسخة المنتدى :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Fmphpb10
نوع المتصفح :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Fmfire10
صورة البلد :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Dz10
عدد المساهمات :
3013
تاريخ التسجيل :
14/05/2009
العمر :
34
الموقع :
الجزائر

التوقيت

الإتصالات
الحالة:
وسائل الإتصال:
http://tagrot.mountada.biz
مُساهمةموضوع: رد: [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال   [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 I_icon_minitimeالإثنين مارس 11, 2013 8:18 am

الدرس السادس عشر
التوقيت:

من الإضافات المهمة للتطبيق إضافة طول الملف و الوقت الحالي للتشغيل بالدقيقة والثانية

ولإضافة ذلك نحتاج إلى إستخدام خاصية CurrentPosition في كائنات تشغيل الصوت والفيديو

أو GetPosition() في كائن تشغيل ملفات الريل

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

فمثلاً إذا اعادت الخاصية CurrentPosition القيمة 120 فمعنى هذا أنه يتم الآن تشغيل الثانية رقم 120 في الملف

وإذا أعادت الخاصية GetPosition() القيمة 50000 فمعنى ذلك أنه يتم الآن تشغيل الثانية رقم 50 في ملف الريل

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

أما كائن تشغيل الريل فيرجع القيمة بالملي ثانية و يجب قسمتها على 1000 كي نحولها إلى ثانية

الحصول على طول الملف :

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

والتي ترجع قيمة من نوع رقم تمثل طول الملف بالثواني

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




كود:
ap.Duration

لو كان ناتجها 195 فهذا يعني أن طول الملف 195 ثانية

والتعليمة :




كود:
rp.GetLength()

لو كان ناتجها 195000 فهذا يعني أن طول الملف 195000 ملي ثانية أي 195 ثانية "بالقسمة على 1000"

لأن rp هو كائن مشغل ملفات الريل و يرجع القيمة بالملي ثانية لذلك وجب القسمة على 1000 لتحويلها إلى ثانية

ولكنا نريد كتابة الوقت بالدقيقية و الثانية

وعند تحويل 195 إلى دقائق تصبح ثلاث دقائق و 15 ثانية

أي بهذه الصيغة :




كود:
3:15

نحتاج إلى معادلة رياضية لتحويل الصيغة من ثواني إلى دقائق وثواني

إيجاد الدقائق :

لإيجاد الدقائق في كائن مشغلا الصوت أو الفيديو نقسم عدد الثواني على 60 ثم نحول الناتج إلى عدد صحيح حتى يتم إزالة الكسور العشرية

فمثلاً لو قيمنا 195 على 60 سيكون الناتج 3.25 و هو عدد حقيقي لكنا نريد
فقط عدد الدقائق و هو 3 وبالتالي فتحويل العدد الحقيقي إلى صحيح

يتكفل بإزالة الكسر 25 ويصبح الناتج 3




كود:
int m;
m=vp.Duration/60;

السطر الأول تعريف للمتغير m من نوع رقم والذي سيحمل عدد الدقائق

والسطر الثاني إسناد طول الملف مقسوما على 60 للتحويله إلى دقائق

ولأنا نريد فقط الدقائق دون الكسور سنستخدم دالة جديدة Math.Floor والتي تحذف الكسر وترجع فقط العدد الصحيح

هذه الدالة لها مدخل من نوع رقم Double ودالتي Duration في كائنات الصوت والفيديو ترجع Double أيضاً




كود:
int m;
m =Convert.ToInt32(Math.Floor(vp.Duration/60));

وبنفس الطريقة لكائن تشغيل الصوت :




كود:
int m;
m =Convert.ToInt32(Math.Floor(ap.Duration/60));

أما كائن مشغل ملفات الريل فيجب كما قلنا أن نقسم الناتج على 1000 لتحويله إلى ثواني ثم نقسمع على 60 لتحويله إلى دقائق

وكما نعلم في الرياضيات فإن :




كود:
x/y/z=x/y*z

وبالتالي بدل من كتابة كود التحويل هذا :




كود:
rp.GetLength()/1000/60

يمكن كتابته هكذا :




كود:
rp.GetLength()/60000

لأن 60 * 1000 = 60000

وأيضاً دالة GetLength في كائن مشغل الريل لا ترجع قيمة من نوع Double وهذا يسبب مشكلة في التعامل مع الدالة Math.Floor

لأنه يجب أن تستقبل مدخل من نوع Double

وبالتالي يجب تحويل ناتج الدالة GetLength إلى Double :

ويصبح كود التحويل كاملاً هكذا :




كود:
int m;
m = Convert.ToInt32(Math.Floor(Convert.ToDouble(rp.GetLength()/60000)));

إيجاد الثواني :

نقصد هنا بالثواني الكسر المتبقي من قسمة الثواني على 60

ولإستنتاج المعادلة الرياضية المستخدمة لإيجاد الثواني سنقسم عدد الثواني 195 إلى أربعة أقسام:




كود:
60 60 60 15

الثلاثة الحدود الأولي تمثل الثلاث الدقائق التي أستخرجناها من معادلة إيجاد الدقائق وبقي 15 تمثل عدد الثواني المتبقية

يجب لإيجاد الثواني المتبقية أن نستبعد الثواني التي تم تحويلها إلى دقائق

ان أننا نقوم بطرح الثواني التي تم تحويلها إلى دقائق من عدد الثواني الإجمال :




كود:
195 - (60 60 60 ) = 15

بهذه المعادلة إستطعنا إيجاد الثواني المتبقية , ولكن البرنامج كيف يصيغ ما بين الأقواس

لنحول المعادلة قليلاً :




كود:
195 - (60 * 3) = 15

ركز على رقم 3 بين الأقواس , أليس هو عدد الدقائق m الذي أوجدناه في الفرقة السابقة ؟

وبالتالي يمكن كتابة المعادلة هكذا :




كود:
195 - (60 * m) = 15

إذاً يمكن إيجاد عدد الثواني المتبقية من خلال طرح عدد الدقائق مضروباً في 60 من العدد الإجمالي للثواني

ففي كائن تشغيل الفيديو ستكون تعليمة إيجاد الثواني المتبقية هكذا :




كود:
vp.Duration-(60 * m)

وبالتحويل إلى العدد الصحيح تصبح :




كود:
Convert.ToInt32(vp.Duration-(60 * m))

إذاً لإيجاد الثواني المتبقية :




كود:
int s;
s =Convert.ToInt32(vp.Duration-(60 * m));

وفي كائن تشغيل الصوت :




كود:
int s;
s =Convert.ToInt32(ap.Duration-(60 * m));

وفي كائن تشغيل ملفات الريل :




كود:
int s;
s =Convert.ToInt32(rp.GetLength()/1000-(60 * m));

لإيجاد الوقت الحالي :

المعادلتين السابقة كانت لإيجاد طول الملف بالدقيقة والثانية

ونحتاج إلى معادلات أخرى لإيجاد الموقع الذي يتم تشغيله حالياً بالدقيقة والثانية

وهي نفس المعادلات السابقة بإستثناء إستبدال Duration بـ CurrentPosition

في كائنات تشغيل الصوت والفيديو

وإستبدال GetLength بـ GetPosition في كائن تشغيل ملفات الريل

حيث أن CurrentPosition و GetPosition ترجع رقم الثانية التي يتم تشغيلها الآن

أو عدد الثواني التي تم تشغيلها , وبالتالي فيمكن حساب الدقائق والثواني

من خلال تطبيق المعادلات السابقة على عدد الثواني التي تم تشغيلها

مثلاً لإيجاد الدقيقة التي يتم تشغيلها حالياً في كائن مشغل الفيديو :




كود:
int m;
m =Convert.ToInt32(Math.Floor(vp.CurrentPosition/60));

وفي كائن مشغل الصوت :



كود:
int m;
m =Convert.ToInt32(Math.Floor(ap.CurrentPosition/60));

وفي كائن مشغل ملفات الريل :



كود:
int m;
m = Convert.ToInt32(Math.Floor(Convert.ToDouble(rp.GetPosition()/60000)));

ولإيجاد الثانية التي يتم تشغيلها حالياً في كائن مشغل الفيديو :



كود:
int s;
s =Convert.ToInt32(vp.CurrentPosition-(60 * m));

وفي كائن مشغل الصوت :



كود:
int s;
s =Convert.ToInt32(ap.CurrentPosition-(60 * m));

وفي كائن مشغل ملفات الريل :



كود:
int s;
s =Convert.ToInt32(rp.GetPosition()/1000-(60 * m));

التطبيق :

إفتح تطبيق الدرس السابق , وأضف متغير محلي من نوع نص يمثل طول الملف بالدقيقة والثانية وليكن length

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image16-1

إنسخ هذا الإجراء إلى الكود وتأكد أنه خارج أي إجراء آخر :



كود:
void SetLength()
{
try
{
int m = 0;
int s = 0;
if (type == "V")
{
m = Convert.ToInt32(Math.Floor(vp.Duration / 60));
s = Convert.ToInt32(vp.Duration - (60 * m));
}
else if (type == "A")
{
m = Convert.ToInt32(Math.Floor(ap.Duration / 60));
s = Convert.ToInt32(ap.Duration - (60 * m));
}
else if (type == "R")
{
m = Convert.ToInt32(Math.Floor(Convert.ToDouble(rp.GetLength() / 60000)));
s = Convert.ToInt32((rp.GetLength() / 1000) - (60 * m));
}
length = Convert.ToString(m) ":" Convert.ToString(s);
}
catch
{
}
}

الإجراء السابق SetLength وظيفته إيجاد طول الملف بالدقيقة و الثانية و إسنادة إلى المتيغر المحلي length

حيث إستخدمنا جملة شرط ثلاثية لفحص نوع الملف

و أدمجنا معادلتي إيجاد الدقائق والثواني في مكان واحد لكل نوع كما شرحنا في الدرس

وفي السطر الأخير من كود جملة try حولنا الدقائق إلى نص , ثم أضفنا إليها : و الثواني بعد تحويلها أيضاً إلى نص

حيث ان المتغير length سيحمل قيمة من نوع نص تمثل طول الملف بهذه الصيغة :




كود:
3:15

بقي أن نجد المكان المناسب لإستدعاء هذا الإجراء , حيث من المفترض أن نجد طول الملف بعد أن يتم تحميلة

وبالتالي فإن إجراء تحميل الملف LoadFile هو المكان المناسب لإستدعاء

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




كود:
SetLength();

حيث يصبح إجراء تحميل الملف هكذا :




كود:
void LoadFile(string Path)
{
StopFile();
ap=null;//تصفير الصوت
vp=null;//تصفير الفيديو
this.Controls.Add(rp);//تصفير الريل
rp.Visible=false;//أخفاء مظهر الريل
try
{
vp = Video.FromFile(Path);
vp.Owner = this.panel1;
panel1.Width = 400;
panel1.Height = 300;
type="V";
}
catch
{
try
{
ap = Audio.FromFile(Path);
type="A";
}
catch
{
try
{
rp.SetSource(Path);
type="R";
}
catch
{
MessageBox.Show("الرجاء إختيار ملف صالح");
type="N";
}
}

}
SetLength();
}

عند تحميل أي ملف سيتم تحميل المتغير length قيمة نصية تمثل طول الملف بالثواني والدقائق

وإجراء إيجاد الوقت الحالي أثناء التشغيل مشابه جدا لإجراء إيجاد طول الملف

ولكن قبله نحتاج إلى مكان على النافذة نكتب عليه طول الملف و الوقت الحالي للتشغيل

حيث سيكون بعذة الصيغة :




كود:
1:25/3:15

بإفتراض أن طول الملف هو 3 دقئق و 15 ثانية والوقت الحالي للتشغيل هو الدقيقة الأولى والثانية الخامسة والعشرين

إفتح نافذة التصميم و إسحب كاشن اللافته Label إلى النافذة :

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image16-2

ثم إختره وغير خاصية Name إلى len و غير خاصية Text إلى :




كود:
0:0/0:0

والآن إذهب إلى الكود وأنسخ هذا الإجراء وتأكد من أنه خارج أي إجراء آخر :



كود:
void SetPosition()
{
try
{
int m = 0;
int s = 0;
if (type == "V")
{
m = Convert.ToInt32(Math.Floor(vp.CurrentPosition / 60));
s = Convert.ToInt32(vp.CurrentPosition - (60 * m));
}
else if (type == "A")
{
m = Convert.ToInt32(Math.Floor(ap.CurrentPosition / 60));
s = Convert.ToInt32(ap.CurrentPosition - (60 * m));
}
else if (type == "R")
{
m = Convert.ToInt32(Math.Floor(Convert.ToDouble(rp.GetPosition() / 60000)));
s = Convert.ToInt32((rp.GetPosition() / 1000) - (60 * m));
}

len.Text = Convert.ToString(m) ":" Convert.ToString(s) " / " length;
}
catch
{
}
}


الإجراء السابق SetPosition يقوم بإيجاد الوقت الحالي للتشغيل بالدقيقة والثانية

في السطر الأخر من جملة try حولنا الدقيقة التي يتم تشغيلها إلى نص ثم أضفنا إليها ":"

ثم أضفنا إليها الثانية التي يتم تشغيلها حالياً , ثم أضفنا إليها "/" ثم طول الملف الذي أوجدناه في الإجراء SetLength

بقي أن نجد المكان المناسب لإستدعاء هذا الإجراء

فالمفروض أن نستدعي الإجراء كل ثانية أي أنا نحتاج إلى مؤقت Timer ولكن يوجد لدينا مؤقت من الدروس السابق

لذلك سنستخدمه عوضاً عن إضافة مؤقت جديد

إذهب إلى كود المؤقت timer1 من خلال النقر مزدوجا على كائن الموقت timer1 من نافذة التصميم

وأضف تعلمية الإستدعاء التاليه في آخر كود المؤقت :




كود:
SetPosition();

حيث يصبح كود المؤقت هكذا :




كود:
void Timer1Tick(object sender, System.EventArgs e)
{
try
{
if (trackBar1.Maximum == 0)
{
SetTrackBar();
}
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());
}
SetPosition();
}
catch
{
}

}

الواجب:

أرسل التطبيق

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

..

الموضوع الأصلي : [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال  المصدر : منتديات عين تاغروت
الاوسمه
 :
اوسمه (tagrot)


الرجوع الى أعلى الصفحة اذهب الى الأسفل
المعلومات
الكاتب:
Tagrot
اللقب:
المدير العام
الرتبه:
المدير العام
الصورة الرمزية

Tagrot


البيانات
نسخة المنتدى :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Fmphpb10
نوع المتصفح :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Fmfire10
صورة البلد :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Dz10
عدد المساهمات :
3013
تاريخ التسجيل :
14/05/2009
العمر :
34
الموقع :
الجزائر

التوقيت

الإتصالات
الحالة:
وسائل الإتصال:
http://tagrot.mountada.biz
مُساهمةموضوع: رد: [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال   [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 I_icon_minitimeالإثنين مارس 11, 2013 8:19 am


الدرس السابع عشر


تغيير الواجهات الرسومية

في هذا الدرس سنستخدم برنامج خاص بإنشاء واجهات رسومية للتطبيق

قم بتحميل البرنامج من هنا :

برنامج صنع الواجهات

واجهة هذا البرنامج مبسطة وواضحة , حيث تقوم من خلالها بتحديد ألوان وخلفيات عناصر التطبيق

كتحديد خلفية النوافذ و ألوان الخطوط وغيرها

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image17-1

يعتمد هذا البرنامج على تسجيل القيم المدخلة له في ملف Xml

على أن برنامج مشغل الميديا سيقرأ القيم من هذا الملف

والبرنامج يقوم بإنشاء مجلد جديد بإسم الستايل

ويضع داخله ملف XML الذي يحتوي على الألوان وأسماء الصور و يضع داخلة أيضاً الصور المختارة للستايل

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image17-2

بعد إنشاء الستايل نقوم بنسخ المجلد كاملاً إلى مجلد جديد سنقوم بإنشاءه في مسار البرنامج بإسم Styles

حيث سيحتوي هذا المجلد على جميع الستايلات الناتجة من برنامج صنع الواجهات :

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image17-3

للتعامل مع الواجهات المتعددة , نحتاج إلى قائمة منسدلة جديدة تحتوي على جميع الستايلات

إعداد النوافذة لتقبل الستايلات

سنحتاج لتغيير أسماء معظم الكائنات وذلك لكي يسهل علينا التعامل معها بواسطة أسمائها :

إفتح تصميم النافذة الرئيسية وإختر زر التشغيل وغير إسمه من الخاصية Name إلى btnPlay

وغير إسم زر الإيقاف إلى btnStop

زر التسجيل - btnRecord

زر إيقاف التسجيل - btnStopRecord

زر التقديم - btnForward

زر التأخير - btnBackWard

زر ملئ الشاشة - btnFullScreen

زر الإيقاف المؤقت - btnPause

زر فتح الملفات - btnOpen

زر التحكم بالألومات - btnAlbumes

شريط التنقل عبر الملف - barMove

شريط التحكم بالصوت - barVol

صندوق طريقة التشغيل - boxMthd

ملاحظة عند إختيار صندوق طريقة التشغيل تأكد أنك إختر الصندوق وليس أحد مكوناته حتى تظر المربعات حول الصندوق

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image17-5

ومن نافذة الألبومات قم بتغيير إسماء الكائنات أيضاً :

زر ألبوم جديد - btnNew

زر حفظ الألبوم - btnSave

زر حذف الألبوم - btnDelete

زر إضافة ملفات - btnAdd

زر حذف ملف - btnRemove

زر نقل الملف للأعلى - btnUp

زر نقل الملف للأسفل - btnDown

زر موافق - btnOk

زر إلغاء الأمر - btnCancel

تأكد عند نسخ الأسماء أنك نسخت الكلمة فقط دون فراغات في البداية أو النهاية

تغيير الأسماء سيساعدنا كثيرا في التعامل مع الكائنات بواسطة أسمائها

مثلاً للتعامل مع كائن زر التشغيل من الكود نستدعيه بإسمه btnPlay و للتعامل مع زر الإيقاف btnStop وهكذا ..

الآن إفتح تصميم النافذة الرئيسية و أختر كائن التشغيل التتابعي و غير الخاصية BackColor إلى Trasparent :

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image7-7

طبق نفس الخطوة السابقة لكل من كائن التشغيل العشوائي , لافتة طول الملف
والوقت الحالي للتشغيل, صندوق طريقة التشغيل , جميع أزرار التحكم - تشغيل ,
إيقاف , تقديم ....

إختر زر التشغيل وغير خاصية size إلى 40;40 وكذلك لجميع أزرار التحكم

وغير خاصية BackgroundImageLayout إلى Streatch لجميع أزرار التحكم

ثم أحذف القيمة الموجودة أمام خاصية Image وخاصية BackgroundImage لجميع أزرار التتحكم :

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image17-4

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

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image17-6

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

أما إذا أردت أن تبقى أزرار نافذة الألبومات عادية فلا تغير شيئ من خصائصها

إختر كائن حاضن الفيديو وغير خاصية BackgroundImageLayuot إلى Streatch

الآن إفتح المجلد Debug الموجود داخل المجلد bin داخل مجلد المشروع

وأضف مجلد جديد بهذا الإسم :




كود:
Styles

هذا هو المجلد الذي سيحتفظ بجميع مجلدات الواجهات المختلفة

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image17-3

إفتح تصميم النافذة الرئيسية وإضف كائن القائمة المنسدلة :

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Image11-3

غير خاصية Name فيه إلى sc وخاصية Text إلى "إختر الستايل"

تحميل أسماء الستايلات

نحتاج إلى طريقة لتحميل أسماء الستايلات إلى قائمة إختيار الستايل sc

وكما قلنا سابقاً فإن كل ستايل هو عبارة عن مجلد داخل مجلد Styles

وبالتالي فإن الستايلات المتوفرة هي جميع المجلدات داخل مجلد Style

وهنا سنستخدم دالة لإيجاد المجلدات الفرعية دلخل مجلد رئيسي

الدالة هي : System.IO.Directory.GetDirectories

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

ولأنها دالة وليست إجراء فإنها ترجع بقيمة

هذه القيمة من نوع مصفوفة نصوص تمثل مسارات المجلدات الفرعية مثلاً :




كود:
string[] subfld;
subfld=System.IO.Directory.GetDirectories(@"c:\");

السطر الأول تعريف مصفوفة نصوص , والسطر الثاني إسناد ناتج الدالة للمصفوفة subfld

والتي تحمل عناصر من نوع نصوص كل عنصر يمثل مجلد موجود داخل القرص المحلي c

التعامل مع المصفوفات شرحناه مسبقاً في الدرس الثامن

الكود السابق ينتج المجلدات في القرص c ولكن لا نريد الحصول على المجلدات في القرص c بل نريد المجلدات في مجلد Style

ونعلم أن هذا المجلد موجود في مسار ملف البرنامج , ومن الخطأ أن نكتب التعليمة هكذا :




كود:
string[] subfld;
subfld=System.IO.Directory.GetDirectories(@"c:\cs\project\bin\debug\styles");

لانه لو تغير مجلد البرنامج فلن تعمل التعليمة السابقة لأن مكان المجلد Style تغير

لذلك سنستخدم متغير جديدApplication.StartupPath يرجع قيمة من نوع نص تمثل
مسار البرنامج , وعند الحصول على مسار البرنامج نضيف إليه إسم مجلد Style

وبالتالي نحصل على مسار مجلد الستايلات مهما تغير مكان البرنامج :





كود:
string[] subfld;
subfld=System.IO.Directory.GetDirectories(Application.StartupPath @"\Styles");

التعليمة السابقة ستعمل دائما بغض النظر عن مسار البرنامج و هذا ما نحتاجه

نحتاج الآن إلى دوارة for لتمر على جميع عناصر المصفوفة subfld وتضيف كل عنصر إلى قائمة إختيار الستايل

لكن هناك مشكلة المصفوفة subfld تحتوي على نصوص تمثل المسار الكامل لمجلد الستايل مثل :




كود:
c:\cs\project\bin\debug\styles\style1

ونحن نريد فقط إسم الستايل فقط في قائمة إختيار الستايلات :




كود:
style1

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

التعليمة هي Replace وتوجد في أي متغير من نوع نص مثلاً :




كود:
string wrd;
wrd="this is a test";
wrd.Replace("test","good test");

السطر الأخير إستدعاء لتعليمة الإستبدال حيث تبحث عن كلمة test في المتغير wrd وتحولها إلى good test

وتصبح الجملة داخل متغير wrd :




كود:
this is a good test

سنستخدم هذه الخاصية لمسح مسار مجلد الستايلات في المصوفة subfld والإبقاء فقط على إسم مجلد الستايل

مثلاً لو كانت قيمة العنصر الأول من المصفوفة هي :




كود:
c:\cs\project\bin\debug\styles\style1

سنحصل على إسم المجلد فقط بهذه التعليمة :




كود:
subfld[0].Replace("c:\cs\project\bin\debug\styles\","");

حيث أن التعليمة السابقة تأخذ الجزء الغير ضروري من المسار وتكتب بدلاً منه فراغ وبالتالي بيقى فقط style1

نلاحظ أن الجزء المحذوف من المسار هو نفسه المسار الناتج من تعليمة :




كود:
Application.StartupPath @"\Styles"

لذلك ولكي تنجح التعليمة مهما تغير مسار البرنامج فسنغيرها كما فعلنا سابقاً :




كود:
subfld[0].Replace(Application.StartupPath @"\Styles\","");

التعليمة السابقة سنكررها لكل عنصر من عناصر المصفوفة subfld بإستخدام دوارة for :




كود:
for (int i = 0; i < subfld.Length; i )
{
sc.Items.Add(subfld[i].Replace(Application.StartupPath @"\Styles\", ""));
}

الدوارة السابقة تكرر العملية من الصفر حتى عدد عناصر المصفوفة subfld.Length كما عرفنا في الدرس الثالث

بقي أن نجمع كود إجراء قراءة الستايلات .

إجراء قراءة الستايلات

إذهب إلى كود التطبيق وإنسخ هذا الكود وتأكد أن يكون خارج أي إجراء آخر :




كود:
void ReadAllStyles()
{
try
{
string[] subfld;
subfld = System.IO.Directory.GetDirectories(Application.StartupPath @"\Styles");
for (int i = 0; i < subfld.Length; i )
{
sc.Items.Add(subfld[i].Replace(Application.StartupPath @"\Styles\", ""));
}
}
catch
{
MessageBox.Show("حدث خطأ أثناء محاولة قراءة الستايلات");
}
}

االسطر الأول تعريف مصفوفة من نوع نصوص , لاحظ القوسين بعد كلمة string للدلالة على أنها مصفوفة متغيرات وليست متغير واحد

السطر الثاني لتعبئة المصفوفة subfld بجميع المجلدات الفرعية لمجلد الستايلات

والسطر داخل دوارة for لإضافة إسم مجلد الستايل إلى قائمة إختيار الستايلات sc بعد أن نحذف منه المسار الغير ضروري

بقي أن نجد المكان المناسب لإستدعاء الإجراء السابق , وأفضل مكان هو عند تحميل النافذة الرئيسية

إذهب إلى تصمصم النافذة الرئيسية و أنقر مزدوجاً على أي مكان فارغ فيها ستنتقل إلى إجراء حدث تحميل النافذة :




كود:
void MainFormLoad(object sender, System.EventArgs e)
{
doc.Load(Application.StartupPath "//albumes.xml");
XmlNode albumesnd = doc["albumes"];
XmlNode alnd = albumesnd.FirstChild;
while (alnd != null)
{
ac.Items.Add(alnd.Name);
alnd = alnd.NextSibling;
}
}

أضف إستدعاء الإجراء ReadAllStyles قبل أخر حاصرة ليصبح الإجراء هكذا :




كود:
void MainFormLoad(object sender, System.EventArgs e)
{
doc.Load(Application.StartupPath "//albumes.xml");
XmlNode albumesnd = doc["albumes"];
XmlNode alnd = albumesnd.FirstChild;
while (alnd != null)
{
ac.Items.Add(alnd.Name);
alnd = alnd.NextSibling;
}
ReadAllStyles();
}

إجراء خزن الستايل المختار

عند إختيار أحد عناصر قائمة إختيار الستايلات المفروض أن يقوم البرنامج بتحميل ألوان وصور الستايل المختار

ويجب أن يتذكر البرنامج الستايل المحدد حتى لو أغلقنا البرنامج و أعدنا تشغيل الكمبيوتر

لذلك يجب أن نجد طريقة لخزن الستايل المختار بحيث يعرف البرنامج ما هو الستايل الذي إستخدمناه حتى لو أعدنا تشغيل الكمبيوتر

لذلك يجب أن نكون ملف نصي في مجلد Styles نكتب بداخله المجلد المختار

وعند تشغيل البرنامج مرة أخرى نقرأ الملف المختار من هذا الملف , لنسمي هذا الملف : CurrentStyle.txt

ولكتابة ملفات نصية سنستخدم إجراء جديد System.IO.File.WriteAllText يستقبل
هذا الإجراء مدخلين من نوع نص الأول يمثل مسار الملف المراد كتابتة

والمدخل الثاني يمثل النص المراد كتابته في الملف , مثلاً :




كود:
System.IO.File.WriteAllText(@"c:\newtxt.txt","السلام عليكم");

الكود السابق يقوم بإنشاء ملف بإسم new.txt في القرص المحلي c ويكتب داخلة جملة "السلام عليكم"

بنفس الطريقة سنقوم بإنشاء ملف نصي بإسم CurrentStyle.txt لخزن الستايل المختار

لكن المسار هنا سيكون مجلد الستايلات Styles , ونستدعي إجراء خزن الستايل المختار عند إختيار عنصر من عناصر قائمة إختيار الستايلات

إفتح تصميم النافذة الرئيسية وأنقر مزدوجاً على قائمة إختيار الستايلات وفي الكود أكتب تعليمة خزن الملف المختار :




كود:
System.IO.File.WriteAllText(Application.StartupPath @"\Styles\CurrentStyle.txt", sc.Text);

التعليمة السابقة ستقوم بإنشاء ملف نصي بإسم CurrentStyle.txt في مجلد
الستايلات وتكتب داخله النص الموجود في قائمة إختيار الستايلات sc


يتبع ..

الموضوع الأصلي : [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال  المصدر : منتديات عين تاغروت
الاوسمه
 :
اوسمه (tagrot)


الرجوع الى أعلى الصفحة اذهب الى الأسفل
المعلومات
الكاتب:
Tagrot
اللقب:
المدير العام
الرتبه:
المدير العام
الصورة الرمزية

Tagrot


البيانات
نسخة المنتدى :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Fmphpb10
نوع المتصفح :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Fmfire10
صورة البلد :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Dz10
عدد المساهمات :
3013
تاريخ التسجيل :
14/05/2009
العمر :
34
الموقع :
الجزائر

التوقيت

الإتصالات
الحالة:
وسائل الإتصال:
http://tagrot.mountada.biz
مُساهمةموضوع: رد: [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال   [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 I_icon_minitimeالإثنين مارس 11, 2013 8:20 am

إجراء تحميل الستايل المختار

كما قلنا فإن لكل ستايل ملف XML بإسم Style.XML موجود داخل مجلد الستايل , وعند إختيار ستايل من القائمة sc

المفروض أن يقوم البرنامج بقراءة ملف XML الموجود داخل مجلد الستايل وتحميل قيم الألوان والصور من داخله

أولاً يجب أن نقرأ قيمة الستايل المختار المخزنة في الملف النصي CurrentStyle.txt حتى نعرف أي ستايل يجب تحميله

وللقراءة من الملف النصي سنستخدم إجراء جديد يستقبل مدخل واحد يمثل مسار
الملف المراد قراءته وينتج قيمة من نوع نص تمثل محتويات الملف :




كود:
System.IO.File.ReadAllText(@"c:\newtxt.txt");

الإجراء السابق ينتج قيمة من نوع نص تمثل محتويات الملف newtxt.txt الموجود في القرص المحلي c

وبنفس الطريقه سنقوم بقراءة الستايل المخزن في الملف CurrentStyle.txt :




كود:
string currentstyle;
currentstyle= System.IO.File.ReadAllText(Application.StartupPath @"\Styles\CurrentStyle.txt");

عرفنا متغير من نوع نص currentstyle وأسندنا له ما داخل الملف CurrentStyle.txt وهو إسم الستايل المختار

بمعرفة إسم الستايل المختار يمكن معرفة مكان ملف XML الذي يجب تحميله :




كود:
Application.StartupPath @"\Styles\" currentstyle @"\Style.XML"

هذا هو مسار ملف XML للستايل المختار حيث أخذنا مسار البرنامج وإضفنا له
مجلد Styles ثم إسم الستايل المختار currentstyle ثم إسم ملف XML

لقراءة القيم من الملف نحتاج لتعريف كائن من نوع XMLDocument كما فعلنا في الدرس الحادي عشر ولنسمه StyleDoc:




كود:
XmlDocument StyleDoc = new XmlDocument();

ولتحميل قيم الملف المطلوب يجب إستدعاء إجراء Load بواسطة مسار الملف




كود:
StyleDoc.Load(Application.StartupPath @"\Styles\" currentstyle @"\Style.XML");

برنامج صنع الواجهات يكتب الألوان والصور في ملف XML بدلالة كلمات مفتاحية كل كلمة يخرن فيها قيمة

وتسمى الكلمات المفتاحية بالمفاتيح لأنها تعمل كدليل على القيمة , مثلاً المفتاح MainBackColor

هو دليل قيمة تمثل لون خلفية النافذة الرئيسية , ولا يمكن قراءة القمية من ملف XML إلا بمعرفة مفتاح القيمة وهو MainBackColor

وهذه هي جميع مفاتيح القيم ودلالاتها :

لون خلفية النافذة الرئيسية - MainBackColor
لون خلفية قائمة التشغيل - PlayListBackColor
لون الخط في قائمة التشغيل - PlayListFontColor
لون خلفية قائمة إختيار الألبوم في النا فذة الرئيسية - MainSelectAlbumeBackColor
لون الخط في قائمة إختيار الألبوم في النا فذة الرئيسية - MainSelectAlbumeFontColor
لون خلفية قائمة إختيار الستايل - MainSelectStyleBackColor
لون الخط في قائمة إختيار الستايل - MainSelectStyleFontColor
لون الخط في لافتة طول الملف والوقت الحالي للتشغيل - TimeFontColor
لون الخط في صندوق طريقة التشغيل - MethodFontColor
لون خلفية شريط التنقل - MoveBarColor
لون خلفية شريط التحكم بالصوت - SoundBarColor
لون الخط في مربع كتم الصوت - MuteFontColor
خلفية النافذة الرئيسية - MainBackGroundImage
خلفية زر الإيقاف - StopImage
خلفية زر التشغيل - PlayImage
خلفية زر التسجيل - RecordImage
خلفية زر التقديم - ForwardImage
خلفية زر التأخير - BackwardImage
خلفية زر إيقاف التسجيل - StopRecordingImage
خلفية زر فتح الملفات - OpenImage
خلفية زر الإيقاف المؤقت - PauseImage
خلفية زر ملئ الشاشة - FullScreenImage
خلفية حاضن الفيديو - VedioImage

لون خلفية نافذة الألبومات - AlbumesBackColor
لون الخط في قائمة الملفات في نافذة الألبومات - FilesFontColor
لون خلفية قائمة إختيار الألبوم في نافذة الألبومات - AlbumesSelectAlbumeBackColor
لون الخط في قائمة إختيار الألبوم في نافذة الأبومات - AlbumesSelectAlbumeFontColor
خلفية نافذة الألبومات - AlbumesBackGroundImage
خلفية زر الإضافة في نافذة الألبومات - AddImage
خلفية زر حذف الملفات - DeleteImage
خلفية زر نقل الملف إلى أعلى - UpImage
خلفية زر نقل الملف إلى أسفل - DownImage
خلفية زر ألبوم جديد - NewAlbumeImage
خلفية زر حفظ الألبوم - SaveAlbumeImage
خلفية زر حذف الألبوم - DeleteAlbumeImage
خلفية زر موافق - OkImage
خلفية زر إلغاء الأمر - CancelImage
خلفية قائمة الملفات - FilesImage


وهذه القيم كلها مخزنة في عقدة رئيسية إسمها Style وبالتالي لقراءة هذه
القيم يجب تعريف متغير من نوع عقدة XMLNode لخزن العقدة الرئيسية :




كود:
XmlNode StyleNode = StyleDoc["Style"];

الأن يمكن إستدعاء أي قيمة من خلال العقدة StyleNode فمثلاً لإستدعاء قيمة لون خلفية النافذة الرئيسية MainBackColor




كود:
StyleNode["MainBackColor"].InnerText

التعليمة السابقة ستنتج نص يمثل قيمة لون خلفية النافذة الرئيسية ولتغيير لون خلفية النافذة الرئيسية :




كود:
this.BackColor = StyleNode["MainBackColor"].InnerText;

التعليمة السابقة خاطئة لأنه من المفترض أن يكون ناتج الطرف الأيمن من المعادلة هو كائن من نوع لون

لكن في التعليمة السابقة فإن القيمة من ملف XML هي من نوع نص يمثل رقم اللون وبالتالي يجب تغيير هذا النص إلى لون كيف ؟

لدينا دالة لتغيير رقم اللون إلى كائن لون :




كود:
Color.FromArgb(25698);

الدالة السابقة تحول الرقم 25698 إلى لون , وبنفس الطريقة سنغير القيمة الناتجة من ملف XML إلى لون :




كود:
this.BackColor = Color.FromArgb(StyleNode["MainBackColor"].InnerText);

التعليمة السابقة أيضاً خاطئة لأن الدالة Color.FromArgb يجب أن تستقبل مدخل من نوع رقم , بينما القيمة الناتجة من ملف XML تمثل نص

وبالتالي يجب أيضاً تحويلها إلى رقم بواسطة كائن التحويل Convert.ToInt32 وتصبح التعليمة الصحيحة :




كود:
this.BackColor = Color.FromArgb(Convert.ToInt32(StyleNode["MainBackColor"].InnerText));

وهكذا لجميع قيم الألوان , فمثلا لتغيير خلفية قائمة التشغيل pl :

نرجع لجدول الكلمات المفتاحية ومدلولاتها ونبحث عن مفتاح خلفية قائمة التشغيل , سنجده PlayListBackColor




كود:
pl.BackColor = Color.FromArgb(Convert.ToInt32(StyleNode["PlayListBackColor"].InnerText));

وهكذا يجب كتابة تعلميات تحويل لجميع الكلمات المفتاحية حسب التسميات في التطبيق لديك

ولتغيير خلفيات الأزرار أو الكائنات سنستخدم الخاصية Image.FromFile والتي
تنتج متغير من نوع صورة وتستقبل مدخل واحد يمثل مسار ملف الصورة

مثلاً لتغيير خلفية حاضن الفيديو نتعامل معه بإسمه وهو p1 :




كود:
p1.BackgroundImage=Image.FromFile(@"c:\back.jpg");

التعليمة السابقة تقوم بتغيير خلفية كائن الحاضن إلى الصورة back.jpg الموجودة في القرص المحلي c

ولتحميل القيمة الموجوده داخل ملف XML يجب أن نعرف المسار الكامل لملفات الصور

حيث أن ملف XML يحتوي فقط على إسم الصورة ولا يحتوي على مسارها كاملاً , ونعلم أن مسارها هو نفس مسار مجلد الستايل

وبالتالي يجب إنشاء متغير من نوع نص لخزن مسار الستايل الحالي الذي يحتوي على الصور :




كود:
string stylepath;
stylepath = Application.StartupPath @"\Styles\" currentstyle @"\";

أضفنا إلى مسار مجلد البرنامج مجلد الستايلات ثم أضفنا إسم الملف المختار
currentstyle وبالتالي فإن المتغير الجديد stylepath سيحتوي على المسار
الكامل للصور في الستايل المختار

بقي أن نجد إسم الصورة من ملف XML

نبحث عن الكلمة المفتاحية لقيمة خلفية كائن الفيديو وهي VedioImage




كود:
p1.BackgroundImage = Image.FromFile(stylepath StyleNode["VediotImage"].InnerText);

ولكن أحياناً لا يحتوي ملف XML على قيمة إذا أدرنا أن تكون الخلفية فارغة
وبالتالي الكود السابق سينتج خطأ لانه لا يوجد قمية عند المفتاح VedioImage

لذلك يجب وضع التعليمة السابقة ضمن جملة Try Catch :




كود:
try
{
p1.BackgroundImage = Image.FromFile(stylepath StyleNode["VediotImage"].InnerText);
}
catch
{
}

ولإختصار المساحة يمكن كتابة الكود في سطر واحد :




كود:
try { p1.BackgroundImage = Image.FromFile(stylepath StyleNode["VediotImage"].InnerText);}catch{}

وهكذا لجميع خلفيات الأزرار و الكائنات الأخرى , مثلاً زر التشغيل الذي إسمه btnPlay

نبحث عن مفتاح خلفية زر التشغيل في جدول المفاتيح سنجده PlayImage :




كود:
try { btnPlay.BackgroundImage = Image.FromFile(stylepath StyleNoder=Blue]PlayImage"].InnerText);}catch{}

و زر الإيقاف الذي إسمه btnStop سنجد أن مفتاح خلفية زر الإيقاف هو StopImage :





كود:
try { btnStop.BackgroundImage = Image.FromFile(stylepath StyleNoder=Blue]StopImage"].InnerText);}catch{}

وهكذا لجميع الكلمات المفتاحية في الجدول السابق , وبتجميع الكود في إجراء
واحد يستخدم لتحميل قيم الستايل المختار ولنسمي هذا الإجراء LoadStyle :

إفتح كود النافذة الرئيسية وأنسخ هذا الإجراء وتأكد أنه خارج أي إجراء آخر




كود:
void LoadStyle()
{
try
{
string currentstyle;
currentstyle = System.IO.File.ReadAllText(Application.StartupPath @"\Styles\CurrentStyle.txt");
sc.Text = currentstyle;

XmlDocument StyleDoc = new XmlDocument();
StyleDoc.Load(Application.StartupPath @"\Styles\" currentstyle @"\Style.XML");
XmlNode StyleNode = StyleDoc["Style"];


this.BackColor = Color.FromArgb(Convert.ToInt32(StyleNode["MainBackColor"].InnerText));
pl.BackColor = Color.FromArgb(Convert.ToInt32(StyleNode["PlayListBackColor"].InnerText));
pl.ForeColor = Color.FromArgb(Convert.ToInt32(StyleNode["PlayListFontColor"].InnerText));
ac.BackColor = Color.FromArgb(Convert.ToInt32(StyleNode["MainSelectAlbumeBackColor"].InnerText));
ac.ForeColor = Color.FromArgb(Convert.ToInt32(StyleNode["MainSelectAlbumeFontColor"].InnerText));
sc.BackColor = Color.FromArgb(Convert.ToInt32(StyleNode["MainSelectStyleBackColor"].InnerText));
sc.ForeColor = Color.FromArgb(Convert.ToInt32(StyleNode["MainSelectStyleFontColor"].InnerText));
len.ForeColor = Color.FromArgb(Convert.ToInt32(StyleNode["TimeFontColor"].InnerText));
boxMthd.ForeColor= Color.FromArgb(Convert.ToInt32(StyleNode["MethodFontColor"].InnerText));
serbtn.ForeColor= Color.FromArgb(Convert.ToInt32(StyleNode["MethodFontColor"].InnerText));
rndbtn.ForeColor= Color.FromArgb(Convert.ToInt32(StyleNode["MethodFontColor"].InnerText));
barMove.BackColor= Color.FromArgb(Convert.ToInt32(StyleNode["MoveBarColor"].InnerText));
barVol.BackColor=Color.FromArgb(Convert.ToInt32(StyleNode["SoundBarColor"].InnerText));
mute.ForeColor=Color.FromArgb(Convert.ToInt32(StyleNode["MuteFontColor"].InnerText));


string stylepath;
stylepath = Application.StartupPath @"\Styles\" currentstyle @"\";

try { this.BackgroundImage = Image.FromFile(stylepath StyleNode["MainBackGroundImage"].InnerText); }catch { }
try { btnStop.BackgroundImage = Image.FromFile(stylepath StyleNode["StopImage"].InnerText); }catch { }
try { btnPlay.BackgroundImage = Image.FromFile(stylepath StyleNode["PlayImage"].InnerText); }catch { }
try { btnRecord.BackgroundImage = Image.FromFile(stylepath StyleNode["RecordImage"].InnerText); }catch { }
try { btnForward.BackgroundImage = Image.FromFile(stylepath StyleNode["ForwardImage"].InnerText); }catch { }
try { btnStopRecord.BackgroundImage = Image.FromFile(stylepath StyleNode["StopRecordingImage"].InnerText); }catch { }
try { btnBackWard.BackgroundImage = Image.FromFile(stylepath StyleNode["BackwardImage"].InnerText); }catch { }
try { btnOpen.BackgroundImage = Image.FromFile(stylepath StyleNode["OpenImage"].InnerText); }catch { }
try { btnPause.BackgroundImage = Image.FromFile(stylepath StyleNode["PauseImage"].InnerText); }catch { }
try { btnFullScreen.BackgroundImage = Image.FromFile(stylepath StyleNode["FullScreenImage"].InnerText); }catch { }
try { p1.BackgroundImage = Image.FromFile(stylepath StyleNode["VedioImage"].InnerText); } catch { }
}
catch
{
MessageBox.Show("حدث خطأ أثناء تحميل الستايل");
}
}

الجزء الأول من الإجراء السابق لقراءة الستايل المختار من ملف CurrentStyle.txt

وإنشاء كاءن XMLDocument وتحميل ملف XML للستايل المختار

والجزء الثاني لتحميل ألوان الكائنات كما شرحنا سابقاً

والجزء الثالث لتحميل الصور للكائنات كما شرحنا أيضاً

لاحظ أن خاصية الخلفية للكائنات هي :




كود:
BackgroundImage

وخاصية لون الخلفية لأي كائن هي :




كود:
BackColor

وخاصية لون الخط لأي كائن هي :




كود:
ForeColor

بقي أن نضيف مكان مناسب لإستدعاء هذا الإجراء , وأنسب مكان هو حدث إختيار ستايل من قائمة إختيار الستايلات

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




كود:
System.IO.File.WriteAllText(Application.StartupPath @"\Styles\CurrentStyle.txt", sc.Text);

أضف بعده سطر إستدعاء إجراء تحميل الستايل ليصبح الكود هكذا :




كود:
System.IO.File.WriteAllText(Application.StartupPath @"\Styles\CurrentStyle.txt", sc.Text);
LoadStyle();

يوجد هناك مكان آخر يجب أن نستدعي فيه هذا الإجراء وهو عند بداية تشغيل البرنامج أي عند حدث تحميل النافذة الرئيسية

إذهب إلى الكود وأنقر مزدوجا في أي مكان فراغ من النفاذة الرئيسية لتذهب
إلى الكود , أضف تعليمة الإستدعاء في نهاية الإجراء ليصبح هكذا :




كود:
doc.Load(Application.StartupPath "//albumes.xml");
XmlNode albumesnd = doc["albumes"];
XmlNode alnd = albumesnd.FirstChild;
while (alnd != null)
{
ac.Items.Add(alnd.Name);
alnd = alnd.NextSibling;
}
ReadAllStyles();
LoadStyle();

بهذا أكملنا وظائف تغيير الستايل في النافذة الرئيسية , بقي أن نضيف نفس الإجراء لنافذة الألبومات :

إفتح كود نافذة الألبومات وإنسخ الكود التالي وتأكد أنه خارج أي إجراء آخر :




كود:
void LoadStyle()
{
try
{
string currentstyle;
currentstyle = System.IO.File.ReadAllText(Application.StartupPath @"\Styles\CurrentStyle.txt");

XmlDocument StyleDoc = new XmlDocument();
StyleDoc.Load(Application.StartupPath @"\Styles\" currentstyle @"\Style.XML");
XmlNode StyleNode = StyleDoc["Style"];


this.BackColor = Color.FromArgb(Convert.ToInt32(StyleNode["AlbumesBackColor"].InnerText));
lv.BackColor = Color.FromArgb(Convert.ToInt32(StyleNode["FilesFontColor"].InnerText));
ac.BackColor = Color.FromArgb(Convert.ToInt32(StyleNode["AlbumesSelectAlbumeBackColor"].InnerText));
ac.BackColor = Color.FromArgb(Convert.ToInt32(StyleNode["AlbumesSelectAlbumeFontColor"].InnerText));


string stylepath;
stylepath = Application.StartupPath @"\Styles\" currentstyle @"\";

try { this.BackgroundImage = Image.FromFile(stylepath StyleNode["AlbumesBackGroundImage"].InnerText); }catch { }
try { btnAdd.BackgroundImage = Image.FromFile(stylepath StyleNode["AddImage"].InnerText); }catch { }
try { btnRemove.BackgroundImage = Image.FromFile(stylepath StyleNode["DeleteImage"].InnerText); }catch { }
try { btnUp.BackgroundImage = Image.FromFile(stylepath StyleNode["UpImage"].InnerText); }catch { }
try { btnDown.BackgroundImage = Image.FromFile(stylepath StyleNode["DownImage"].InnerText); }catch { }
try { btnNew.BackgroundImage = Image.FromFile(stylepath StyleNode["NewAlbumeImage"].InnerText); }catch { }
try { btnSave.BackgroundImage = Image.FromFile(stylepath StyleNode["SaveAlbumeImage"].InnerText); } catch { }
try { btnDelete.BackgroundImage = Image.FromFile(stylepath StyleNode["DeleteAlbumeImage"].InnerText); }catch { }
try { btnOk.BackgroundImage = Image.FromFile(stylepath StyleNode["OkImage"].InnerText); }catch { }
try { btnCancel.BackgroundImage = Image.FromFile(stylepath StyleNode["CancelImage"].InnerText); }catch { }
try { lv.BackgroundImage = Image.FromFile(stylepath StyleNode["FilesImage"].InnerText); }catch { }
}
catch
{
MessageBox.Show("حدث خطأ أثناء تحميل الستايل");
}
}

هذا الإجراء يشبه كثيراً نفس الإجراء في النافذة الرئيسية إلا أنه هنا للتعامل مع كائنات نافذة الألبومات

هنا أيضاً يجب أن نجد مكان مناسب لإستدعاء الإجراء وهو عند تحميل نافذة الألبومات

إذهب إلى تصميم نافذة الألبومات وأنقر مزدوجاً على أي مكان فارغ فيها

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




كود:
FillView();
FillCombo();
LoadStyle();

الواجب:

صمم ستايل جديد بواسطة برنامج صنع الستايلات وطبقة في البرنامج

ملاحظة : برنامج مصمم الستايلات ينتج مجلد بنفس إسم الستايل الذي إخترته

قم بنسخ المجلد كامل إلى مجلد Styles في مسار البرنامج , وعند تشغيل البرنامج سيضاف الستايل إلى القائمة المنسدله


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

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

..

الموضوع الأصلي : [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال  المصدر : منتديات عين تاغروت
الاوسمه
 :
اوسمه (tagrot)


الرجوع الى أعلى الصفحة اذهب الى الأسفل
المعلومات
الكاتب:
Tagrot
اللقب:
المدير العام
الرتبه:
المدير العام
الصورة الرمزية

Tagrot


البيانات
نسخة المنتدى :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Fmphpb10
نوع المتصفح :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Fmfire10
صورة البلد :
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Dz10
عدد المساهمات :
3013
تاريخ التسجيل :
14/05/2009
العمر :
34
الموقع :
الجزائر

التوقيت

الإتصالات
الحالة:
وسائل الإتصال:
http://tagrot.mountada.biz
مُساهمةموضوع: رد: [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال   [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 I_icon_minitimeالإثنين مارس 11, 2013 8:22 am

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



هيييييييييه ( تنهيدة حارة )

حانت اللحظة الصعبة

دايما ً لحظات الوداع صعبة ............ حان الوقت عشان نقلكم

خلصنا الدروس
حان الوقت نقلكم ما راح نشوفكم تاني
لحد ما ربنا يكرمنا بشيء جديد نرجع لكم فيه و تفيدونا و نفيدكم

حان الوقت الآن نودعكم

أو الأصح ..... نقلكم

وداعا ً إلى اللقاء ..... في موعد ٍ جديد
يطيب فيه اللقاء ...... و تحلوا المواعيد

لكن صراحة ما قدرنا نترككم و نروح قبل ما نرسل كلمة صادقة من القلب للقلب ..... راح نحاول نختصر فيها
عشان ما نزهقكم بكلام كتير

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

زي ما قلت ..... صعب علينا فراقكم

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

صعب الكلام بمواقف زي كدا ........ والكلام بيروح من الإنسان

لكن حابين نشكر معانا ناس بجد تعبت و اجتهدت و شاركتنا
ناس كان لها أثر كبير جدا و حضور فعلا ً رائع و أعطى الموضوع حضور جميل

حابين نشكر
77ahmed
و
Black-Death
و
Only 4U Baby
و
smsm_N70
و
ريناااد
و
ghaithsoon
و
zaynaz_40
و
good killer
و
Almorshid
و
Super Ahmed
و
ikhwanonline
صراحة ......... كلكم أبدعتم
مش شرط بالبرمجة ........... حتى لو كتبتم مشاركة وحدة بس
تكفي ....... وجودكم كان له تأثير كبير علينا
و راح نذكركم فيها للأبد بإذن الله تعالى ]


أما
sireen
ما شاء الله عنك يا أختي ..... بدأتي معانا بدون أي أساس للبرمجة .... لكنك
مشيتي كويس و تابعتي للنهاية و أصريتي تتعلمي و تبدعي و كانت تصاميمك فعلا
ً ذوقها عالي
رغم إنك فتاة ....... و الفتيات ما بيحبوا هيك أشياء كتير زي البرمجة
لكن تابعتي للنهاية ......... شكر خاص جدا لك


mostmast
أما إنتا يا أخي ........... فكنت أول واحد خلص الدروس كلهم و طبق للدرس ال 12
ما شاء الله عنك ....... أتوقع لك مستقبل لو تكمل و تجتهد من عندك ...... البرمجة مش صعبة على اللي طالبها فعلا ً و بيحبها
نشكرك يا أخي جدا ..... و نتمنى لك الخير بحياتك


وصلنا للشخص اللي فعلا فعلا ً يستحق كل كل الشكر
الشخص اللي ساعدنا جدا ...... و تابع معانا
كان متواضع و متعاون ساعدنا كتير كتير
كان معانا بكل شيء .. و ما زال
ولا نزكي على الله أحدا ً
لكنه ما كان يمزح كتير [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال - صفحة 2 Tongue

أكيد الكل عرفه
هو أخونا
sultan2
مشرفكم العام يا جماعة
فعلا ً يا أخي لك شكر كبير كبير كبير من كل الحماة
كنت نعم الأخ .......

كنا و ما زلنا نتمنى نتعرف عليك أكثر ....... كأخ مش أكتر
و راح تصير بيوم بإذن الله

نشكرك يا أخي من قلوبنا فعلا ً


في الختــــام

يا رب .......... يا رب نكون قدرنا فعلاً نفيدكم ولو
بالشيء القليل ........ و يا رب نكون ساعدناكم تكسروا الحاجز الأول بينكم و
بين البرمجة ... و نكون ساعدناكم توقفوا على بداية الطريق
البرمجة مش صعبة ....... بس بدها تفكير و ذكاء .......
مش راح نحكي أكتر من كدا ......... لإنه حكينا كتير و بيكفي


لا تنسونا ........... فنحن لن ننساكم
وفقكم الله ....... و جمعنا و إياكم في الجنة يا رب

رجاء أخير ....... ركزوا فيه عشان خاطرنا

ما تنسونا بدعوة في ظهر الغيب أو في جوف الليل
ادعولنا ربنا يثبتنا على الحق و يوفقنا فيه



ملاحظتي الختام
1- الموضوع راح نتابع فيه على أساس لو في ناس جديدة شاركت أو حبت تسأل
2- يحق للجميع إنه ينشر الدروس للفائدة و له و لنا الثواب بإذن الله تعالى




الموضوع الأصلي : [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال  المصدر : منتديات عين تاغروت
الاوسمه
 :
اوسمه (tagrot)


الرجوع الى أعلى الصفحة اذهب الى الأسفل
 

[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال

استعرض الموضوع التالي استعرض الموضوع السابق الرجوع الى أعلى الصفحة 
صفحة 2 من اصل 2انتقل الى الصفحة : الصفحة السابقة  1, 2
خدمات الموضوع
 KonuEtiketleri كلمات دليليه
[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال , [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال , [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال ,[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال ,[#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال , [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال
 KonuLinki رابط الموضوع
 Konu BBCode BBCode
 KonuHTML Kodu HTMLcode
إذا وجدت وصلات لاتعمل في الموضوع او أن الموضوع [ [#C] تعلم خطوة بخطوة , مع الإجابة عن أي سؤال ] مخالف ,, من فضلك راسل الإدارة من هنا

 مواضيع مماثلة

-
» تعلم التحليل الإخبارى خطوة بخطوة
» كيفية التعديل على التومبيلات خطوة بخطوة بالصور حصريا من عين تاغروت
» تعلم برنامج Microsoft Office FrontPage كتاب كامل تعلم فرنت بيج
» اضغط على السؤال واسمع الإجابة
» تعلم من اين تبدأ فى سوق الفوركس

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
منتديات عين تاغروت :: اقسام التفنية الحديثة  :: منتدى لغات البرمجة :: قسم الشروحات-