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

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

إضافة رد

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

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


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

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

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

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

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

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



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

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

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

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



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

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



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

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

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

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

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

زر التسجيل - btnRecord

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

زر التقديم - btnForward

زر التأخير - btnBackWard

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

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

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

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

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

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

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

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



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

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

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

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

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

زر حذف ملف - btnRemove

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

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

زر موافق - btnOk

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

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

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

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

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



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

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

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

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



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



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

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

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

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

وأضف مجلد جديد بهذا الإسم :
كود PHP:
     Styles 
هذا هو المجلد الذي سيحتفظ بجميع مجلدات الواجهات المختلفة



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



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

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

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

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

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

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

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

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

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

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

كود PHP:
     string[] subfld;
subfld=System.IO.Directory.GetDirectories(@"c:\"); 
السطر الأول تعريف مصفوفة نصوص , والسطر الثاني إسناد ناتج الدالة للمصفوفة subfld

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

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

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

ونعلم أن هذا المجلد موجود في مسار ملف البرنامج , ومن الخطأ أن نكتب التعليمة هكذا :
كود PHP:
     string[] subfld;
subfld=System.IO.Directory.GetDirectories(@"c:\cs\project\bin\debug\styles"); 
لانه لو تغير مجلد البرنامج فلن تعمل التعليمة السابقة لأن مكان المجلد Style تغير

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

وبالتالي نحصل على مسار مجلد الستايلات مهما تغير مكان البرنامج :
كود PHP:
     string[] subfld;
subfld=System.IO.Directory.GetDirectories(Application.StartupPath + @"\Styles"); 
التعليمة السابقة ستعمل دائما بغض النظر عن مسار البرنامج و هذا ما نحتاجه

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

لكن هناك مشكلة المصفوفة subfld تحتوي على نصوص تمثل المسار الكامل لمجلد الستايل مثل :
كود PHP:
     c:\cs\project\bin\debug\styles\style1 
ونحن نريد فقط إسم الستايل فقط في قائمة إختيار الستايلات :
كود PHP:
     style1 
لحل هذه المشكلة سنستخدم خاصية التبديل في النص , وهي دالة تقوم بالبحث عن كلمة محددة وتبديلها بكلمة أخرى

التعليمة هي Replace وتوجد في أي متغير من نوع نص مثلاً :
كود PHP:
     string wrd;
wrd="this is a test";
wrd.Replace("test","good test"); 
السطر الأخير إستدعاء لتعليمة الإستبدال حيث تبحث عن كلمة test في المتغير wrd وتحولها إلى good test

وتصبح الجملة داخل متغير wrd :
كود PHP:
     this is a good test 
سنستخدم هذه الخاصية لمسح مسار مجلد الستايلات في المصوفة subfld والإبقاء فقط على إسم مجلد الستايل

مثلاً لو كانت قيمة العنصر الأول من المصفوفة هي :
كود PHP:
     c:\cs\project\bin\debug\styles\style1 
سنحصل على إسم المجلد فقط بهذه التعليمة :
كود PHP:
     subfld[0].Replace("c:\cs\project\bin\debug\styles\",""); 
حيث أن التعليمة السابقة تأخذ الجزء الغير ضروري من المسار وتكتب بدلاً منه فراغ وبالتالي بيقى فقط style1

نلاحظ أن الجزء المحذوف من المسار هو نفسه المسار الناتج من تعليمة :
كود PHP:
     Application.StartupPath + @"\Styles" 
لذلك ولكي تنجح التعليمة مهما تغير مسار البرنامج فسنغيرها كما فعلنا سابقاً :
كود PHP:
     subfld[0].Replace(Application.StartupPath + @"\Styles\",""); 
التعليمة السابقة سنكررها لكل عنصر من عناصر المصفوفة subfld بإستخدام دوارة for :
كود PHP:
                 for (int i 0subfld.Lengthi++)
            {
                
sc.Items.Add(subfld[i].Replace(Application.StartupPath + @"\Styles\", ""));
            } 
الدوارة السابقة تكرر العملية من الصفر حتى عدد عناصر المصفوفة subfld.Length كما عرفنا في الدرس الثالث

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

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

إذهب إلى كود التطبيق وإنسخ هذا الكود وتأكد أن يكون خارج أي إجراء آخر :
كود PHP:
             void ReadAllStyles()
        {
            try
            {
                
string[] subfld;
                
subfld System.IO.Directory.GetDirectories(Application.StartupPath + @"\Styles");
                for (
int i 0subfld.Lengthi++)
                {
                    
sc.Items.Add(subfld[i].Replace(Application.StartupPath + @"\Styles\", ""));
                }
            }
            catch
            {
                MessageBox.Show("
حدث خطأ أثناء محاولة قراءة الستايلات");
            }
        } 
االسطر الأول تعريف مصفوفة من نوع نصوص , لاحظ القوسين بعد كلمة string للدلالة على أنها مصفوفة متغيرات وليست متغير واحد

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

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

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

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

كود PHP:
             void MainFormLoad(object senderSystem.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 قبل أخر حاصرة ليصبح الإجراء هكذا :
كود PHP:
    
             void MainFormLoad
(object senderSystem.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*******AllText يستقبل هذا الإجراء مدخلين من نوع نص الأول يمثل مسار الملف المراد كتابتة

والمدخل الثاني يمثل النص المراد كتابته في الملف , مثلاً :
كود PHP:
     System.IO.File*******AllText(@"c:\newtxt.txt","السلام عليكم"); 
الكود السابق يقوم بإنشاء ملف بإسم new.txt في القرص المحلي c ويكتب داخلة جملة "السلام عليكم"

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

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

إفتح تصميم النافذة الرئيسية وأنقر مزدوجاً على قائمة إختيار الستايلات وفي الكود أكتب تعليمة خزن الملف المختار :
كود PHP:
     System.IO.File*******AllText(Application.StartupPath + @"\Styles\CurrentStyle.txt"sc.Text); 
التعليمة السابقة ستقوم بإنشاء ملف نصي بإسم CurrentStyle.txt في مجلد الستايلات وتكتب داخله النص الموجود في قائمة إختيار الستايلات sc

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

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

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

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

وللقراءة من الملف النصي سنستخدم إجراء جديد يستقبل مدخل واحد يمثل مسار الملف المراد قراءته وينتج قيمة من نوع نص تمثل محتويات الملف :
كود PHP:
     System.IO.File.ReadAllText(@"c:\newtxt.txt"); 
الإجراء السابق ينتج قيمة من نوع نص تمثل محتويات الملف newtxt.txt الموجود في القرص المحلي c

وبنفس الطريقه سنقوم بقراءة الستايل المخزن في الملف CurrentStyle.txt :
كود PHP:
                 string currentstyle;
            
currentstyleSystem.IO.File.ReadAllText(Application.StartupPath + @"\Styles\CurrentStyle.txt"); 
عرفنا متغير من نوع نص currentstyle وأسندنا له ما داخل الملف CurrentStyle.txt وهو إسم الستايل المختار

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

     Application
.StartupPath + @"\Styles\" + currentstyle + @"\Style.XML
هذا هو مسار ملف XML للستايل المختار حيث أخذنا مسار البرنامج وإضفنا له مجلد Styles ثم إسم الستايل المختار currentstyle ثم إسم ملف XML

لقراءة القيم من الملف نحتاج لتعريف كائن من نوع XMLDocument كما فعلنا في الدرس الحادي عشر ولنسمه StyleDoc:
كود PHP:
                 XmlDocument StyleDoc = new XmlDocument(); 
ولتحميل قيم الملف المطلوب يجب إستدعاء إجراء Load بواسطة مسار الملف
كود PHP:

                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 لخزن العقدة الرئيسية :
كود PHP:
                 XmlNode StyleNode StyleDoc["Style"]; 
الأن يمكن إستدعاء أي قيمة من خلال العقدة StyleNode فمثلاً لإستدعاء قيمة لون خلفية النافذة الرئيسية MainBackColor

كود PHP:
     StyleNode["MainBackColor"].InnerText 
التعليمة السابقة ستنتج نص يمثل قيمة لون خلفية النافذة الرئيسية ولتغيير لون خلفية النافذة الرئيسية :
كود PHP:
     this.BackColor StyleNode["MainBackColor"].InnerText
التعليمة السابقة خاطئة لأنه من المفترض أن يكون ناتج الطرف الأيمن من المعادلة هو كائن من نوع لون

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

لدينا دالة لتغيير رقم اللون إلى كائن لون :
كود PHP:
     Color.FromArgb(25698); 
الدالة السابقة تحول الرقم 25698 إلى لون , وبنفس الطريقة سنغير القيمة الناتجة من ملف XML إلى لون :
كود PHP:
     this.BackColor Color.FromArgb(StyleNode["MainBackColor"].InnerText); 
التعليمة السابقة أيضاً خاطئة لأن الدالة Color.FromArgb يجب أن تستقبل مدخل من نوع رقم , بينما القيمة الناتجة من ملف XML تمثل نص

وبالتالي يجب أيضاً تحويلها إلى رقم بواسطة كائن التحويل Convert.ToInt32 وتصبح التعليمة الصحيحة :
كود PHP:
     this.BackColor Color.FromArgb(Convert.ToInt32(StyleNode["MainBackColor"].InnerText)); 
وهكذا لجميع قيم الألوان , فمثلا لتغيير خلفية قائمة التشغيل pl :

نرجع لجدول الكلمات المفتاحية ومدلولاتها ونبحث عن مفتاح خلفية قائمة التشغيل , سنجده PlayListBackColor
كود PHP:
     pl.BackColor Color.FromArgb(Convert.ToInt32(StyleNode["PlayListBackColor"].InnerText)); 
وهكذا يجب كتابة تعلميات تحويل لجميع الكلمات المفتاحية حسب التسميات في التطبيق لديك

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

مثلاً لتغيير خلفية حاضن الفيديو نتعامل معه بإسمه وهو p1 :
كود PHP:
     p1.BackgroundImage=Image.FromFile(@"c:\back.jpg"); 
التعليمة السابقة تقوم بتغيير خلفية كائن الحاضن إلى الصورة back.jpg الموجودة في القرص المحلي c

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

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

وبالتالي يجب إنشاء متغير من نوع نص لخزن مسار الستايل الحالي الذي يحتوي على الصور :
كود PHP:
                string stylepath;
                
stylepath Application.StartupPath + @"\Styles\" + currentstyle + @"\"; 
أضفنا إلى مسار مجلد البرنامج مجلد الستايلات ثم أضفنا إسم الملف المختار currentstyle وبالتالي فإن المتغير الجديد stylepath سيحتوي على المسار الكامل للصور في الستايل المختار

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

نبحث عن الكلمة المفتاحية لقيمة خلفية كائن الفيديو وهي VedioImage
كود PHP:
     p1.BackgroundImage Image.FromFile(stylepath StyleNode["VediotImage"].InnerText); 
ولكن أحياناً لا يحتوي ملف XML على قيمة إذا أدرنا أن تكون الخلفية فارغة وبالتالي الكود السابق سينتج خطأ لانه لا يوجد قمية عند المفتاح VedioImage

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

كود PHP:
                try
           { 
               
p1.BackgroundImage Image.FromFile(stylepath StyleNode["VediotImage"].InnerText);
           }
           catch
           {
           } 
ولإختصار المساحة يمكن كتابة الكود في سطر واحد :

كود PHP:
                try { p1.BackgroundImage Image.FromFile(stylepath StyleNode["VediotImage"].InnerText);}catch{} 
وهكذا لجميع خلفيات الأزرار و الكائنات الأخرى , مثلاً زر التشغيل الذي إسمه btnPlay

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

كود PHP:
                try { btnPlay.BackgroundImage Image.FromFile(stylepath StyleNode["PlayImage"].InnerText);}catch{} 
و زر الإيقاف الذي إسمه btnStop سنجد أن مفتاح خلفية زر الإيقاف هو StopImage :

كود PHP:
 
                
try { btnStop.BackgroundImage Image.FromFile(stylepath StyleNode["StopImage"].InnerText);}catch{} 
وهكذا لجميع الكلمات المفتاحية في الجدول السابق , وبتجميع الكود في إجراء واحد يستخدم لتحميل قيم الستايل المختار ولنسمي هذا الإجراء LoadStyle :

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

كود PHP:
             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 للستايل المختار

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

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

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

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

أذهب إلى تصميم النافذة الرئيسية و أنقر مزدوجا على قائمة إختيار الستايلات لتذهب إلى كود إجراء الحدث :
كود PHP:
 
                 System
.IO.File*******AllText(Application.StartupPath + @"\Styles\CurrentStyle.txt"sc.Text); 
أضف بعده سطر إستدعاء إجراء تحميل الستايل ليصبح الكود هكذا :
كود PHP:
 
                 System
.IO.File*******AllText(Application.StartupPath + @"\Styles\CurrentStyle.txt"sc.Text);
            
LoadStyle(); 
يوجد هناك مكان آخر يجب أن نستدعي فيه هذا الإجراء وهو عند بداية تشغيل البرنامج أي عند حدث تحميل النافذة الرئيسية

إذهب إلى الكود وأنقر مزدوجا في أي مكان فراغ من النفاذة الرئيسية لتذهب إلى الكود , أضف تعليمة الإستدعاء في نهاية الإجراء ليصبح هكذا :
كود PHP:
                 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(); 
بهذا أكملنا وظائف تغيير الستايل في النافذة الرئيسية , بقي أن نضيف نفس الإجراء لنافذة الألبومات :

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

كود PHP:
             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("
حدث خطأ أثناء تحميل الستايل");
            }
        } 
هذا الإجراء يشبه كثيراً نفس الإجراء في النافذة الرئيسية إلا أنه هنا للتعامل مع كائنات نافذة الألبومات

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

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

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

كود PHP:
                  FillView();
             
FillCombo();
             
LoadStyle(); 
الواجب:

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

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

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


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

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

..


توقيع : khaledbelal



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

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


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

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

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

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
الدرس السادس عشر : طول الملفات - دورة CSharp 2005 khaledbelal دورة CSharp 2005 من منتديات المشاغب 0 03-22-2010 06:03 PM
الدرس الحادي عشر : التعامل مع ملفات XML - دورة CSharp 2005 khaledbelal دورة CSharp 2005 من منتديات المشاغب 0 03-22-2010 04:10 PM
الدرس السابع : التنقل في ملف الميديا - دورة CSharp 2005 khaledbelal دورة CSharp 2005 من منتديات المشاغب 0 03-22-2010 03:37 PM
الدرس الخامس : تشغيل ملف فيديو - دورة CSharp 2005 khaledbelal دورة CSharp 2005 من منتديات المشاغب 0 03-22-2010 03:26 PM
الدرس الثاني : المتغيرات - دورة CSharp 2005 khaledbelal دورة CSharp 2005 من منتديات المشاغب 0 03-12-2010 03:56 PM

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

الساعة الآن 03:48 PM.


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