برامج

* دروس مباشرة في البرمجه بلغة C#2005 مع الإجابة عن الأسئلة * [الأرشيف] - برامج نت

المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : * دروس مباشرة في البرمجه بلغة C#2005 مع الإجابة عن الأسئلة *


الصفحات : [1] 2

حماة النهضة
02-13-2007, 06:41 AM
بسم الله الرحمن الرحيم

فهرس الدروس


مقدمة (http://www.bramjnet.com/vb3/showpost.php?p=2631541#post2631541)

الدرس الأول - مفهوم لغات البرمجة (http://www.bramjnet.com/vb3/showpost.php?p=2684560#post2684560)

الدرس الثاني - المتغيرات (http://www.bramjnet.com/vb3/showpost.php?p=2733015#post2733015)

الدرس الثالث - الجمل الشرطية و الدوارات (http://www.bramjnet.com/vb3/showpost.php?p=2779061#post2779061)

الدرس الرابع - الإجراءات والدوال (http://www.bramjnet.com/vb3/showthread.php?p=2808699#post2808699)

الدرس الخامس - تشغيل ملف فيديو (http://www.bramjnet.com/vb3/showpost.php?p=2841621#post2841621)

الدرس السادس - تشغيل ملفات الريال بلاير (http://www.bramjnet.com/vb3/showpost.php?p=2864443#post2864443)

الدرس السابع - التنقل في ملف الميديا (http://www.bramjnet.com/vb3/showpost.php?p=2877761#post2877761)

الدرس الثامن - المصفوفات والقوائم (http://www.bramjnet.com/vb3/showpost.php?p=2899400#post2899400)

الدرس التاسع - دوال إنتاج الأرقام العشوائية (http://www.bramjnet.com/vb3/showpost.php?p=2950709#post2950709)

الدرس العاشر - التعامل مع أكثر من نافذة (http://www.bramjnet.com/vb3/showpost.php?p=2956321#post2956321)

الدرس الحادي عشر - التعامل مع ملفات XML (http://www.bramjnet.com/vb3/showpost.php?p=2966450#post2966450)

الدرس الثاني عشر - بعض مبادئ الإختبار والتحسين (http://www.bramjnet.com/vb3/showpost.php?p=3002335#post3002335)

الدرس الثالث عشر - التحكم بالصوت (http://www.bramjnet.com/vb3/showpost.php?p=3920967#post3920967)

الدرس الرايع عشر - تسجيل الأصوات (http://www.bramjnet.com/vb3/showpost.php?p=4096806#post4096806)

الدرس الخامس عشر - قوائم البرنامج (http://www.bramjnet.com/vb3/showpost.php?p=4122704&postcount=274)

الدرس السادس عشر - طول الملف (http://www.bramjnet.com/vb3/showpost.php?p=4144618&postcount=276)

الدرس السابع عشر - تغيير الواجهات الرسومية (http://www.bramjnet.com/vb3/showpost.php?p=4160492&postcount=280)


************

ستايلات للبرنامج

هذه عدد من الستايلات (http://www.7oma.com/csharp/styles/styles.zip) الجاهزة يتم إستخدامها بنسخ جميع المجلدات إلى مجلد Styles

http://www.7oma.com/csharp/styles/1.JPG

http://www.7oma.com/csharp/styles/4.JPG

http://www.7oma.com/csharp/styles/3.JPG

http://www.7oma.com/csharp/styles/2.JPG

http://www.7oma.com/csharp/styles/5.JPG

http://www.7oma.com/csharp/styles/6.JPG

http://www.7oma.com/csharp/styles/7.JPG

http://www.7oma.com/csharp/styles/8.JPG

http://www.7oma.com/csharp/styles/9.JPG

http://www.7oma.com/csharp/styles/10.JPG

تحميل الستايلات (http://www.7oma.com/csharp/styles/styles.zip)

..


مقدمة

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

بإختصار الموضوع عبارة عن مجموعة دروس مبسطة في لغة C# 2005 للمبتدئين

بهدف إنشاء هذا البرنامج لتشغيل الصوتيات والمرئيات :

http://www.7oma.com/csharp/images/image12-2.jpg

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

وفي كل درس نبدأ بشرح الفكرة أو المفهوم أو القاعدة

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

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

لكن قبل البداية يجب تجهيز برنامجين للعمل على اللغة

البرنامج الأول من ميكروسوف وهو برنامج ملفات لغة البرمجة .NET Framework

يمكن تحميلة من صفحة التحميل الرئيسية لميكروسوفت :

http://www.microsoft.com/downloads/

ثم إبحث عن Net Framework 2.0

حجم الملف يقارب 24 ميجا بايت

عند فتح هذا اللينك ستجد زر مكتوب عليه Download

.........

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

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

لتحميل C# 2005 Express (http://msdn.microsoft.com/vstudio/express/visualcsharp/default.aspx)

حجم الملف يقارب 450 ميجا بايت

إذا لم تستطع تحميل هذه البيئة فهناك بيئة أخرى مجانية

Sharp Developer (http://prdownloads.sourceforge.net/sharpdevelop/SharpDevelop2_2.0.0.1591_Setup.exe?use_mirror=nchc )

حجم الملف يقارب 4 ميجا بايت

لتنظيم العمل على الدروس ينصح عمل مجلد جديد على القرص المحلي D وتسميته CS

يجب أولاً تنصيب البرنامج الأول dotnetfx.exe

وعند الإنتهاء منها يتم تنصيب البيئة SharpDevelop2_2.0.0.1591_Setup.exe أو C# Express

وبهذا تكون مستعداً لتلقي الدرس الأول

..

Al_Shaimaa
02-13-2007, 07:06 AM
تسلم أخي الكريم و أن شاء الله أكون أحد المنضمين لهذه الدروس..... ربنا يوفقك :)

veto_44
02-13-2007, 11:51 AM
شكرا لك خي الفاضل مبادرة طيبة منك اتمنى منك الاستمرار بها
ومنتظرين الدرس الاول دمت برعاية الله وحفظه .

الفرعون المحترف
02-13-2007, 12:10 PM
ماشاء الله بارك الله فيك اخي الحبيب
شكرا لك بالتوفيق

zakimoulayabdellah
02-13-2007, 12:13 PM
goood friend
thinks

حماة النهضة
02-14-2007, 05:13 AM
تسلم أخي الكريم و أن شاء الله أكون أحد المنضمين لهذه الدروس..... ربنا يوفقك :)
السلام عليكم ..

مرحبا بكِ أختي

ويسعدنا الترحيب بأول المشتركين معنا

وفقكم الله لما يحب ويرضى :)


..][ حمــاة النهضــة ][..

حماة النهضة
02-14-2007, 05:22 AM
شكرا لك خي الفاضل مبادرة طيبة منك اتمنى منك الاستمرار بها
ومنتظرين الدرس الاول دمت برعاية الله وحفظه .

السلام عليكم ..

مرحبا بك أخي

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

والدرس الأول سيكون يوم الثلاثاء الجاي إن شاء الله لن نتأخر

وتسلم أخي الكريم الله يحفظك ويحميك :)


..][ حمــاة النهضــة ][..

حماة النهضة
02-14-2007, 05:26 AM
ماشاء الله بارك الله فيك اخي الحبيب
شكرا لك بالتوفيق
السلام عليكم ..

مرحبا بك أخي

بارك الله لنا ولك

أسعدني ترحيبك كثيرا

الله يحفظك ويحميك أخي :)


..][ حمــاة النهضــة ][..

حماة النهضة
02-14-2007, 05:34 AM
goood friend
thinks
السلام عليكم ..

مرحبا أخي

تسلم .. العفو ^^


---------------------------

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

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


..][ حمــاة النهضــة ][..

imadin
02-14-2007, 08:56 AM
بارك الله فيك أخي الكريم ،ان شاء الله اكون حاضر

abdou0000
02-14-2007, 10:25 AM
thx for that generous effort i really needed to learn this language for me study

حماة النهضة
02-15-2007, 05:11 PM
بارك الله فيك أخي الكريم ،ان شاء الله اكون حاضر
السلام عليكم ..
يسعدني هذا أخي الكريم ..
بارك الله لنا ولك
:)

..][ حمــاة النهضــة ][..

حماة النهضة
02-15-2007, 05:25 PM
thx for that generous effort i really needed to learn this language for me study
Don't mention it ^^
ربنا يحميك ويوفقك بدراستك ...
:)

---------------------------------------------

موعدنا الثلاثاء القادم بإذن الله .. أو ممكن نبدأ يوم الأحد يكون أسرع ^^

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


..][ حمــاة النهضــة ][..

Ahmed_ghanam
02-16-2007, 01:15 PM
مشكور اخى الكريم بارك الله فيك

حماة النهضة
02-20-2007, 08:24 AM
السلام عليكم ورحمة الله وبركاته
أهلا جميعا .. مشتركين وأعضاء وزوار ..
اليوم موعد درسنا الأول .. حاولت أن أضعه يوم الأحد ولكن المنتدى علق معي !
المهم أن نبدأ .. هيا :smailes100:


الدرس الاول

مفهوم لغات البرمجة

منذ بداية ظهور الكهرباء وتطورها , ظهرة فكرة معالجة التيار الكهربائي والإستفادة منه

فمثلاً المصباح يأخذ الكهرباء ويعالجها "يحولها" إلى ضوء

والراديو يأخذ الكهرباء ويحولها إلى صوت .. وهكذا

وبالتالي فإن أي عمل مع الكهرباء يحتاج إلى ثلاثة أشياء مهمة

1- مدخلات "تيار كهربائي".

2-معالجة "تحويل التيار إلى ضوء , صوت....".

3-مخرجات "ضوء , صوت ....".

بالإضافة إلى جهاز التحويل "المصباح , الراديو"

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

مثلاً عندما تضغط اي زر في لوحة المفاتيح , فإن تيار كهربائي يتولد وينطلق بإتجاه المعالج

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

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

وهذا هو أساس العمل في الحاسوب , حيث أن معالج الكمبيوتر لا يستقبل تيار مستمر

كما في المصباح , أو في الراديو , أو في أي جهاز كهربائي

وإنما معالج الكمبيوتر يستقبل تيار متغير ,

للتوضيح نفرض أن العدد 1 يمثل مرور تيار والعدد 0 يمثل عدم مرور التيار

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

0000000000000000

أما عندما نضيئ المصباح فإن التيار يكون هكذا

1111111111111111

وهكذا مع الراديو و المكواه و.و.و.

لكن في الحاسوب يختلف شكل التيار لأنه يكون متغير فيكون شيئاً هكذا

110001010100011110101000111010101001

وهذه هي الطريقة التي يفرق المعالج حرف عن حرف آخر فالتيار الذي يمثل حرف الواو مثلاً يكون هكذا

11001010 وحرف الطاء يكون هكذا 10111010 وحرف النون يكون هكذا 01010011

وبالتالي فإن كلمة وطن ستكون هكذا

010100111011101011001010

ولا ننسى أن معنى 0 عدم مرور تيار و معنى 1 مرور تيار وبإفتراض أن سرعة قراءة المعالج لرقم هي ثانية واحد

فأن التيار الكهربائي الذي يمثل حرف الواو 11001010 سيكون هكذا:

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

ثم ينقطع لمدة ثانية ثم يمر لمدة ثانية ثم ينقطع لمدة ثانيتين ثم يمر لمدة ثانيتين

أي أن المعالج سيستغرق ثمان ثواني لقراءة حرف الواو

في المثال السابق افترضنا أن سرعة المعالج هي ثانية لكنها في الحقيقة أسرع بكثير

ومن هنا أعتقد انا فهمنا ما معنى سرعة المعالج "هي سرعة قراءته للرقم الواحد"

والرقم الواحد سواءاً كان 1 أو 0 يسمى "بت" Bit

فعندما تكون سرعة المعالج 3200 يعني أنه يقراً 3200 ميجا بايت في الثانية الواحدة

والميجا يحتوي على 1024 كيلو بايت والكيلو بايت يحتوي على 1024 بايت

والبايت يحتوي على 8 بت

يعني أن هذا المعالج يقراً 26843545600 بت في الثانية الواحدة

يعني أنو بيقرأ حرف الواو في مدة 0.000000000037 من الثانية

والآن بعد أن عرفنا كيف يقرأ الكمبيوتر الكلمات بقي أن نعرف كيف ينفذ الكمبيوتر الأوامر المطلوبة منه.

كان الحاسوب في بدايته يستقبل الأوامر كتيار كهربائي مثل ما رأينا سابقاً

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

فسيكون الأمر شبيهاً بهذا 01010011101010101011010100111011101011001010

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

لذلك ظهر ما يسمى بلغات البرمجة " وهي لغات قريبة من لغة الإنسان ويفهما الحاسوب"

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

Print "وطن"

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

وظيفته قراءة الأوامر المدخلة وتحويلها إلى تيار يفهمه المعالج , لكن عملية الترجمة تتم بشكل غير ظاهر

فما على المبرمج إلا أن يكتب الأوامر ويشغل البرنامج .. والمترجم يقرأ Print "وطن" ويحولها إلى

01010011101010101011010100111011101011001010 ويرسلها إلى المعالج..

مفهوم الكائنات

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

فمثلاً السيارة كائن له صفات "مثل اللون والشكل وعدد الإطارات...." وله أفعال مثل "السير , التوقف, ..."

لا حظوا أن الأفعال قد تكون من الكائن نفسه "السير" و قد تكون من كائن آخر

في الحاسوب أيضاً الأمر لا يختلف فكل شيئ يعتبر كائن له صفات وأفعال

فمثلاً هذا المنتدى كائن له صفات وأفعال

وزر"إقتباس" تحت هذه المشاركة هو كائن له صفات مثل اللون

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

و صندوق النص في آخر هذه الصفحة عند الرد السريع ,

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

وزر ابدأ أو Start في الوندوز هو كائن وشريط المهام Task Bar هو كائن يحتوي على كائن آخر "زر ابدأ"

إذن يمكن لكائن أن يحتوي على عدة كائنات فالسيارة كائن يحتوي على كائن آخر وهي الإطارات مثلاً

التطبيق

بعد تنصيب البرامج أفتحوا مجلد CS اللي عملتوه في القرص D

وداخل المجلد CS اعملوا مجلد جديد اسمه Projects

من سطح المكتب أفتحو ايقونة برنامج بيئة التطوير وهذا شكلها:

http://www.freewebtown.com/gfsd/Image1-1.JPG

بعد ما يفتح معاكم برنامج البيئة بيظهر لكم زرين في الوسط هكذا :

http://www.freewebtown.com/gfsd/Image1-2.JPG

إذا لم تظهر الصورة ممكن تشوفوها هنــا (http://www.mexat.com/vb/attachment.php?attachmentid=142620&d=1154797694)

اضغطوا على زر New Solution المعلم عليه بالأحمر

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

http://www.freewebtown.com/gfsd/Image1-3.JPG

اضغطوا على إشارة + الموضحه في رقم 1 وبعدين أضغطوا علىwindows applications كما في رقم 2

ويعدين أنقروا على Windows Application كما في رقم 3 , عند صندوق اسم المشروع أكتبوا

MyMediaPlayer كما في رقم 4 وبعدين أنقروا على الزر في رقم 5 وإختاروا مجلد Projects

اللي عملتوه داخل مجلد CS في القرص D وبعدين انقروا على زر Create في رقم 6

بتظهر لكم نوافذ المشروع وفيها شفرة المشروع الإفتراضية , تحت نافذة الشفرة انقروا على زر Design كما في الصورة

http://www.freewebtown.com/gfsd/Image1-4.JPG

بتظهر أمامكم هذه النوافذ:

http://www.freewebtown.com/gfsd/Image1-5.JPG

في اليسار انقروا على Windows Forms كما في رقم 1 بتظهر لكم جميع الكائنات اللي نحتاجها في البرامج

وفي الوسط بتظهر لكم نافذة فارغة نسميها Form وهذه النافذة هي النافذة الرئيسية للمشروع

ولا ننسى إن هذه النافذة تعتبر كائن لها صفات مثل إسمها " MyMediaPlayer" ولها أفعال مثل ما راح نشوف بعدين

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

أيش رأيكم لو نغير لون الفورم إلى الأزرق.. نروح على جدول الخصائص وندور على خاصية BackColor

ننقر على الصندوق اللي قدامها بتظهر لنا قائمة ألوان , نختار منها أي لون وليكن الأزرق

نلاحظ أن لون الفورم تغير , يعني أن احنا غيرنا صفة من صفات هذا الكائن

الآن رجعوا الكائن للونه الطبيعي

فيه صفة أيضاً مهمة إسمها Text دوروا عليها في جدول الصفات عند رقم 2

حتلاقوا مكتوب أمامها MyMediaPlayer

أمسحوها وأكتبوا بدلها "مشغل الصوت والفيديو".

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

http://www.freewebtown.com/gfsd/Image1-6.JPG

من نافذة الأدوات على اليسار انقروا على صورة الزر الكتوب قدامه Button

واستمروا في الضغط واسحبوا الماوس لفوق الفورم الفاضي

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

http://www.freewebtown.com/gfsd/Image1-7.JPG

ممكن تغيروا حجم أو موقع الزر زي ما تحبوا , الآن تأكدوا من إختيار الزر و روحوا على نافذة الصفات

دوروا على صفة اسمها Text وأكتبوا بدل button1 أكتبوا "ترحيب".

لاحظوا أنا غيرنا صفة من صفات الزر , ولكن كيف نغير من أفعال الزر لأنه كائن ولا بد له من أفعال

والزر يمكن أن يفعل أي شيء لكنا نريده أن يظهر رسالة ترحيب ..

للذهاب إلى أفعال الزر أنقر نقراً مزدوجا Double Click على الزر , ستظهر لك نافذة الشفرة :

http://www.freewebtown.com/gfsd/Image1-8.JPG

وينتقل مؤشر الماوس إلى مكان بين حاصرتين مكتوب فوقة void Button1Click...

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

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

الآن بين الحاصرتين يجب أن نكتب الأمر الذي يظهر الرسالة وهذا الأمر هو


MessageBox.Show("مرحباً بكم إلى سي شارب");


لنشرح الأمر , أولا MessageBox هو كائن في لغة البرمجة يمثل إظهار رسالة

و Show هو كائن أخر داخل كائن MessageBox ويقوم بطباعة الرسالة على الشاشة

وكلمة "مرحباً بكم إلى سي شارب" تعتبر مدخل للكائن وهو يعالج الأمر ويخرج الرسالة على الشاشة

لاحظ أن الأمر MessageBox.Show يعني أظهر رسالة , ولكن المعالج لن ينفذة لأنه لا يعرف ماذا يكتب في الرسالة

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

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

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

في نهاية السطر يجب كتابة الفاصلة المنقوطه ختى نخبر المترجم أن هذه هي نهاية السطر وينتقل إلى السطر التالي

ملاحظة: يجب أن تكون حذراً جداً عند كتابة الشفرة فزيادة نقطة أو حرف تجعل المترجم يرتبك ولا تشغل البرنامج

وأيضاً يجب مراعاة الأحرف الكبيرة والصغيرة

فالمترجم لن يفهم هذا الأمر messagebox بينما يفهم هذا الأمر MessageBox


بقي لنا أن نشغل البرنامج ونرى كيف سيعمل , لتشغيل البرنامج أنقر على زر التشغيل أعلى نافذة الشفرة:

http://www.freewebtown.com/gfsd/Image1-9.JPG

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

http://www.freewebtown.com/gfsd/Image1-10.JPG

مبروك لقد نجحت في تنفيذ أول برنامج بلغة C#

الواجب

اعمل مشروع جديد و اعمل فيه زر لرسالة ترحيب

غيّر لون النافذة الأساسية , و غير حجمها , وغير لون الزر وغير حجمه

وممكن تعمل زر ثاني يظهر رسالة ثانية وارسل التطبيق

لإرسال التطبيق:

اذهب إلى مجلد CS في القرص D ثم إلى مجلد Projects ثم إلى مجلد MyMediaPlayer

ثم إلى مجلد bin ثم إلى مجلد Debug ستجد ملف تنفيذي بإسم MyMediaPlayer

هذا هو برنامجك الأول .. أضغطه ببرنامج الونزيب وأرسله لي

ملاحظة:لما تعمل الواجب أو لما بدك تجرب الكائنات الثانية , أعمل مشروع جديد

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

. نهاية الدرس الأول .

Desert_Eagle

--------------------
أخي Ahmed_ghanam
مرحبا بك أخي ..
يسعدني مرورك والاستمرار ^^
بارك الله لنا ولك ..
:)
--------------------
أنتظركم ..
الله يحميكم ويوفقكم يارب ..
ولو في أي شيء مش واضح أو أسئلة .. تفضلوا ^^

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


..][ حمــاة النهضــة ][..

dutsh2006
02-20-2007, 04:58 PM
بجد مشكووور
بس لى طلب صغير
انا عايز أمر إظهار التاريخ وامر الخروج من البرنامج
مستنى ردك

imadin
02-21-2007, 04:33 PM
مشكور على الدرس واستفدت منه حقيقة

dutsh2006
02-21-2007, 10:29 PM
بجد مشكووور
بس لى طلب صغير
انا عايز أمر إظهار التاريخ وامر الخروج من البرنامج
مستنى ردك

حماة النهضة
02-23-2007, 07:43 AM
بجد مشكووور
بس لى طلب صغير
انا عايز أمر إظهار التاريخ وامر الخروج من البرنامج
مستنى ردك
العفو ^^

لاظهار التاريخ
System.DateTime.Now.ToShortDateString();

الدالة Now في الفئة DateTime ترجع قيمة من نوع تاريخ للتاريخ الحالي المسجل في النظام

وفيها دوال تحويل كثيرة منها ToShortDateString

للخروج من البرنامج:
Application.Exit();

الكائن Application يمثل خصائص ووظائف التطبيق الحالي

Desert_Eagle


..][ حمــاة النهضــة ][..

حماة النهضة
02-23-2007, 08:13 AM
مشكور على الدرس واستفدت منه حقيقة
الحمد لله ^^
وإن شاء الله تستفيد من باقي الدروس كمان ..

ربنا يحميك ..

-----------------------
بنتظر التطبيقات من الأعضاء المتابعين معي لحتى نقدر ننزل الدرس الجديد بميعاده يوم الثلاثاء الجاي إن شاء الله ^^
هنا بالموضوع أو بالرسايل الخاصة ..

في أمان الله


..][ حمــاة النهضــة ][..

حماة النهضة
02-27-2007, 03:14 PM
السلام عليكم ورحمة الله وبركاته
أهلا جميعا .. :)

اليوم موعد الدرس الثاني .. لنبدأ ...

الدرس الثاني

المتغيرات

في الدرس الأول تعلمنا أن كل شيئ في الحاسوب يعتبر كائن

وفي الحقيقة هناك نوعين من الكائنات :

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

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

أي انه من الممكن أن يحتوي الكائن "المتغير" X على قيمة مخزنة في ذاكرة الحاسوب

ومن الممكن أن تكون قيمة المتغير أما رقم أو نص أو حرف أو رقم عشري أو....

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

مع العلم أننا نختار إسم الكائن كما نشاء مادام الإسم يحقق الشروط التالية:

1-أن يكون اسم المتغير حروف أو ارقام لاتينية

2-أن لا يكون أول حروف الإسم رقم , فهذا الإسم غير مسموح 5int بينما هذا مسموح int5

3-أن لا يحتوي الإسم على علامات أواشارات مثل # أو $ أو * أو + , الإشارة المسموحة فقط هي _

وهذه الشروط تنطبق على أسماء الكائنات أو المتغيرات ألتي سنقوم بإنشائها

إذن المتغير هو كائن يستخدم لتخزين قيمة من نوع محدد

مثلاً إذا أردنا أن نعرف متغير اسمه x من نوع رقم سيكون الكود كالتالي:

int x;

وكلمة int إختصار لكلمة integer ومعناها عدد صحيح

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

لاحظ أنك تستطيع تغيير اسم المتغير كما تشاء المهم أن تراعي شروط التسمية الثلاثة

وإذا أردنا تحميل هذا المتغير قيمة محدد يكون الكود كالتالي:

x=20;

الكود السابق معناه أن المتغير x يحمل القيمة 20 ويستمر بحمل القيمة حتي يتوقف البرنامج أو نحملة قيمة أخرى

لاحظ الكود التالي:

int Var1;
int Var2;
Var1=10;
Var2=Var1;

قمنا بتعريف متغيرين من نوع رقم صحيح ثم حملنا الرقم الأول قيمة 10

وفي السطر الأخير حملنا المتغير الثاني قيمة المتغير الأول أي أن المتغير الثاني يحمل أيضاً القيمة 10

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

Var2=Var1

لا تساوي أبداً

Var1=Var2

لإن معامل = في لغات البرمجة يقوم بنقل قيمة المتغير في اليمين إلى المتغير في اليسار

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


int Var1;
int Var2;
Var1=10;
Var1=Var2;

فسيظهر لنا خطأ عند السطر الأخير لأن المعالج سيحاول نقل ما في المتغير Var2 إلى المتغير Var1

ولكن المتغير Var2 لا يحتوي على أي قيمة لذلك سيظهر لنا الخطأ

بعض أنواع المتغيرات وكيفية تعريفها:

رقم صحيح int
نص أو كلمة string
رقم حقيقي "رقم يقبل الكسور العشرية مثل 41.51" double
حرف char
تاريخ أو وقت DateTime
قيمة بوليانية bool

معنى القيمة البوليانية أي أن المتغير يحمل قيمة صح أو خطأ , للتوضيح:

int k;
string w;
double m;
char n;
bool p;

k=15;
w="هذا نص";
m=12.15;
n="م";
p=true;

لا حظ أن المتغير من نوع رقم لا يحتاج إلى علامتي إقتباس

بينما المتغير من نوع نص أو حرف يحتاج إلى علامتي إقتباس

المتغير من نوع bool يحمل أما قيمة true أو false

ماذا لو جربنا الكود التالي:


k="نص";

سيظهر لنا خطأ لأنا نحاول أن نحمل المتغير k قيمة من نوع نص

بينما المفروض أن يحمل قيمة من نوع رقم كما عرفناه

وأيضاً هذا الكود خاطئ لنفس السبب

k=w;

حيث أن w يحتوي على قيمة من نوع نص و k المفروض أن يحمل قيمة من نوع رقم

ماذا لو كان لدينا هذا الكود:

w="45";
k=w;

سيظهر لنا خطأ أيضاً عند السطر الثاني بالرغم من أن w يحمل رقم

لأن المترجم لا يعرف أن w يحمل رقم , فهو يعتبر كل ما هو بين علامتي اقتباس على أنه نص

وبالتالي فالمترجم لن يقبل أن يحمل k قيمة نصية لأن من المفروض أن يحمل رقم

للتغلب على هذه المشكلة يوجد في بيئة التطوير كائن للتحويل ما بين الأنواع

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

w="45";
k=Convert.ToInt32(w);

الكائن Convert قام بأخذ قيمة w وحولها إلى رقم ثم حملها للمتغير k

لاحظ أننا للوصول إلى أفعال أو صفات الكائن نكتب اسم الكائن ثم نقطة ثم فعل أو صفة الكائن

فالكائن Convert يحتوي على فعل ToInt32 لذلك كتبنا اسم الكائن ثم نقطه ثم فعل الكائن

ووضعنا بين القوسين المدخلات , ومن أفعال الكائن Convert:

ToInt32 للتحويل إلى رقم صحيح كما رأينا في المثال السابق
ToString للتحويل إلى نص
ToDouble للتحويل إلى عدد عشري
ToChar للتحويل إلى حرف
ToBoolean للتحويل إلى قيمة بوليانية

يتبع ... التطبيق.. في الرد التالي

حماة النهضة
02-27-2007, 03:33 PM
التطبيق:

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

غير النص الكتوب في الزر من "ترحيب" إلى "اظهار قيمة x" من خلال تعديل الصفة Text من جدول الصفات

انقر نقراً مزدوجا على الزر لتنتقل إلى شفرة الزر .. ثم قم بحذف سطر الأوامر التالي:
MessageBox.Show("مرحباً بكم إلى سي شارب");

في مكان اكود المحذوف أكتب الكود التالي:

int x;
x=50;
MessageBox.Show(x);

في السطر الأول عرفنا متغير اسمه x سيحمل قيمة من نوع رقم صحيح

في السطر الثاني حملنا المتغير x قيمة 50

في السطر الثالث كتبنا أمر اظهار الرسالة , لاحظ أننا وضعنا x بدل نص الرسالة

إلى أن المترجم سيقوم بإظهار رسالة ويكتب داخلها القيمة المحملة على x

قبل تجربة البرنامج , هل تعتقد أن هناك خطأ في الشفرة السابقة؟

نعم هناك خطأ فلو تجرب تشغيل البرنامج ثم الضغط على الزر ستظهر لك رسالة خطأ

وسبب الخطأ أن كائن MessageBox.Show يحتاج إلى مدخلات من نوع نص ليظهرها في الرسالة

وقد مررنا x على أنه المدخلات ولكنه من نوع رقم صحيح

ربما يتسائل البعض ما أدراني أن الكائن MessageBox.Show يحتاج إلى مدخلات من نوع نص وليس من نوع رقم

الأمر بسيط جداً , إذا كنت تريد ان تعرف نوع المدخلات التي يحتاجها الكائن

سيظهر لك ذلك في رسالة صغيرة بمجرد ما تفتح القوس الأول كما في الصورة:

http://www.freewebtown.com/gfsd/Image2-1.JPG

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

السهم يشير إلى الكلمة التاليه:
string text
الجزء الأول من الكلمة السابقة يعني نوع المدخل وهو string يعني نص

والجزء الثاني هو أسم المدخل text وهذا سنشرحه فيما بعد ,

ولكن ما يهمنا هو الجزء الأول لنعرف نوع المدخل الذي يحتاجه الكائن

ملاحظة:بعض الكائنات ومنها كائن MessageBox.Show يمكن أن تقبل مدخلا تمتعدده

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

الكائن MessageBox.Show يقبل 21 نوع من المدخلات

ومن الممكن أن تتجول بين أنواع المدخلات الممكنه للكائن بالضغك على زر الأسهم فوق وتحت

في لوحة المفاتيح عند ظهور صندوق معلومات المدخلات كما في الصورة:

http://www.freewebtown.com/gfsd/Image2-2.JPG

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


نعود إلى الكود السابق الذي أظهر لنا خطأ نتيجة تضارب انواع البيانات

لحل مشكلة التضارب نستخدم كائن التحول لتحول قيمة x إلى نص ثم تمريرها إلى الكائن
MessageBox.Show

لأنه كما قلنا لا يقبل إلا مدخلات من نوع نص و x من نوع رقم

الكائن الذي يحول من رقم إلى نص هو Convert.ToString

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

int x;
x=50;
MessageBox.Show(Convert.ToString(x));

جرب البرنامج الآن واضغط على الزر ستظهر لك رسالة مكتوب عليها 50

وهكذا تغلبنا على مشكلة تضارب البيانات

..

لتوسيع التطبيق سنستخدم كائن آخر من كائنات البيئة وهو مربع النص

اضغط على زر Design أسفل الشفرة لترجع إلى نافذة التصميم

http://www.freewebtown.com/gfsd/Image2-3.JPG

الآن قم بسحب كائن مربع النص وأفلته فوق النافذة كما سحبت الزر في الدرس الأول

http://www.freewebtown.com/gfsd/Image2-4.JPG

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

http://www.freewebtown.com/gfsd/Image2-5.JPG

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

إبحث عن الصفة (Name) ستجد مكتوباً أمامها textBox1 غيرها إلى t1

لاحظ أنا غيرنا إسم الكائن من textBox1 إلى t1 وذلك لسهولة التعامل معه في الشفره كما سنرى لاحقاً

الآن اضغط مزدوجاً على الزر لترجع إلى الشفرة

أمسح السطر الثاني من الكود السابق وأكتب بدل منه هذا الكود

x=t1.Text;

لاحظ أن الكائن t1 الذي هو مربع النص له صفة اسمها Text وهي تمثل النص المكتوب عليه

معنى الكود السابق أن المترجم سيقوم بأخذ ما هو مكتوب في مربع النص المسمى t1 ويحمله للمتغير x

أي أن الكود كاملأ سيصبح هكذا:
int x;
x=t1.Text();
MessageBox.Show(Convert.ToString(x));

ملاحظة:لمعرفة صفات وأفعال الكائن أكتب إسم الكائن ثم أكتب نقطة ,

ستظهر لك نافذة بجميع اعمال وصفات الكائن ففي المثال السابق بمجر ما تكتب t1 ثم تكب نقطة

سيظهر لك هذا الصندوق :

http://www.freewebtown.com/gfsd/Image2-6.JPG

وبمجرد ما تكتي حرف t من كلمة Text سينقل الإختيار في الصندوق إلى كلمة Text:

http://www.freewebtown.com/gfsd/Image2-7.JPG

وللإختصار اضغط على زر Tab لكي تكتب كلمة Text آلياً


لاحظ في الصورة السابقة أن نوع صفة Text هو string أي نص

وبالتالي لو حاولت تنفيذ البرنامج وضغط الزر سيظهر خطأ لأننا حاولنا أن نحمل المتغير x قيمة نصيه

بينما يجب أن نحملة رقم , يأتي دور كائن التحويل مرة أخرى ولكن هذه المرة من نص إلى رقم

فيصبح الكود الكامل والصحيح هكذا:
int x;
x=Convert.ToInt32(t1.Text);
MessageBox.Show(Convert.ToString(x));
في السطر الأول عرفنا متغير من نوع رقم

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

وفي السطر الثالث لم نغير شيء

الآم نفذ البرنامج , وقبل أن تضغط الزر أكتب أي رقم في مربع النص ثم اضغط الزر

ستظهر لك رسالة بالرقم الذي كتبته

تأكد انك ستكتب رقم وليس حرف وإلا ظهرت لك رسالة خطأ

..

لتوسيع التطبيق أضف متغيرين آخرين y,z وأضف مربع نص آخر وسمه t2

غير النص المكتوب على الزر وأكتب بدلاً منه "اظهار ناتج الجمع"

ليكون شكل النافذة هكذا:

http://www.freewebtown.com/gfsd/Image2-8.JPG

الآن اذهب إلى الشفرة وعدلها إلى التالي:

int x;
int y;
int z;
x=Convert.ToInt32(t1.Text);
y=Convert.ToInt32(t2.Text);
z=x+y;
MessageBox.Show(Convert.ToString(z));
عرفنا ثلاثة متغيرات من نوع رقم صحيح

في السطر الرابع حملنا x الرقم المكتوب في t1

وفي السطر الخامس حملنا y الرقم المكتوب في t2

وفي السطر السادس حملنا z مجموع x وy

وفي السطر السابع أظهرنا قيمة z في الراسلة , لاحظ أنا وضعنا z بدل x في السطر الأخير

الآن قم بتنفيذ البرنامج , وأكتب عدداً صحيحاً في كل مربع نص وأضغط الزر

ستظهر لك نافذة مجموع العددين :

http://www.freewebtown.com/gfsd/Image2-9.JPG

اغلق الرسالة وجرب أن تضع في أحد مربعات النص رقماً حقيقياً مثل 41.25 واضغط على الزر

ستظهر لك رسالة خطأ لأن المتغيرات xوyوz تحمل متغيرات من نوع رقم صحيح وأنت حاولت أن تحملها رقم حقيقي

اضغط على زر Continue في رسالة الخطأ ليتم إيقاف تنفيذ البرنامج:

http://www.freewebtown.com/gfsd/Image2-10.JPG

إذهب إلى الشفرة وحاول أن تجد الحل للقيام بجمع أعداد حقيقية, وذلك هو الواجب

تلميح:نعرف أن double تعني رقم حقيقي والكائن Convert.ToDouble يحول إلى رقم حقيقي

ما عليك إلا أن تضع double بدل من int

وتضعConvert.ToDouble بدل من Convert.ToInt32

لحظة , لم ينتهي الواجب بعد

أضف إلى البرنامج ثلاثة أزرار إضافية للقيام بباقي العمليات الرياضية

1-اظهار ناتج الطرح

2-اظهار ناتج الضرب

3-اظهار ناتج القسمة

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

http://www.freewebtown.com/gfsd/Image2-11.JPG

موفقين

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

Desert_Eagle


أي أسئلة أو استفسارات .. أنا حاضر :)
وأي أحد بده يعرض علي الواجب أشوفه .. حاضر بإذن الله ...

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


..][ حمــاة النهضــة ][..

azedine
02-27-2007, 05:29 PM
je sui la
bay azedine

rosana
02-27-2007, 09:04 PM
سلام للجميع
انا عجبني الموضوع الفكرة روعة
انا معاكم متابعكم و لي محتاج مساعدة انا بالخدمة عندي بعض المعلومات على #c

imadin
02-27-2007, 09:14 PM
جهد واضح يستحق أكثر من كلمة شكر ،أنا متابع للدورة

محمد-00-
02-27-2007, 09:17 PM
مشكووووووووور

frod85
02-28-2007, 12:06 AM
تسلم أخي الكريم و أن شاء الله أكون أحد المنضمين لهذه الدروس..... ربنا يوفقك

البردعى
03-02-2007, 02:52 AM
ياجماعه انا باعلن انضمامى رغم انى متاخر لكنى هازاكر ان شاء الله بس لىل استفسار الاول هو ايه الفرق بين c#2005 وc++ علشان بس ابقى فى الصوره

حماة النهضة
03-02-2007, 02:53 PM
je sui la
bay azedine
مرحبا بك يا أخي ..
يسعدنا هذا ...
:)


سلام للجميع
انا عجبني الموضوع الفكرة روعة
انا معاكم متابعكم و لي محتاج مساعدة انا بالخدمة عندي بعض المعلومات على #c
وعليكم السلام ورحمة الله وبركاته
مرحبا أختي ..
وشكرا كتير على الرد والمساعدة ...
:)


جهد واضح يستحق أكثر من كلمة شكر ،أنا متابع للدورة
مرحبا بك يا أخي ..
ردودك تسعدنا لأنك تتابع معنا أول بأول ...
:)


..][ حمــاة النهضــة ][..

حماة النهضة
03-02-2007, 03:05 PM
مشكووووووووور
العفو ^^


تسلم أخي الكريم و أن شاء الله أكون أحد المنضمين لهذه الدروس..... ربنا يوفقك
مرحبا أخي ..
يارب تستفيد بجد من هذه الدروس ^^ ..
:)


ياجماعه انا باعلن انضمامى رغم انى متاخر لكنى هازاكر ان شاء الله
مرحبا أخي ..
ولا يهمك التأخير .. المهم تتابع معنا .. وربنا يوفقك ...
:)

بس لىل استفسار الاول هو ايه الفرق بين c#2005 وc++ علشان بس ابقى فى الصوره
هي نسخة مطورة من C++ حيث كان من المفترض تسميتها C++++
مطورة لا يعني أنها أفضل من C++ في كل النواحي , تبقى كل لغة لها مميزات وعيوب
وتتميز C# بأنها تجمع بين قوة C++ وسهولة Visual Basic
على أن C++ تبقى اللغة الأفضل لتطبيقات الهاردوير وأنظمة التشغيل


..][ حمــاة النهضــة ][..

حماة النهضة
03-02-2007, 03:47 PM
هذا الرد مخصص لكل المتابعين معنا بالدروس ... :)

بالنسبة لموعد الدروس هل بتجدوا فيها مشكلة ؟؟
يعني ممكن يكون في الاسبوع درسين مثلا بدل من درس واحد .. أو ثلاث دروس حتى ..

وبالنسبة للتطبيق فيه مشكلة .. أو بتحبوا طريقة معينة بالتطبيق ؟؟

منتظر ردودكم لنستمر بشكل أفضل ...
:)


..][ حمــاة النهضــة ][..

@...Khalefa
03-02-2007, 05:07 PM
الله الله
مجهود جبار يستحق التقدير وربنا يعينك علية وعلينا
وعلى فكرة شرحك فوق الممتاز
ومـــــــــــــشــــــــــــــــــــــــــكور علية

imadin
03-03-2007, 01:08 PM
أخي حماة النهضة فيما يخص شرحك هو ممتاز لاجدال فيه مع التطبيق مع أني تخلفت على الدرس الثاني وان شاء الله أتدارك،لو بإمكانك تجعل كل أسبوع درسين خاصة الدروس الأولى
التي قد تكون بسيطة واحنا معك للنهاية ان شاء الله وشكرا

سرمد الزهراء
03-05-2007, 02:36 PM
بسم الله الرحمن الرحيم
اللهم صل على محمد وآل محمد الطيبين الطاهرين
السلام عليكم أخي حماة النهضة
أنا من محبين لغة الفيجوال بيسك وانا من مدة ابحث عن هكذا دروس على النسخة الجديدة 2005 وانشاء الله أوفق في متابعة دروسكم من حين لحين وأوفق في تطبيقها ....
ولكن لدي استفسار عن البرنامجين الذين يجب علينا تنزيلهما برنامج ملفات البرمجة وبرنامج بيئة التطوير ...ماذا يعنوا ...وهل هو ضروري تنزيلهما ...بالرغم من ان البرنامج الفيجوال بيسك موجود عندي على الجهاز ... ونحن نستطيع كتابة البرنامج فيه والله أعلم
مشكور أخي على الدرسان الأوليان ...
أما بالنسبة للدروس فنحن نستطيع تعريف المتغيرات هكذا dim x,y,z as integer
ثم نخصص ل x مكان لكي نضع القيمة فيه ونكتب مثلا x= 10
y=15
z=x+y
textbox1.text=z
صح هكذا ..أخي الكريم
في الأخير أتمنى منكم أن تعطوني كود ربط الفلاش بالفيجوال ...مع اني حاولت وأضفت أداة
shokwavflash على ماأعتقد اسمها هكذا ثم حاولت وضعها على الفورم لكن كان يعطيني رساله خطأ فيها failed to import the activex control (please ensure it is properly registered)
انشاء اللكتبت الرساله صح ...وهي الظاهر تعني اضافة اداة أخرى يمكن آكتف كنترول لكن ماأعرف كيف ....
مشكور أخي مرة ثانية والسلام عليكم

حماة النهضة
03-06-2007, 10:06 AM
الله الله
مجهود جبار يستحق التقدير وربنا يعينك علية وعلينا
وعلى فكرة شرحك فوق الممتاز
ومـــــــــــــشــــــــــــــــــــــــــكور علية
مرحبا أخي ..
تسلم أخي هذه شهادة نعتز بها .. :o


أخي حماة النهضة فيما يخص شرحك هو ممتاز لاجدال فيه مع التطبيق مع أني تخلفت على الدرس الثاني وان شاء الله أتدارك،لو بإمكانك تجعل كل أسبوع درسين خاصة الدروس الأولى
التي قد تكون بسيطة واحنا معك للنهاية ان شاء الله وشكرا
مرحبا أخي ..
تسلم .. يعني الحمد لله ما بتواجه مشكلة بالتطبيق ؟
إن شاء الله تتابع وتكون لحقت الدرس التاني ..
وخلاص إن شاء الله بنزل درس اليوم ويوم السبت كمان ..
ربنا يحميك ويحفظك .. :)


بسم الله الرحمن الرحيم
اللهم صل على محمد وآل محمد الطيبين الطاهرين
السلام عليكم أخي حماة النهضة

وعليكم السلام ورحمة الله وبركاته
مرحبا أختي ..
يسعدنا أن تتابعي الدروس معنا ..
ولكن هذه الدروس في السي شارب ..
وليست في الفيجوال :)

ربنا يحميكِ ويوفقك للخير ..



يتبع الدرس الثالث >>


..][ حمــاة النهضــة ][..

حماة النهضة
03-06-2007, 10:14 AM
الدرس الثالث

الجمل الشرطية:

معظم عمل الحاسوب يقوم على المقارنة بين قيمتين لإتخاذ أي قرار

بكلمة أدق أي عمل يقوم به الحاسوب هو عبارة عن عدد من المقارنات

بين قيم مخزنة في مسجلات المعالج ,

مسجلات المعالج هي عبارة عن أجزاء من المعالج يمكن أن تخزن قيم صغيرة

وكل مسجل يستطيع أن يخزن 16 بت , وهذه القيم المخزنة يقوم المعالج بمقارنتها

مع قيم اخرى في مسجلات أخرى من نفس العالج لإنتاج تيار كهربائي يمثل نتيجة المقارنة

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

ولكن هذا لا يهمنا , وما يهمنا هو المقارنه على مستوى لغة البرمجة

والمقارنه تعتبر أحد أهم اعمدة اي لغة من اللغات , وهناك عدت صيغ للمقارنة

1- إذا كان (الشرط) فـ
{التعليمات التي تنفذ في حالة توفر الشرط}

if (x>y)
{
MessageBox.Show("إكس أكبر من واي");
}

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

لاحظ أننا لم نضع الفاصة المنقوطة بعد الشرط لأن المعالج لم يكمل جملة الشرط ويجب أن ندعه يكمل

الجملة إلى نهاية الحاصرة الثانية

2-إذا كان (الشرط) فـ
{التعليمات التي تنفذ في حالة توفر الشرط}
وإلا
{التعليمات التي تنفذ في حالة عدم توفر الشرط}

if (x>y)
{
MessageBox.Show("إكس أكبر من واي");
}
else
{
MessageBox.Show("إكس ليس أكبر من واي");
}

في الكود السابق سيقوم المعالج بإظهار رسالة "إكس أكبر من واي" إذا كان x أكبر من y

أما إذا لم يكن x اكبر من y فستظهر رسالة "إكس ليس أكبر من واي"

لاحظ أننا لم نضع فاصلة منقوطة بعد كلمة else لأن التعليمة لم تكتمل بعد

3-إذا كان(الشرط1) فـ
{التعليمات التي تنفذ عن توفر الشرط1}
وإلا إذا كان (الشرط 2) فـ
{التعليمات التي تنفذ في حالة عدم توفر الشرط1 و توفر الشرط 2}
وإلا إذا كان ...

if (x>5)
{
MessageBox.Show("اكس أكبر من خمسة");
}
else if(x<4)
{
MessageBox.Show("اكس ليس أكبر من خمسة , وأكس أصغر من أربعة");
}
..

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

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

وهكذا حتي ينتهي من جميع الشروط .. لاحظ أنه من الممكن أن يكون في الجملة أكثر من شرطين

هناك عدد من معاملات المقارنه بالإضافة إلى < و >:

< أكبر من

مثل ما رأينا سابقاً

> أصغر من

مثل ما رأينا سابقاً

== يساوي


if (x == y)
{
MessageBox.Show("اكس يساوي واي");
}


=! لا يساوي


if (x != y)
{
MessageBox.Show("اكس لا يساوي واي");
}


أحياناً نحتاج إلى شرط مزدوج , أي أننا نحتاج إلى شرط مكون من جزئين

مثلاً إذا كان x أكبر من y و x أصغر من z

if (x>y & x<z)
{
MessageBox.Show("اكس أكبر من واي و أصغر من زد");
}

لاحظ انا وضعنا الشرطين بينها علامة &

أما إذا أردنا شرط مزدوج من نوع آخر :

مثلاً إذا كان x أكبر من y أو x يساوي 10

if (x>y | x==10)
{
MessageBox.Show("اكس أكبر من واي أو يساوي 10");
}

لاحظ انا وضعنا الشرطين بينها علامة |

إذا & تعني و

و | تعني أو

ملاحظة ساذجة: علامة | يمكن طباعتها بالضغط على Shift مع زر \ والذي عادة ما يأتي بجانب زر المسح BackSpace وفوق زر Enter

الدوارات:

هناك أنواع كثيرة من الدوارات لكننا سنتعرف حالياً على أهم نوع منها

والدوارات هي تعليمات فائدتها تكرار تعليمات محدد لعدد محدد من المرات

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

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

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

إذن هناك أربعة أشياء مهمة لجملة الدوارة for

1- متغير من نوع عدد يستخدم كعداد مع تزويدة برقم إبتدائي يبدأ منه

2- شرط إستمرار الدوارة في العمل

3- تعريف نوع العداد هل هو تصاعدي أم تنازلي

4- التعليمات التي تنفذ

for (int i = 0;i < 10;i++)
{
MessageBox.Show("من الدوارة");
}

في الكود السابق كلمة for تستخدم لتعريف الدوارة

بعد فتح القوس وضعنا تعريف للعداد int i=0 ووضعنا له قيمة 0 أي أن العداد سيبدأ من 0

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

وضعنا فاصلة منقوطة ووضعنا بعدها نوع العداد وهو تصاعدي ++i أما إذا كان تنازلي نضع --i

ثم أغلقنا القوس وفتحنا حاصرتين بينهما التعليمات التي سينفذها المعالج

معنى الدوارة السابقة أن المعالج سيظهر الرسالة للمرة الأولى ثم يزيد i ويفحص شرط الإستمرار

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

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

ملاحظة : يمكن إستخدام متغير العداد داخل التعليمات

for (int i = 0;i < 10;i++)
{
MessageBox.Show(Convert.ToString(i));
}

في الكود السابق سيظهر المعالج الرسالة للمرة الأولى وفيها قيمة العداد الأولية وهي 0

وفي المرة الثانية سيظهر الرسالة وفيها قيمة العداد بعد أن زاد برقم أي 1

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

وهو أن يكوت المتغير أصغر من 10 ولكن المتغير هذه المرة ليس أصغر من عشرة لذلك سيتوقف

المعالج عن تنفيذ التعليمات ويخرج من جملة for

يتبع التطبيق

حماة النهضة
03-06-2007, 10:33 AM
التطبيق:

أفتح تطبيق الدرس السابق :

وقم بحذف صنوقي النص بواسطة زر Delete

غير النص المكتوب في الزر إلى "تشغيل الدوارة"

من صندوق الأدوات قم بسحب أداة القائمة :

http://www.freewebtown.com/gfsd/Image3-1.JPG

من خلال الخاصية (Name) قم بتغيير إسم القائمة من ListBox1 إلى l1

ليسهل التعامل معها من الشفرة

ملاحظة: عند عمل تطبيق باللغة العربية يجب تحويل الأدوات في النافذه للترتيب العربي

أي من اليمين إلى اليسار ويتم دلك عن طريق تحديد النافذة وتغيير صفتين من صفاتها

وهي صفات RightToLeft و صفة RightToLeftLayout من جدول الصفات

حيث تكون الخاصية الأولى Yes والخاصية الثانية True :

http://www.freewebtown.com/gfsd/Image3-2.JPG

عندها ستلاحظ ان إتجاه الأدوات تغير ويصبح شكل النافذة هكذا :

http://www.freewebtown.com/gfsd/Image3-3.JPG

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

وأكتب بدلاً عنه هذا الكود:

for (int i=0;i<10;i++)
{
l1.Items.Add(" من الدوارة ");
}

قمنا بعمل دوارة من الصفر إلى 10 لإضافة كلمة "من الدوارة" إلى القائمة

الكائن l1.Items.Add يقوم بإضافة ما داخل القوس للقائمة l1

وبالتالي فالكود السابق سيقوم بكتابه كلمة "من الدوارة" عشر مرات على القائمة

جرب تشغيل البرنامج وإضغط على الزر , يجب أن ترى شيئاً كهذا:

http://www.freewebtown.com/gfsd/Image3-4.JPG

ملاحظة : إذا أردنا أن نجمع كلمتين أو نصين في نص واحد فيمكننا إستخدام إشارة +

مثلاً إذا أردنا أن نظر رسالة تقول مرحباً بكم فيمكن عمل ذلك هكذا

MessageBox.Show("مرحباً" + "بكم");

هناك كلمتين ربطنا بينهما بعلامة +

والآن لنعدل التطبيق قليلاً لكي نجرب إستخدام العداد :

قم يتعديل كود الدوارة وأضف إلى كلمة "من الدوارة" أضف العداد هكذا:


for (int i=0;i<10;i++)
{
l1.Items.Add(" من الدوارة " + Convert.ToString(i));
}

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

عند تشغيل البرنامج سترى شيئاً كهذا :

http://www.freewebtown.com/gfsd/Image3-5.JPG

أعتقد أن الصورة لا تحتاج للشرح ...

الآن لماذا لا نطبق جملة شرطية داخل الدوارة ..

سنكتب شفرة لطباعة كلمة "من الدوارة"

و إذا كان العداد أكبر من خمسة سنضيف كلمة "أكبر من خمسة" :

قم بتغيير كود الدوارة إلى هذا الكود:

for (int i=0;i<10;i++)
{
if (i>5)
{
l1.Items.Add(" من الدوارة " + Convert.ToString(i) + " أكبر من خمسة ");
}
else
{
l1.Items.Add(" من الدوارة " + Convert.ToString(i) );
}
}

الكود باللون الأحمر سينفذ عشر مرات .

والكود بالخط المائل سينفذ إذا كان العداد i أكبر من خمسة.

والكود الذي تحته خط سينفذ إذا كان العداد i أصغر من أو يساوي خمسة .

عند تنفيذ البرنمج ستكون النافذه هكذا :

http://www.freewebtown.com/gfsd/Image3-6.JPG

الواجب:

الواجب صعب شويه هاي المرة ...

إستخدم الدوارة والجمل الشرطية لتنفيذ عملية إضافة نصوص للقائمة 12 مرة

بحيث يكتب في آخر كل نص ما إذا كان العداد أكبر من 6 أو يساوي 6 أو أصغر من 6

لتكون النتيجة هكذا:

http://www.freewebtown.com/gfsd/Image3-7.JPG

تلميح : ستستخدم الجمل الشرطية من النوع الثالث بثلاث شروط

أي أن جملة الشرط ستكون شبيهة بهذه:

if (...)
{
...
}
else if(...)
{
...
}
else if(...)
{
...
}


أكمل الفراغات ^^:) طبعاً كل هذا داخل الدوارة

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


بالمناسبة .. فين الواجب ؟؟
ضروري ترسلوا الواجب ...

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


..][ حمــاة النهضــة ][..

ehabkazem
03-06-2007, 07:37 PM
الله يعطيك العافية أخوي
أتمنى اكون أيضا من المشتركين

sami_f12
03-06-2007, 11:15 PM
السلام عليكم
merci mon frére pour tout les aide

حماة النهضة
03-07-2007, 06:46 PM
بسم الله الرحمن الرحيم
اللهم صل على محمد وآل محمد الطيبين الطاهرين
السلام عليكم أخي حماة النهضة
أنا من محبين لغة الفيجوال بيسك وانا من مدة ابحث عن هكذا دروس على النسخة الجديدة 2005 وانشاء الله أوفق في متابعة دروسكم من حين لحين وأوفق في تطبيقها ....
ولكن لدي استفسار عن البرنامجين الذين يجب علينا تنزيلهما برنامج ملفات البرمجة وبرنامج بيئة التطوير ...ماذا يعنوا ...وهل هو ضروري تنزيلهما ...بالرغم من ان البرنامج الفيجوال بيسك موجود عندي على الجهاز ... ونحن نستطيع كتابة البرنامج فيه والله أعلم
مشكور أخي على الدرسان الأوليان ...
أما بالنسبة للدروس فنحن نستطيع تعريف المتغيرات هكذا dim x,y,z as integer
ثم نخصص ل x مكان لكي نضع القيمة فيه ونكتب مثلا x= 10
y=15
z=x+y
textbox1.text=z
صح هكذا ..أخي الكريم
في الأخير أتمنى منكم أن تعطوني كود ربط الفلاش بالفيجوال ...مع اني حاولت وأضفت أداة
shokwavflash على ماأعتقد اسمها هكذا ثم حاولت وضعها على الفورم لكن كان يعطيني رساله خطأ فيها failed to import the activex control (please ensure it is properly registered)
انشاء اللكتبت الرساله صح ...وهي الظاهر تعني اضافة اداة أخرى يمكن آكتف كنترول لكن ماأعرف كيف ....
مشكور أخي مرة ثانية والسلام عليكم
وعليكم السلام ورحمة الله وبركاته

أختي الحين بقدر أرد عليكِ قبلها انشغلنا سامحينا .. :)

البرنامجين مش ضروري تنزليهم ما دام معك البيئة شغاله

أما خطأ الأكتيف إكس فـ..

الـ VB الإصدارات 6 وما قبلة المفروض تشتغل الأكتيف اكس بكل سهولة لأنها Com

أما إصدارت 2002 و 2003 و2005 , فممكن تظهر بعض المشاكل فيها لأن هذه اللغات بتشتغل على تقنية جديدة .NET

والادوات المضافة المفروض تكون Managed يعني تكون كمان بتقنية .NET مش Com

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

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

أما إذا كنت تستخدم VB.NET فعلى الأغلب السبب أحد هذين:

1- سجل الأداة في الريجستري تبع النظام قبل إضافتها للمشروع .

2- إذا ما أشتغلت معك بالطريقة الأولى :

بعد إضافة الأداة إلى الـ Tool Box وقبل ما تضيفها للفورم

روحي إلى مجلد المشروع وإحذفي المجلدين obj و bin

وبعدين أرجعي للمشروع وضيفي الأداه للفورم .

أن شاء الله تشتغل معك.

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


..][ حمــاة النهضــة ][..

حماة النهضة
03-07-2007, 07:11 PM
الله يعطيك العافية أخوي
أتمنى اكون أيضا من المشتركين
مرحبا أخي ..
الله يوفقك حاول تشوف الدروس السابقة وتتابع معنا ^^
بيسعدنا انضمامك لنا أخي ...
:)


السلام عليكم
merci mon frére pour tout les aide
وعليكم السلام ورحمة الله وبركاته
مرحبا أخي ..
العفو ^^
بيسعدنا وجودك معنا بالتأكيد
:)


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


..][ حمــاة النهضــة ][..

حماة النهضة
03-07-2007, 07:24 PM
الله يعطيك العافية أخوي
أتمنى اكون أيضا من المشتركين
مرحبا أخي ..
الله يوفقك حاول تشوف الدروس السابقة وتتابع معنا ^^
بيسعدنا انضمامك لنا أخي ...
:)


السلام عليكم
merci mon frére pour tout les aide
وعليكم السلام ورحمة الله وبركاته
مرحبا أخي ..
العفو ^^
بيسعدنا وجودك معنا بالتأكيد
:)


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


..][ حمــاة النهضــة ][..

سرمد الزهراء
03-09-2007, 08:37 AM
مشكور أخي على الشرح ....وأيضا على ردك علي ومساعدتي وانشاء الله أشوف الطريقة وبحاول وانشاء الله تزبط معاي
أنا طبقت الدرس الأول والثاني ...
لكن عندي استفسار بسيط بالنسبة للكود
x=Convert.ToInt32
ماذا يعني الرقم 32 هنا ...وقد لاحظت ان ليس كل الأنواع بجانبها أرقام فقط بعضها ..:smailes45:
مشكور أخي كثيرا كثيرا
السلام عليكم .

infocom
03-09-2007, 10:19 PM
السلام عليكم ورحمة الله وبركاته
اشكرك اخي العزيز على هذا الدرس المفيد وان شاء الله سوف احضر كل الدروس

bdh_m
03-09-2007, 11:07 PM
مجهود يستحق كل الثناء و الشكر و التقدير

حماة النهضة
03-10-2007, 03:07 PM
السلام عليكم ورحمة الله وبركاته
اشكرك اخي العزيز على هذا الدرس المفيد وان شاء الله سوف احضر كل الدروس
وعليكم السلام ورحمة الله وبركاته
مرحبا أخي ..
حسنا يسعدنا انضمامك بالتأكيد ..
:)


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


يتبع الدرس الرابع بعد قليل ^^


..][ حمــاة النهضــة ][..

حماة النهضة
03-10-2007, 03:16 PM
الدرس الرابع

الإجراءات Procedures

الإجراء هو مجموعة أوامر ينفذها المعالج مكتوبة بين حاصرتين { }

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

والإجراء له ثلاثة أشياء مهمة :

1- تعريف الإسمName Decleration

2-المدخلاتParameters

3-الشفرة مكتوبة بين حاصرتين Code

فمثلاً عند الدخول إلى شفرة زر رسالة الترحيب في الدرس الأول

سنرى هذا الكود:

void Button1Click(object sender, System.EventArgs e)
{
MessageBox.Show("مرحباً بكم في السي شارب");
}

الكود السابق يمثل إجراء ينفذه المعالج عند الضغط على الزر

نلاحظ انه يحتوي على الثلاث الأشياء المهمة للإجراء

وهي تعريف الإسم:
void Button1Click
و المدخلات:
(object sender, System.EventArgs e)
والشفرة مكتوبة بين حاصرتين:
{
MessageBox.Show("مرحباً بكم في السي شارب");
}
في التعريف void تعني إجراء أي أننا سنعرف متغير من نوع إجراء

كما عرفنا متغير من نوع رقم في الدرس السابق:
int x;
بنفس الطريقة عند تعريف الإجراء:
void x;
لكن هذا التعريف لا يكفي فهو لا يحتوي على الثلاث الأشياء المهمة

مثلاً لو أردنا إجراء يظهر رسالة مكتوب عليها مثلاً "من داخل الإجراء"

فسكون التعريف كالتالي:
void sm()
{
MessageBox.Show("من داخل الإجراء");
}

عرفنا متغير من نوع إجراء اسمه sm إختصار لـ Show Message ..يمكنك تغيير إسم الإجراء كما
تشاء

يوجد لدينا الإسم:
void sm
والمدخلات:
()
لا يوجد لدينا مدخلات في هذا الإجراء ولكن يجب عمل الأقواس الفارغة

وسنعرف فيما بعد كيف نتعامل مع المدخلات

ولدينا الشفرة:
{
MessageBox.Show("من داخل الإجراء");
}
وبالتالي فالتعريف كامل ويمثل إجراء لإظهار رسالة ,

والآن إذا أردنا في أي مكان من البرنامج تنفيذ الإجراء فما علينا سوى كتابة اسمه هكذا:
sm();
التعليمة السابقة تجعل المعالج يبحث عن الإجراء sm وينفذ الأوامر بداخلة.

ربما يقول البعض ما الداعي من عمل إجراء وكتابة الكود داخلة ثم إستدعاءه

لماذا لا نكتب الكود مباشرة كما فعلنا في الدرس الأول؟؟؟

والجواب ببساطه ماذا لو أردت إظهار الرسالة خمس مرات؟؟

بالطريقة القديمة ستكتب هكذا:

void Button1Click(object sender, System.EventArgs e)
{
MessageBox.Show("من داخل الإجراء");
MessageBox.Show("من داخل الإجراء");
MessageBox.Show("من داخل الإجراء");
MessageBox.Show("من داخل الإجراء");
MessageBox.Show("من داخل الإجراء");
}

أما بطريقة الإجراءات فستكتب هكذا:

void Button1Click(object sender, System.EventArgs e)
{
sm();
sm();
sm();
sm();
sm();
}

void sm()
{
MessageBox.Show("من داخل الإجراء");
}

الكود بالأزرق هو كود الضغط على الزر و الكود بالأحمر هو كود إجراء إظهار الرسالة

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

ربما يقول البعض لا يوجد فرق كبير بين الطريقتين لكن ماذا إذا كانت الرسالة كبيرة جداً

أو ماذا إذا كانت الأوامر أكثر من مجرد إظهار رسالة

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

وإيضا المدخلات تجعل الإجراءات أكثر فائدة :

مثلاً لو أردنا أن نطور الإجراء السابق ليظهر رسالة مختلفة في كل مرة نستدعيه

سنجعل الرساله المراد إظهارها علي أنها مدخل متغير ويكون تعريف الإجراء كالتالي:
void sm(string msg)
{
MessageBox.Show(msg);
}

المدخلات هي متغيرات كما رأينا حيث عرفنا متغير مدخل اسمه msg من نوع نص string

وفي تعليمة إظهار الرسالة جعلنا الكائن MessageBox.Show يظهر ما في المتغير المدخل msg

الآن عند إستدعاء الإجراء يجب تمرير قيمة من نوع نص مكان المتغير المدخل هكذا:

sm("من داخل الإجراء");
sm("رسالة مختلفة من نفس الإجراء");

نلاحظ أن الإجراء آظهر رسائل مختلفة بنفس الشفرة

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

والأمر الثاني سيظهر رسالة مكتوب عليها "رسالة مختلفة من نفس الإجراء"

ملاحظة: إذا كان لدينا أكثر من مدخل فنفصل بينها بالفاصلة مثلاً:
void sm(int x,string msg)

وعند الإستدعاء :

sm(14,"رسالة");



الدوال Functions

الدول هي إجراءات لكن لها خاصية أنها ترجع قيم

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

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

ولها خمس أشياء مهمة:

1- تعريف الإسم Name Decleration

2-نوع القمية التي ستحملها الدالة Result Data Type

3-المدخلات Parameters

4-الشفرة مكتوبة بين حاصرتين Code

5-تعليمة تحميل الدالة للقيمة الناتجة Return phrase

مثلاً إذا إردنا عمل دالة تقوم بأخذ رقمين وترجع لنا مجموعهما فيكون التعريف كما يأتي:
int sum(int x,int y)
{
int z;
z=x+y;
return z;
}
في السطر الأول عرفنا دالة إسمها sum ترجع متغير من نوع رقم int

ولينا مدخلين من نوع رقم x و y

وبين الحاصرتين لدينا التعليمات التي تقوم بجمع المتغيرين

وفي التعليمة الأخيرة return z تعني تحميل الدلة القيمة الموجود في z وهي مجموع xوy

وعند الإستدعاء بنفس الطريقة في الإجراءات لكن الدالة تكون محملة بقيمة :
sum(4,5);
بدون الدالة ستكود شفرة جمع رقمين هكذا:

int z;
z=4+5;
MessageBox.Show(Convert.ToString(z));

أما بإستخدام الدالة فتكون الشفرة هكذا:
int z;
z=sum(4,5);
MessageBox.Show(Convert.ToString(z));
لاحظ أنا استدعينا الدالة وحملنا ما داخلها للمتغير z

في المثال السابق تعرفنا كيف نستخدم الدالة , رغم اننا لم نستفد منها كثيراً في المثال السابق

ولكن كان الغرض منه توضيح إستخدام الدوال .

عزل - كبسلة المتغيرات Variables Encabsulation

مارأيك بالكود التالي:

void Button1Click(object sender, System.EventArgs e)
{
int x;
x=10;
AddFive();
}

void AddFive()
{
int y;
y=5+x;
MessageBox.Show(Convert.ToString(y));
}
الكود بالأزرق هو إجراء الضغط على الزر , وبالأحمر إجراء إظهار قيمة x مضاف إليها 5

لو قمت بتنفيذ الكود السابق , ما الذي ينتج ,,, ستقول ستظهر رسالة مكتوب عليها 15

سأقول لا للبعد والنسيان ^^ لا مش صح , بينتج خطأ جسيم !!

السبب أن المتغير x معرف داخل الإجراء باللون الأزرق

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

فإن المعالج لن يتعرف على هذا المتغير !! .. ولكن ماذا لو أردنا أن نستخدم متغير في أكثر من إجراء؟؟

الجواب:

المتغيرات Variables تنقسم إلى نوعين رئيسيين :

1-متغيرات محلية Local وهي التي تعرف وتستخدم داخل الإجراء فقط

2-متغيرات دولية "ما لقيت لها مصطلح عربي" Global وهي التي تعرف خارج الإجراء وتستخدم من قبل إجراءات كثيرة

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

ِa- متغيرات خاصة private وهي تستخدم من قبل إجراءات ودوال النافذة الواحدة فقط ولا تراها النوافذ الأخرى

private int x;

b-متغيرات عامة public وهي تستخدم من قبل إجراءات ودوال النافذة والنوافذ الأخرى

public int x;

إذن إذا أردنا أن نستخدم متغير في عدة إجراءات فإننا نعرفة خارج الإجراء

والأفضل يكون تعريف المتغيرات الدولية في بداية كود النافذة فوق دالة Main :


//هنا تعريف المتغيرات الدولية
[STAThread]
public static void Main(string[] args)
.
.

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


private int x;
.
.
void Button1Click(object sender, System.EventArgs e)
{
x=10;
AddFive();
}

void AddFive()
{
int y;
y=5+x;
MessageBox.Show(Convert.ToString(y));
}
طبعاً بفرض أن احنا حطينا تعريف المتغير x فوق دالة Main

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

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

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

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

فيكفي أن نكتب*/ في بداية الملاحظة و/* في نهاية الملاحظة :

int x;
/* هذا السطر لن يقرأه المترجم
وهذا السطر ايضا
وهذا أيضاً*/
MessageBox.......




يتبع ..

حماة النهضة
03-10-2007, 03:24 PM
ملحق 1 : تعقب الأخطاء Appendix 1 : Error Handling

كثيراً ما تحدث أخطاء في البرامج نتيجة تعامل المستخدم مع البرنامج ,

وبدون تعقب للأخطاء سيغلق البرنامج بمجرد أي خطأ , لذلك يجب على المبرمج

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

مثلاً في تطبيق الآله الحاسبة في الدرس الثاني ماذا لو أدخل المستخدم حرف بدل من رقم

بالتأكيد كائن التحويل Convert.ToInt32 سيطلق خطأ لأنه لت يستطيع تحويل حرف إلى رقم

الكود كان هكذا :
int x;
int y;
int z;
x=Convert.ToInt32(t1.Text);
y=Convert.ToInt32(t2.Text);
z=x+y;
MessageBox.Show(Convert.ToString(z));
وعند إدخال حرف إلى مربع النص t1 أو t2 فستظهر رسالة خطأ ويتوقف البرنامج

لتعقب الأخطاء نستخدم جملة try و catch حيث نكتب الكود الذي يمكن أن يسبب خطأ

ضمن جملة try ونكتب الكود الذي ينفذ في حالة حدوث حطأ ضمن جملة catch

ويصبح الكود السابق هكذا:
int x;
int y;
int z;
try
{
x=Convert.ToInt32(t1.Text);
y=Convert.ToInt32(t2.Text);
}
catch
{
MessageBox.Show("تأكد من إدخال أرقام فقط");
}
z=x+y;
MessageBox.Show(Convert.ToString(z));
الكود باللون الأزرق هو مكان إحتمال وجود الخطأ لأنه المكان الذي يتم تحويل المدخلات إلى رقم

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

أما إذا لم يحدث أي خطأ , فالمعالج لن ينفذ الكود بالأحمر ..

ملحق 2 :إنهاء البرنامج Appendix 2 : Program Termination

لإنهاء البرنامج نحتاج إلى كائن يتعامل مع بيئة الدوت نت وهذه هي التعليمة :
System.Environment.Exit(0);
الكائن Environment يمثل بيئة الدوت نت الذي يعمل عليها البرنامج

والتعليمة Exit تجعل المعالج ينهي البرنامج ويفرغ الذاكرة Release Memory References

والمدخل 0 يعني إنهاء البرنامج تماماً و سنعرف فيما بعد مدخلات أخرى لهذه التعليمة

ملحق 3 : التعامل مع ملفات المشروع Appendix 3 :-Dealing with project files

في لغات البرمجة المشروع ليس ملف وحيد فقط ,

انما مجموعة من الملفات المترابطة مع بعضها بواسطة ملف المشروع

وعند فتح المشروع يجب فتح الملف الأساسي للمشروع وسيقوم هو آلياً

بتحميل جميع ملفات المشروع لبيئة التطوير :

http://www.freewebtown.com/gfsd/Image4-1.JPG

كما في الصورة فالملف الأساسي للمشروع هو بامتداد csproj

وإذا كان المشروع متعدد البرامج فالملف الأساسي هو بإمتداد sln

أما إذا كان المشروع برنامج واحد كما في مشروعنا فيمكن فتح أي منهما

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

ثم فتح المشروع بواسطة ملف المشروع الأساسي

يتبع التطبيق..

حماة النهضة
03-10-2007, 05:01 PM
التطبيق

ربما تسائل الكثير عن وظيفة الملفات الكثيرة التي تنتهي بإمتداد dll

حان الوقت لنعرف ذلك ^^ , dll هي إختصار لـ Dynamic Link Library

هذه الملفات كتبت بلغة برمجة و تحتوي على دوال وإجرائات وكائنات

و تستخدم في برامج أخرى, مثلاً دالة إظهار رسالة كما إستخدمناها في الدروس السابقة

موجودة في ملف اسمة System.dll ينزل مع لغة البرمجة , وبدون هذا الملف

لن نستطيع إظهار الرسالة , حيث أن شفرة إظهار الرسالة ورسم صندوق الرسالة

ورسم زر موافق ورسم شريط العنوان كلها هذه الشفرة مكتوبة مسبقاً وموجود في الملف System.dll

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

وهناك دوال كثيرة أخري تتعلق بقواعد البيانات موجوده في الملف System.Data.dll

وهناك دوال الرسم موجوده في System.Drawing.dll ....

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

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

حتى يتعرف علية المعالج ويستطيع إستدعاء الدوال داخلة .

ربما تسأل كيف إستخدمنا دالة إظهار الراسالة في الدروس السابقة ولم نظيف ملف System.dll

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

ولتعرف إن هذا الملف مضاف في المشروع :

http://www.freewebtown.com/gfsd/Image4-2.JPG

أفتح نافذة ملفات المشروع كما في رقم 1 ثم إفتح الملحقات References رقم 2

سترى مجموعة من الملفات مضافة للمشروع ومنها ملف System رقم 3

وفي بداية كود النافذة يجب إستدعاء الملف بإستخدام تعليمة using حتى يتم تحميل

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

أحياناً ملف dll يحتوي على كائنات داخلة وداخل كل كائن دوال مختلفة

في هذه الحالة لن نستطيع إستدعاء الدالة كما فعلنا في دالة إظهار الرسالة

لأن المعالج لا يعرف مكان الدالة في الملف فهو يفحص الدوال الموجوده في الملف

ولكنه لا يفحص الكائنات , لذلك لا يجد الدوال المخزنة داخل كائنات

ويجب علينا أن نحدد عنوان الدالة داخل الملف ,

ويتم ذلك بكتابة إسم الكائن متبوعاً بنقطة ثم إسم الكائن الداخلي ... زهكذا حتى نصل إللى مكان الدالة

مثلاً دالة إنهاء البرنامج هي Exit , وهذه الدالة موجوده داخل كائن إسمة Environment

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

ويظهر لنا خطأ , لذلك وجب علينا تحديد عنوانها هكذا :
System.Environment.Exit(0);
..

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

ودوال الصوت والفيديو موجود في ملف dll بالمرفقات وللأسف هذا الملف لا ينزل مع لغة البرمجة

لذلك يجب تنزيله من المرفقات , وهذ الملف هو : Microsoft.DirectX.AudioVideoPlayback.dll

بعد تنزيل الملف وفك الضغط , إفتح المشروع وافتح نافذة ملفات المشرع

واضغط بالزر الأيمن على References وإختار Add Reference

http://www.freewebtown.com/gfsd/Image4-3.JPG

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

http://www.freewebtown.com/gfsd/Image4-4.JPG

إختر Browse من تبويب .Net Assemply ثم أضف الملف اللذي قمت بتنزيله

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

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

http://www.freewebtown.com/gfsd/Image4-5.JPG

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

using Microsoft.DirectX.AudioVideoPlayback;
يضاف هذا الكود أسفل تعليمات الإضافة الإفتراضية كما في الصورة :

http://www.freewebtown.com/gfsd/Image4-6.JPG

الآن إذهب إلى تصميم نافذة تطبيق الدرس السابق و قم بحذف القائمة l1

وعدل النص في الزر من "تشغيل الدوارة" إلى "فتح ملف الصوت"

إسحب زر آخر وأكتب عليه "تشغيل ملف الصوت"

ثم إسحب أداة OpenFileDialog إلى النافذة

http://www.freewebtown.com/gfsd/Image4-7.JPG

ستلاحظ أنها لن تضاف في النافذة وإنما في شريط أصفر تحت

وذلك لأن هذه الأداة لا تظهر على النافذة مثل الزر أو صندوق النص

الآن إختر الأداة من الشريط الأصفر و غير إسمها من openFileDialog1 إلى OF ليسهل التعامل معها من الكود

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

http://www.freewebtown.com/gfsd/Image4-8.JPG

الآن سنقوم بتعريف متغير من نوع مشغل صوت Audio, وهذا النوع موجود في ملف Microsoft.DirectX.AudioVideoPlayback

كنا نعرف متغير من نوع رقم هكذا :
int x;
وبنفس الطريقة سنعرف متغير"كائن" من نوع مشغل صوت
Audio ap;
عرفنا كائن أسمة ap من نوع Audio ..

لاحظ أن النوع Audio لا يعتبر متغير وإنما كائن لأنه يحتوي على أفعال وصفات ودوال كما سنرى

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

إذا في إجراء سنعرفه ؟؟ .... يجب أن يكون هذا المتغير متغر دولي Global

لذلك يجب أن نعرفه خارج الإجرائين ونحدد هل هو عام لجميع النوافذ أم خاص لهذه النافذة

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

وقم بتعريف الكائن بهذا الكود :
private Audio ap;
بما اننا سنستخدمة في هذه النافذة فقط جعلنا نوعه خاص private :

http://www.freewebtown.com/gfsd/Image4-9.JPG

الآن افتح التصميم و اضغط مزدوجاً على زر "فتح ملف الصوت" لتذهب إلى الكود

إمسح الكود من الدرس السابق : وأضف هذا الكود :
OF.ShowDialog();
ap=Audio.FromFile(OF.FileName);

أضغط مزدوجا على زر "تشغيل ملف الصوت" وأضف هذا الكود:
ap.Play();

في الكود الأول إستخدمنا دالة ShowDialog في أداة فتح الملفات OF لتظهر لنا نافذة لفتح ملف الصوت :

http://www.freewebtown.com/gfsd/Image4-10.JPG

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

وفي السطر الثاني إستخدمنا دالة FromFile في كائن Audio لفتح الملف وتحميلة للمتغير ap

لاحظ أن الدالة FromFile تتطلب مدخل من نوع نص يحتوي على مسار الملف المراد تحميلة

ومسار هذا الملف هو القيمة التي سترجعها الدالة OF.FileName

في الكود الثاني إستخدمنا دالة Play في المتغير ap لتشغيل ملف الصوت

الآن قم بتشغيل البرنامج وإضغط على زر "فتح ملف الصوت"

وإختر ملف صوت من نوع mp3 أو wav , لا تختر ملف من نوع rm

سنعرف فيما بعد كبف نشغل ملفات rm و ram

بعد إختيار الملف اضغط على زر "تشغيل ملف الصوت"

واستمع للصوت الناتج من برنامجك^^

ملاحظة : بما ان التطبيق أستخدم دوال داخل ملف Microsoft.DirectX.AudioVideoPlayback

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

ولن يعمل البرنامج إلا إذا كان هذا الملف إلى جانبه في نفس المجلد

الواجب

*ماذا لو إخترت ملفاً غير صوتياً وجربت تشغيلة

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

وأظهرت رسالة بالعربية تخبر المستخدم ما اللذي يجري .

تلميح : ظهر الخطأ سيكون عند تعليمة
ap.Play();
لذلك يجب وضع هذه التعليمة ضمن جملة try و ...

*أضف زر لإنهاء البرنامج وأرسل التطبيق ..

ملاحظة مهمة:

ليعمل تطبيق الصوت في أنظمة لا تحتوي على DirectX SDK

يجب إرفاق ملف DirectX في مجلد التطبيق بجانب ملف البرنامج

بمعنى أن نضع هذا الملف بجانب ملف البرنامج exe كما في الصورة

http://www.7oma.com/csharp/images/Image4-11.JPG
الصورة هنــا (http://www.mexat.com/vb/attachment.php?attachmentid=164020&stc=1&d=1156973437) كمان

والملف موجود هنـــا (http://www.7oma.com/csharp/DirectX.zip)..

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

موفقين ^^

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


..][ حمــاة النهضــة ][..

سرمد الزهراء
03-10-2007, 10:04 PM
بسم الله الرحمن الرحيم
اللهم صل على محمد وآل محمد الطيبين الطاهرين
السلام عليكم ورحمة الله وبركاته
مشكور أخي عالدروس مع اني متخلفة قليلا عنها بسبب الدراسة ومشروع التخرج إلا اني انشاء الله متابعة
بالنسبة للدرس الثالث الجمل الشرطية والدوارات ....
for (int i=0;i<10;i++)
{
هنا الكود ستكون الأرقام من الصفر إلى التسعة فقط
if (i>5)
{
وهنا عندما وضعنا جملة شرطيه حددنا فيها اذا كانت القيمة أكبر من خمسة
l1.Items.Add(" من الدوارة " + Convert.ToString(i) + " أكبر من خمسة ");
}
راح يطبع في اللسته كلمة من الدوارة + أكبر من خمسة مع التحويل بالطبع
else
{
لكن اذا كان الشرط غير ذلك أو أصغر من خمسه راح يطبع من الدوارة فقط
l1.Items.Add(" من الدوارة " + Convert.ToString(i) );
}
لدي استفسارات ...هل يعني هذا أن الأعداد التي أكبر من خمسة وأصغر من عشرة هي التي يتحقق لها الشرط الأول (صح)ولهذا في الشرط الثاني هو وضع الأعداد التي أصغر من خمسة من نفسه لأنني محددة من فوق في البداية
2- نحن لم نضع أي شي في الفورم لكي ندخل له مدخل عليه يخرج الشرط الأول أو الثاني ...هل لهذا السبب حقق الشرطين ووضعهم في اللسته ...
أنا عارفة إن استفساراتي مو لهناك لكني أتأكد ...لو سمحت أخي
وأنا عملت الواجب وصار عندي فيه خطأ مادري ليش تحت i

سرمد الزهراء
03-10-2007, 10:21 PM
أخي العزيز السلا م عليكم
أنا أبي أرسل التطبيقات أو الواجبات اله عملتها بس كيف يمكن أرفعها للمنتدى أو ارسلها الكم .....مع اني ماأستطيع أرسل بالخاص تلزمني 15 مشاركة

imadin
03-11-2007, 01:06 PM
معلش تخلفت عن الدرس الرابع وهذا واجب الدرس 3

سرمد الزهراء
03-13-2007, 01:13 PM
مشكور أخي الكريم على الدروس
وهذا واجب الدرس الأول والثاني والثالث ....بس الثالث صار فيه عندي خطأ مادري ليش ....
:smailes41:

حماة النهضة
03-13-2007, 02:34 PM
السلام عليكم ورحمة الله وبركاته

كيف حالكم اليوم ؟
يارب مبسوطين دايما ...

نبدأ مع أختي سرمد الزهراء ..
عذرا أختي حاولت أرد بالأمس الموقع كان مغلق , نرد اليوم ...
بالنسبة للكود
x=Convert.ToInt32
ماذا يعني الرقم 32 هنا ...وقد لاحظت ان ليس كل الأنواع بجانبها أرقام فقط بعضها ..
الرقم الأخير من المتغير يعني حجمة في الذاكرة, مثلاً int16 حجمه 16 بت و int32 حجمة 32 بت

وفيه 64 كمان, وكل نوع له مدى محدد ما يقدر يتجاوزه, مثلاً int16 يقدر يخزن أي رقم من من – 32,768 إلى 32,767

و int32 يقدر يخزن أي رقم من – 2,147,483,648 إلى 2,147,483,647

و int64 له مدى أكبر بكثير, لذلك إخترنا int32 كحل وسط , لأنه يخزن أرقام كبيرة , وما يستهلك مكان كبير في الذاكرة

بالنسبة للدرس الثالث الجمل الشرطية والدوارات ....
for (int i=0;i<10;i++)
{
هنا الكود ستكون الأرقام من الصفر إلى التسعة فقط
if (i>5)
{
وهنا عندما وضعنا جملة شرطيه حددنا فيها اذا كانت القيمة أكبر من خمسة
l1.Items.Add(" من الدوارة " + Convert.ToString(i) + " أكبر من خمسة ");
}
راح يطبع في اللسته كلمة من الدوارة + أكبر من خمسة مع التحويل بالطبع
else
{
لكن اذا كان الشرط غير ذلك أو أصغر من خمسه راح يطبع من الدوارة فقط
l1.Items.Add(" من الدوارة " + Convert.ToString(i) );
}
لدي استفسارات ...هل يعني هذا أن الأعداد التي أكبر من خمسة وأصغر من عشرة هي التي يتحقق لها الشرط الأول (صح)ولهذا في الشرط الثاني هو وضع الأعداد التي أصغر من خمسة من نفسه لأنني محددة من فوق في البداية
2- نحن لم نضع أي شي في الفورم لكي ندخل له مدخل عليه يخرج الشرط الأول أو الثاني ...هل لهذا السبب حقق الشرطين ووضعهم في اللسته ...
أنا عارفة إن استفساراتي مو لهناك لكني أتأكد ...لو سمحت أخي
وأنا عملت الواجب وصار عندي فيه خطأ مادري ليش تحت i
جملة for تختبر شرط أن i أصغر من عشرة

وجملة if الداخلية تختبر شرط أن i أكبر من خمسة

اللي راح ينحط في اللسته هو كل الأرقام اللي تحقق شرط for

بس اللي راح ينحط قدامه كلمة "من الدورارة" هو اللي راح يحقق شرط for و شرط if

مثلاً الرقم 3 يحقق شرط for ولا يحقق شرط if

فهو يمر بجلة for ولايمر بجملة if بل يمر بجملة else

أما الرقم 6 فهو يحقق شرط for و شرط if , فهو يمر بجملة for وجملة if أيضاً

العدد 11 لا يحقق جملة for , فهو لا يمر بجملة for أي أنه لا يمر بجملة if أيضاَ


طيب أختي .. يبدو انك عرفتي كيف ترفقي الملفات .. :smailes103:

راح أشوف الواجب وأرد عليكِ بأقرب وقت ..
خير ^^ ...

=====================

وباقي الواجبات >>

أخي infocom :smailes103:

أخي imadin :smailes103:
معلش تخلفت عن الدرس الرابع وهذا واجب الدرس 3
خير إن شاء الله
ما في أي مشاكل ^^

حاول تتابع معنا واليوم الدرس الجديد بيكون موجود
أو ..
أرى أنكم تحتاجون لبعض الوقت .. لا يضر هذا أبدا ^^
أهم شيء تتابعوا معنا وانتم مرتاحين ..

يارب ما أكون نسيت شيء تاني ...

لو بتريدوا نأجل الدرس كم يوم أو يكون السبت القادم إن شاء الله
منتظر ردكم ^^



..][ حمــاة النهضــة ][..

سرمد الزهراء
03-13-2007, 04:11 PM
]بسم الله الرحمن الرحيم
السلام عليكم أخي العزيز حماة النهضة وعلى تحملك ايانا
وآسفة على إزعاجك ....مرة أخرى وعلى كثرة أسئلتي وطلباتي ...
ولكن مشكلتي مع أداة الفلاش التي أريد أن أضيفها لم تحل ....
ولقد بحثت عن الأداة Managed بحثت عنها في التقنيتين ال .NET والCom ولم أجدها ....فقط وجدت في تقنية NET هذه الأداة macromedia flash factory object وتوقعت انها لها علاقة بأداة الفلاش shokwavflash
ولدي اشكال على ملف وخطأ الآكتيف آكس أنا لا أعرف ماهو أو ماذا يفعل ...لكي أعمل على إصدار أفضل منه ...علما بأني أستخدم مايكروسوفت فيجوال ستوديو .نت 2005
مع اني أخي الكريم عملت إضافة لأداة الفلاش shokwavflash فقط في مايكروسوفت فيجوال ستوديو .نت 2003 وانضافت واستطعت أضع فيها كود واربط فلاش باالفيجوال ...
وأرجوك أخي أن توضح لي هذا السطر

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

أرجوك ياأخي الكريم أن تساعدني ....ماذا أفعل لهذه الأداة ...

انظر إلى الأخطاء التي طلعت لي من اضافة الأداتين على الفورم [/COLOR]
Warning 1 Could not resolve dependent COM reference "stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
وهذا
Warning 2 Failed to create the wrapper assembly for type library "AxShockwaveFlashObjects". Exception of type 'Microsoft.Build.Tasks.ComReferenceResolutionExcep tion' was thrown. AxShockwaveFlashObjects
وهذا
Warning 3 The referenced component 'AxShockwaveFlashObjects' could not be found. Failed to create the wrapper assembly for type library "AxShockwaveFlashObjects". Exception of type 'Microsoft.Build.Tasks.ComReferenceResolutionExcep tion' was thrown.

أعرف اني أطلت كثيرا ولكن بالسؤال نتعلم وانشاء الله أجرك على الله
السلام عليكم ورحمة الله وبركاته

سرمد الزهراء
03-13-2007, 04:15 PM
أنا أخي الكريم درست من الدرس الرابع لكن يبيله شوي .....
الله يعين ..لأن هذا الأسبوع صايرة مزحومة ....
وانشاء الله نوفق في ذلك

حماة النهضة
03-13-2007, 04:19 PM
مشكور أخي الكريم على الدروس
وهذا واجب الدرس الأول والثاني والثالث ....بس الثالث صار فيه عندي خطأ مادري ليش ....
:smailes41:
أختي ..

طيب ايش الخطأ , ممكن تنقلي رسالة الخطأ هنا عشان نعرف نعالجه

شفت ردودك الحين أختي ^^
طيب برد عليكِ بوقت تاني لأني خارج الحين ...



اخوتي :)
خلاص نأجل درس اليوم ليوم السبت ولو جاهزين بنخليه بكرة إن شاء الله ...


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



..][ حمــاة النهضــة ][..

سرمد الزهراء
03-13-2007, 04:22 PM
يارب ما أكون نسيت شيء تاني ...

لو بتريدوا نأجل الدرس كم يوم أو يكون السبت القادم إن شاء الله
منتظر ردكم ^^

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

سرمد الزهراء
03-13-2007, 04:30 PM
أخي حماة النهضة ...
هذا الكود اله كتبته
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 12;i++) ;
if (i < 6)
i1.Items.Add("من الدوارة "+Convert.ToString(i1)+"أصغر من سته");
else if (i== 6)

i1.Items.Add("من الدوارة " + Convert.ToString(i1) + "تساوي سته");
else if (i > 6)
i1.Items.Add("من الدوارة " + Convert.ToString(i1) + "أكبر من سته");
وبيحط لي خطأ تحت حرف i
والرساله اله بتطلع لي هي
Error 1 The name 'i' does not exist in the current

سرمد الزهراء
03-13-2007, 04:36 PM
انشاء الله أخي الكريم ...انتظر ردودك ....
ومشكور على تحملك لي لكثرة طلباتي وأسئلتي
وحطيت الخطأ .....حق اله طلع بالواجب
مشكووووووووووووووووور :smailes9:
السلام عليكم

حماة النهضة
03-14-2007, 05:08 PM
السلام عليكم ورحمة الله وبركاته

يا شباب ممكن بس توضيح بسيط ...

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

]بسم الله الرحمن الرحيم
السلام عليكم أخي العزيز حماة النهضة وعلى تحملك ايانا
وآسفة على إزعاجك ....مرة أخرى وعلى كثرة أسئلتي وطلباتي ...
ولكن مشكلتي مع أداة الفلاش التي أريد أن أضيفها لم تحل ....
ولقد بحثت عن الأداة Managed بحثت عنها في التقنيتين ال .NET والCom ولم أجدها ....فقط وجدت في تقنية NET هذه الأداة macromedia flash factory object وتوقعت انها لها علاقة بأداة الفلاش shokwavflash
ولدي اشكال على ملف وخطأ الآكتيف آكس أنا لا أعرف ماهو أو ماذا يفعل ...لكي أعمل على إصدار أفضل منه ...علما بأني أستخدم مايكروسوفت فيجوال ستوديو .نت 2005
مع اني أخي الكريم عملت إضافة لأداة الفلاش shokwavflash فقط في مايكروسوفت فيجوال ستوديو .نت 2003 وانضافت واستطعت أضع فيها كود واربط فلاش باالفيجوال ...
وأرجوك أخي أن توضح لي هذا السطر

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

أرجوك ياأخي الكريم أن تساعدني ....ماذا أفعل لهذه الأداة ...

انظر إلى الأخطاء التي طلعت لي من اضافة الأداتين على الفورم
Warning 1 Could not resolve dependent COM reference "stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
وهذا
Warning 2 Failed to create the wrapper assembly for type library "AxShockwaveFlashObjects". Exception of type 'Microsoft.Build.Tasks.ComReferenceResolutionExcep tion' was thrown. AxShockwaveFlashObjects
وهذا
Warning 3 The referenced component 'AxShockwaveFlashObjects' could not be found. Failed to create the wrapper assembly for type library "AxShockwaveFlashObjects". Exception of type 'Microsoft.Build.Tasks.ComReferenceResolutionExcep tion' was thrown.

أعرف اني أطلت كثيرا ولكن بالسؤال نتعلم وانشاء الله أجرك على الله
السلام عليكم ورحمة الله وبركاته
طيب هذا برنامج صغير (http://www.7oma.com/csharp/flash.zip) بالفجوال بيسك 2005 لتشغيل ملف فلاش

جربية وشوفي كوده , طبعاً لازم يكون منزل في جهازك الفلاش بلاير

الفلاش بلاير هو اللي يشغل ملفات الفلاش , وتتأكدي أنو منزل عندك إذا ملفات الفلاش في أي صفحة أنترنت شغاله

معناها أنو منزل في جهازك

طبعاً الإداه اللي أستخدمتها في البرنامج هي الإصدار التاسع b

موجوده هنا (http://www.7oma.com/csharp/flash9b.zip)

أما إذا رجعت تظهر الرسالة القديمة فبعد ما تضيفي الأداه للمشروع إحذفي مجلدي bin و obj

وراح تشتغل إن شاء الله



أخي حماة النهضة ...
هذا الكود اله كتبته
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 12;i++) ;
if (i < 6)
i1.Items.Add("من الدوارة "+Convert.ToString(i1)+"أصغر من سته");
else if (i== 6)

i1.Items.Add("من الدوارة " + Convert.ToString(i1) + "تساوي سته");
else if (i > 6)
i1.Items.Add("من الدوارة " + Convert.ToString(i1) + "أكبر من سته");
وبيحط لي خطأ تحت حرف i
والرساله اله بتطلع لي هي
Error 1 The name 'i' does not exist in the current
بالنسبة للخطــأ
كتبت لك الكود أختي و وضحت فيه الأخطاء

for (int i = 0; i < 12;i++) ;
if (i < 6)
i1.Items.Add("من الدوارة "+Convert.ToString(i1)+"أصغر من سته");
else if (i== 6)

i1.Items.Add("من الدوارة " + Convert.ToString(i1) + "تساوي سته");
else if (i > 6)
i1.Items.Add("من الدوارة " + Convert.ToString(i1) + "أكبر من سته");

أول شيء ما في فاصلة منقوطة بعد جملة if الأولى عشان ما نفصل if الأولى عن باقي المجموعة

تاني شيء

إحنا بنحول المتغير i وليس i1 اللي هوا مربع النص

فإنتي كنتي واضعة مربع النص ليتم تحويله ل string لذلك هو بيعتبر إنه فيه خطأ باقي

شيء إضافي

لو إنتي رفعتي الفاصلة المنقوطة بالأعلى بعد أول جملة IF

راح يشتغل البرنامج لكن راح يكون في خطأ غريب و هوا راح يظهر لك كلام غريب في مربع النص

لإنك محولة مربع النص ل string و ليس المتغير i

لذلك لازم تعدلي i1 و تحطي بدلها المتغير i عشان تظهر النتيجة صحيحة

و كذلك في الأقواس نسيتيها

يعني المفروض الكود يكون كذا :

private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 12;i++)
{
if (i < 6)
{
i1.Items.Add("من الدوارة "+Convert.ToString(i)+"أصغر من سته");
}
else if (i== 6)
{
i1.Items.Add("من الدوارة " + Convert.ToString(i) + "تساوي سته");
}
else if (i > 6)
{
i1.Items.Add("من الدوارة " + Convert.ToString(i) + "أكبر من سته");
}
}
}

بالتوفيق و ما شاء الله عنك


انشاء الله أخي الكريم ...انتظر ردودك ....
ومشكور على تحملك لي لكثرة طلباتي وأسئلتي
وحطيت الخطأ .....حق اله طلع بالواجب
مشكووووووووووووووووور :smailes9:
السلام عليكم
ما في مشكلة أختي .. أي أسئلة بدكم اياها بنرد عليكم بإذن الله ^^

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



..][ حمــاة النهضــة ][..

[/COLOR]

omar89amir
03-14-2007, 10:19 PM
:smailes65: مشكورررررررررررررررر

omar89amir
03-14-2007, 10:20 PM
جزاك الله كل خير

omar89amir
03-14-2007, 10:21 PM
موضوع رائع

omar89amir
03-14-2007, 10:22 PM
استمر في ابداعنى

omar89amir
03-14-2007, 10:22 PM
الف شكررررررررررررررر

omar89amir
03-14-2007, 10:23 PM
ممنون اخويه

omar89amir
03-14-2007, 10:23 PM
الله يخليك

omar89amir
03-14-2007, 10:24 PM
صدك موضوع رائع

omar89amir
03-14-2007, 10:25 PM
الله يخليك وبدعنى

سرمد الزهراء
03-15-2007, 05:49 PM
السلام عليكم أخي العزيز
وأشكرك على تعبك معايه ....شكرا جزيلا
فتحت المشروع (البرنامج )وشفت الفلاش وفتح عندي وشفت الكود بعد
وشفت بعد الأداة ..لكن بسئل أنا ماقد ضفت أداة من قبل للبرنامج ...فهل أضع الأداة داخل ملفات البرنامج اله على قرص السي وأضيفها في البرنامج من toolbox باليمين أختار choose Item >>>وبعدين أضيفها في com >>>من Browse وأختار موقع الأداة وراح تنضاف ..وله هناك طريقة تانية ....أنا أخاف اسوي اله كتبته تصير مصيبة عندي ...
ومشكور أخي وجزاك الله ألف خير....
السلام عليكم
:smailes9:

حماة النهضة
03-16-2007, 09:19 AM
أختي سرمد الزهراء

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

ماشاء الله عليك مجتهدة بارك الله فيك واصلي دائماً نحن معك

مافي داعي للشكر أختي , إذا بنقدر نساعد فما بنقصر إن شاء الله

الأداة أنا حطيتها لك كإحتياط , لأنها عادة موجوده في النظام

يعني ضيفيها من من toolbox باليمين choose Item >>>وبعدين في com

بتلاقيها موجوده معك في القائمة هناك مفيش داعي تعمليلها browse

ولما تضيفيها للتول بوكس وتظهر الرسالة اللي ظهرت لك أول مرة احذفي مجلدات obj و bin

وراح تشتغل معك إن شاء الله

أما إذا ما لقيتي الأداة في قائمة com فلازم تنزلي الفلاش بلاير

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

ربنا يوفقك

..

حماة النهضة
03-17-2007, 04:16 PM
السلام عليكم ورحمة الله وبركاته

شكراً لكل الناس اللي ماشين معنا بالدروس بارك الله فيكم


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

الدرس الخامس


تشغيل ملف فيديو

دوال تشغيل الفيديو موجودة في ملف Microsoft.DirectX.AudioVideoPlayback.dll

الذي أضفناه إلى التطبيق في الدرس السابق

دوال الفيديو تشبه إلى حد كبير دوال الصوت عدى عن إختلافات بسيطة

من اهم هذه الإختلافات أنه يمكنك أن تحدد كائن حاضن Owner Control لشاشة الفيديو

معنى كائن حاضن اي كائن يعمل كشاشة فيديو

أما إذا لم تحدد كائن حاضن فان التطبيق سيفتح نافذه جديدة لتكون شاشة الفيديو

قراءة أحداث المفاتيح

كل كائن له صفات و دوال كما عرفنا سابقاً , والكائنات تحتوي أيضاً على أحداث Events

مثلاً الزر له عدة أحداث منها عند الضغط عليه Click وعند الضغط المزدوج DoubleClick

و عند مرور مؤشر الماوس به MouseOver

وفي الدروس السابقة إستخدمنا حدث Click فقط

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

http://www.7oma.com/csharp/images/image5-1.jpg

ستظهر لك قائمة بجميع الأحداث للكائن المحدد

ولكي تضيف تعليمات عند حدوث حدث معين اضغط مزدوجاً على أسم الحدث في القائمة

ستتنتقل إلى الشفرة لتكتب التعليمات التي تنفذ عن حدوث ذلك الحدث

ومن الأحداث المهة حدث KeyPress وينطلق هذا الحدث عند الضغط على أي مفتاح

في لوحة المفاتيح .

التطبيق

إفتح تطبيق الدرس السابق وعدل النص في زر فتح ملف الصوت إلى "فتح ملف ميديا"

وفي زر تشغيل ملف الصوت إلى "تشغيل ملف ميديا"

أضف زراً جديداً وغير النص فيه إلى "ملئ الشاشة"

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

افتح التصميم وأضف أدات البانيل إلى الفورم:

http://www.7oma.com/csharp/images/image5-3.jpg

تأكد من إختيار البانيل و غير صفة الإسم إلى p1

غير صفة العرض Width إلى 400 وصفة الإرتفاع Height إلى 300

http://www.7oma.com/csharp/images/image5-4.jpg

من خلال صفة BackgroundImage إختر اي صورة لتكون خلفية الشاشة

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

http://www.7oma.com/csharp/images/image5-5.jpg

أضغط مزدوجاً على أي زر للذهاب إلى الشفرة ,

نحتاج إلى تعريف كائن عام Global من نوع فيديو ولأننا سنستخدمة في أكثر من إجراء

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

وأكتب تعريف كا ئن الفيديو :

private Video vp;

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

http://www.7oma.com/csharp/images/image5-2.jpg

سنجعل التطبيق يفتح ملفات صوت أو ملفات فيديو , لكن المشكلة أن للصوت كائن

وللفيديو كائن آخر , وبالتالي يجب أن نعرف نوع الملف حتى نستخدم الكائن المحدد

وبما أن أنواع الفيديو كثيرة جداً فلا يمكننا فحص نوع الملف لتأكد من نوعه

وبالتالي فالحل الوحيد هو أن نحاول أولا تشغيل الملف بكائن الفيديو

فإن ظهر لنا خطأ فنحاول نشغلة بكائن الصوت , وأن ظهر لنا خطأ للمرة الثانية فالملف غير صالح

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

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

ويشغل الصوت الذي فيه , وبالتالي فربما يكون الملف فيديو ويتم تشغيله كملف صوت

لذلك يجب أولاً تجربة كائن الفيديو حتى إذا كان ملف فيديو يشغل الصوت مع الصورة

وإذا كان ملف صوت نجرب كائن الصوت ..

لعمل ذلك نحتاج إلى تنفيذ جملة تعقب الإخطاء try مرتين متداخلتين:

try
{
//شغل ملف الفيديو
}
catch
{
try
{
//شغل ملف الصوت
}
catch
{
//الملف غير صالح
}
}

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

والتي هي باللون الأزرق , وهناك جملة tryأخرى نقوم من خلالها بتجربة فتح ملف صوت

فإذا حدث أي خطأ فان المترجم ينتقل لتنفيذ تعليمات catch التي تحتها خط

في زر فتح ملف الميديا أمسح الكود السابق وأكتب بدلاً عنه :

OF.ShowDialog();
try
{
vp = Video.FromFile(OF.FileName);
vp.Owner = p1;
p1.Width = 400;
p1.Height = 300;
}
catch
{
try
{
ap = Audio.FromFile(OF.FileName);
}
catch
{
MessageBox.Show("الرجاء إختيار ملف صالح");
}

}

التعليمة OF.ShowDialog تفتح نافذة فتح ملف ميديا

عند إختيار الملف نجرب تشغيل الفيديو عبر هذه التعليمات:

vp = Video.FromFile(OF.FileName);
vp.Owner = p1;
p1.Width = 400;
p1.Height = 300;

في السطر الأول نحمل الملف الموجود في كائن فتح الملف إلى كائن الفيديو

في السطر الثاني نحدد الكائن الحاضن Owner لكائن الفيديو

في السطر الثالث والرابع , نعيد تحديد حجم الكائن الحاضن إلى الحجم الأصلي

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

في ملف الفيديو لذلك من الأفضل إعادة تحجيم الكائن الحاضن

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

ap = Audio.FromFile(OF.FileName);

عند حدوث خطأ آخر هنا سينتقل المترجم إلى تنفيذ تعليمة catch الداخلية وهي إظهار رسالة الخطأ

سنستخدم نفس الطريقة في إجراء الضغط على زر تشغيل ملف الميديا

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

try
{
vp.Play();
}
catch
{
try
{
ap.Play();
}
catch
{
MessageBox.Show("حدث خطأ اثناء محاولة تشغيل الملف");
}
}

نجرب تشغيل ملف الفيديو وإذا حدث خطا نجرب تشغيل ملف الصوت وإذا حدث خطأ آخر نظهر رسالة.

افتح التصميم واضغط مزدوجاً على زر ملئ الشاشة وأكتب تعليمة ملئ الشاشة لكائن الفيديو:

vp.Fullscreen = true;

كائن الفيديو يحتوي على صفة Fullscreen من نوع قيمة بوليانية اما صح أو خطأ

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

و إذا حددناها false سيرجع تشغيل الفيديو إلى الكائن الحاضن

عرفنا كيف نجعل التشغيل ملئ الشاشة لكن المشكل كيف نرجعه للكائن الحاضن

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

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

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

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

إذهب إلى قائمة الإحداث وأضغط مزردوجاً على الحدث KeyPress

http://www.7oma.com/csharp/images/image5-6.jpg

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

vp.Fullscreen = false;

هناك مشكلة ستواجهنا هنا وهي في حالة إذا كان تركيز لوحة المفاتيح على زر محدد

فلن ينطلق حدث الضغط على النافذة , سينطلق الحدث على الزر المحدد فقط

والشفرة السابقة على النافذه الأساسية ,,,

الحل أن هناك صفة في النافذة تمكنها من إطلاق الحدث حتى ولو حصل في أي كائن من الكائنات

هذه الخاصية هي KeyPreview عدلها من False إلى True لتصبح كما في الصورة

http://www.7oma.com/csharp/images/image5-7.jpg

الآن شغل البرنامج وجرب تشغيل ملف صوت أو فيديو او ملف نصي

تلميحات الأدوات

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

وتظهر هذا الملاحظات في مستطيل أصفر يظهر بمجرد مرور الماوس من فوق الزر

مثلاً لو تمرر الماوس فوق زر Start في شريط المهام ستظهر هذه الملاحظة

Click here to begin

لعمل مثل هذه الملاحظات في تطبيقنا نحتاج لإضافة كائن جديد

افتح التصميم واسحب كائن تلميحات الأدوات ToolTip

http://www.7oma.com/csharp/images/image5-8.jpg

الآن في أي كائن تختارة ستجد صفة جديدة إسمها ToolTip on toolTip1

أكتب فيها أي تلميح نصي للكائن :

http://www.7oma.com/csharp/images/image5-9.jpg

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

http://www.7oma.com/csharp/images/image5-10.jpg

الواجب

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

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

..

سرمد الزهراء
03-18-2007, 07:43 PM
السلام عليكم ورحمة الله وبركاته
كيف حالكم إخواني وأخواتي جميع
استاذي الكريم
لدي بعض النقاط على الدرس الرابع
أنا جربت في الإجراءات الإستدعاء ولكن حصلت لي بعض الأخطاء بعضها حل والبعض الأخر لا ...

void Button1Click(object sender, System.EventArgs e)
{
sm();
sm();
sm();
sm();
sm();
}

void sm()
{
MessageBox.Show("من داخل الإجراء");
}

المهم اني لما شغلت البرنامج علطول تظهر لي الرسائل الخمس مرة وحدة من دون أن اضغط الزر الذي على الفورم ....مع اني أعتقد ان المفروض لابد ان اضغط على الزر أولا مع العلم انني لم أضعه في Form1_Load عشان يسوي لي كده

وهذا البرنامج ...انظر اله كيف لما اتشغله ...وحطيت بعد الكود في مجلد وورد

وانشاء الله سأنزل بقية ملاحظاتي :smailes107: واستفساراتي ...على هذا الدرس الرابع

سرمد الزهراء
03-18-2007, 08:26 PM
void sm(string msg)
{
MessageBox.Show(msg);
}

المدخلات هي متغيرات كما رأينا حيث عرفنا متغير مدخل اسمه msg من نوع نص string
وفي تعليمة إظهار الرسالة جعلنا الكائن MessageBox.Show يظهر ما في المتغير المدخل msg
الآن عند إستدعاء الإجراء يجب تمرير قيمة من نوع نص مكان المتغير المدخل هكذا:

sm("من داخل الإجراء");
sm("رسالة مختلفة من نفس الإجراء");

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

أنا فهمتهم:smailes54: لكن ....
لم استطع عملهم ....لأني اذا حطيتهم كلهم في زر واحد يعملوا لي أخطاء .....:(

سرمد الزهراء
03-18-2007, 08:37 PM
والأفضل يكون تعريف المتغيرات الدولية في بداية كود النافذة فوق دالة Main :

[CODE]
//هنا تعريف المتغيرات الدولية
[STAThread]
public static void Main(string[] args)

أنا ماعندي بالنافذة من فوق الدالة Main....وين احط الكود ....
هذي الصفحة اله عندي وضعتها
ايش ممكن اعمل ...اذا مو موجود ..عشان أقدر اخلي المتغير public أو private

حماة النهضة
03-19-2007, 08:06 AM
السلام عليكم ورحمة الله وبركاته
كيف حالكم إخواني وأخواتي جميع
استاذي الكريم
لدي بعض النقاط على الدرس الرابع
أنا جربت في الإجراءات الإستدعاء ولكن حصلت لي بعض الأخطاء بعضها حل والبعض الأخر لا ...

void Button1Click(object sender, System.EventArgs e)
{
sm();
sm();
sm();
sm();
sm();
}

void sm()
{
MessageBox.Show("من داخل الإجراء");
}

المهم اني لما شغلت البرنامج علطول تظهر لي الرسائل الخمس مرة وحدة من دون أن اضغط الزر الذي على الفورم ....مع اني أعتقد ان المفروض لابد ان اضغط على الزر أولا مع العلم انني لم أضعه في Form1_Load عشان يسوي لي كده

وهذا البرنامج ...انظر اله كيف لما اتشغله ...وحطيت بعد الكود في مجلد وورد

وانشاء الله سأنزل بقية ملاحظاتي :smailes107: واستفساراتي ...على هذا الدرس الرابع



أوكي يا أختي راح نرد على كل أسألتك

لازم يكون الكود المكتوب داخل دالة إجراء النقر على الزر كذا :

void Button1Click(object sender, System.EventArgs e)
{
sm();
sm();
sm();
sm();
sm();
}

void sm()
{
MessageBox.Show("من داخل الإجراء");

يعني لما تسحبي الزر من صندوق الأدوات إلى الفورم

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

sm();
sm();
sm();
sm();
sm();

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

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{
sm();
sm();
sm();
sm();
sm();
}

void sm()
{
MessageBox.Show("من داخل الإجراء");
}
}
}

وبعدين هذا بس توضيح عشان فهم الإجراءات والدوال وما راح نحتاجه في التطبيق

حماة النهضة
03-19-2007, 08:19 AM
void sm(string msg)
{
MessageBox.Show(msg);
}

المدخلات هي متغيرات كما رأينا حيث عرفنا متغير مدخل اسمه msg من نوع نص string
وفي تعليمة إظهار الرسالة جعلنا الكائن MessageBox.Show يظهر ما في المتغير المدخل msg
الآن عند إستدعاء الإجراء يجب تمرير قيمة من نوع نص مكان المتغير المدخل هكذا:

sm("من داخل الإجراء");
sm("رسالة مختلفة من نفس الإجراء");

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

أنا فهمتهم:smailes54: لكن ....
لم استطع عملهم ....لأني اذا حطيتهم كلهم في زر واحد يعملوا لي أخطاء .....:(


شوفي يا اختي المفروض ما تحطيهم كلهم في زر واحد اللي في الزر الواحد هم الرسالتين:

sm("من داخل الإجراء");
sm("رسالة مختلفة من نفس الإجراء");

أما الإجراء نفسة فهو لازم يكون خارج إي إجراء ثاني

يعني بيكون الكود كامل زي كذا :


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{
sm("من داخل الإجراء");
sm("رسالة مختلفة من نفس الإجراء");
}

void sm(string msg)
{
MessageBox.Show(msg);
}
}
}

حماة النهضة
03-19-2007, 08:22 AM
والأفضل يكون تعريف المتغيرات الدولية في بداية كود النافذة فوق دالة Main :


//هنا تعريف المتغيرات الدولية
[STAThread]
public static void Main(string[] args)

أنا ماعندي بالنافذة من فوق الدالة Main....وين احط الكود ....
هذي الصفحة اله عندي وضعتها
ايش ممكن اعمل ...اذا مو موجود ..عشان أقدر اخلي المتغير public أو private

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

[CODE]public partial class Form1 : Form
{
private ......



ربنا يوفقك

..
وأي شيء نحن حاضرين أسألي وبنجاوبك بإذن الله

سلام

imadin
03-19-2007, 08:45 AM
استفسار لو سمحت في الدرس الرابع
لما أشغل ملف صوتي وأقوم بتشغيل ملف ثاني فوقه يشتغل الثاني بدون أن يختفي الأول يعني يحدث تداخل للملفين ماهو الحل ؟؟
وإن شاء الله أتدارك الدرس الخامس فحقيقة الموقع كثيرا مايعملي مشاكل ومايريد يدخل

سرمد الزهراء
03-19-2007, 04:25 PM
وعليكم السلام ورحمة الله وبركاته
مشكور أخي الكريم وماقصرت ....وجزاك الله كل خير ..
أشكرك على التوضيح الطيب منك أخي
السلام

حماة النهضة
03-19-2007, 09:10 PM
استفسار لو سمحت في الدرس الرابع
لما أشغل ملف صوتي وأقوم بتشغيل ملف ثاني فوقه يشتغل الثاني بدون أن يختفي الأول يعني يحدث تداخل للملفين ماهو الحل ؟؟
وإن شاء الله أتدارك الدرس الخامس فحقيقة الموقع كثيرا مايعملي مشاكل ومايريد يدخل

هلا بكم

حل هذه المشكلة في الدرس الخامس إن شاء الله

والدرس الخامس نزلناه بالمنتدى تقدروا شوفوه

وبالتوفيق يارب

حماة النهضة
03-21-2007, 03:28 AM
السلام عليكم روحمة الله وبركاته

بارك الله فيكم متفاعلين معنا بالدروس

نتمنى لكم التوفيق يارب ...ورونا الهمة

الدرس السادس


تشغيل ملفات الريل بلاير Playing RM Files

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

تقنية rm تم تصميمها بواسطة شركة .Real Networks Inc حيث أن لهذه التقنية

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

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

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

لتشغيل ملفات rm نحتاج لملفات dll تحتوي على دوال تشغيل rm

الملفات موجودة للتحميل من هنا (http://www.7oma.com/csharp/real.zip)

وهي من شركة Real تم تحويرة قليلاً ليتعامل مع بيئة الدوت نت

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

ولا تقبل بتوزيعها على الشركات الأخرى لذلك فميكروسوفت لا تدعم تشغيل ملفات rm

فمثلاً كما رأينا في الدرس السابق فان أمر تشغيل ملف صوت أو فيديو عادي هو:

Play();

أما لتشغيل ملف rm فيكون الأمر هكذا

DoPlay();

هذه مقارنه بسيطة بين أوامر ميكروسوفت وأوامر Real

AVI----------------Real
1-FromFile---------SetSource
2-Play-------------DoPlay
3-Stop-------------DoStop
4-Pause------------DoPause
5-Duration---------GetLength
6-CurrentPosition----GetPosition/SetPosition

الأمر الأول يستخدم لتحميل الملف

الأمر رقم 2 يستخدم لتشغيل الملف

الأمر 3 لإيقاف تشغيل الملف نهائياً

الأمر 4 لإيقاف تشغيل الملف مؤقتاً

الأمر 5 لإيجاد طول الملف بالثواني

الأمر 6 لإيجاد مكان التشغيل , أي إيجاد الموقع في الملف الذي يتم تشغيله

مثلاً إذا أنتجت الدالة 60 معنى ذلك أنه يتم الآن تشغيل الثانية رقم 60 من الملف

في أوامر Real هناك أمرين أحدهما لقرائة الموقع والآخر لضبط الموقع

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

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

يتبع التطبيق في الرد التالي

حماة النهضة
03-21-2007, 03:30 AM
التطبيق

إفتح تطبيق الدرس السابق

أضف الملف AxInterop.RealAudioObjects.dll الذي قمت بتحميلة إلى المراجع References كما فعلنا في الدرس الرابع

سنضيف في هذا التطبيق كائن عام جديد من نوع مشغل rm

وليكون إسم هذا الكائن rp إختصار لـ Real Player

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

private AxRealAudioObjects.AxRealAudio rp=new AxRealAudioObjects.AxRealAudio();

لاحظ أن كود تعريف الكائن يختلف قليلاً عن تعريف كائنات ميكروسوفت

بعد تعريف كائن مشغل rm أصبح لدينا ثلاثة كائنات رئيسية

مشغل صوت و مشغل فيديو ومشغل rm وعند فتح ملف جديد

سنبدأ بإختبار هل هو ملف فيديو ثم هل هو ملف صوت ثم هل هوملف rm

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

وعند إيقاف تشغيل الملف أو عند تقديم أو تأخير المف ..

وإذا أردنا أختصار الكود لنستخدم جملة try المتداخلة فقط عند فتح الملف

سنستخدمها فقط عند فتح "تحميل الملف" ومنها سنعرف نوع المف , ونقوم بخزن نوع المف

في متغير عام من نوع نص , وعند تشغيل الملف بدلاً من إستخدام try المتداخله كما فعلنا في الدرس السابق

سنفحص نوع الملف من خلال المتغير من نوع نص الذي خزنا فيه نوع الملف عند الفتح

دون إستخدام جملة try وذلك سيسهل كثيرا ويسرع عملية تشغيل الملف والتعامل معه

إذاً سنعرف متغير عام من نوع نص لخزن نوع الملف وليكون إسمه type

نعرف هذا المتغير تحت تعريفات كائن الصوت والفيديو و مشغل rm هكذا:

private string type;

بحيث تصبح المتغيرات العامة هكذا :

http://www.7oma.com/csharp/images/image6-1.jpg

اذهب إلى التصميم

أضف للنافذة الأساسية زرين زر للإيقاف و زر للإيقاف المؤقت

إذهب إلى كرد البرنامج ..

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

إجراء تحميل الملف

وهذه الإجراء سيكون مستقله لكي نستطيع إستخدامه في أكثر من مكان

لنسمي هذه الإجراء LoadFile وستكون وظيفته إختبار نوع الملف ثم ضبط قيمة المتغير type

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

الأحرف التي سيحملها المتغير type هي A إذا كان ملف صوت و V إذا كان ملف فيديو وR إذا كان ملف rm

أي أن الإجراء سيفحص نوع الملف فإذا كان ملف صوت سيحمل type الحرف A ويحمل الملف إلى كائن الصوت ap

أما إذا كان فيديو فيحمل type الحرف V ويحمل الملف لكائن الفيديو vp

أما إذا كان الملف rm فيحمل type الحرف R ويحمل الملف لكائن الريل rp

فحص نوع الملف سيكون بنفس الطريقة في الدرس السابق ولكنا سنستخدم try ثلاث مرات متداخلة

أنسخ هذا الكود إلى الشفرة وتأكد أن يكون هذا الكود خارج أي دالة أخرى:

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";
}
}

}
}

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

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

وبما أنه إجراء مستقلة يجب ان تكون خارج أي إجراء أخر:

http://www.7oma.com/csharp/images/image6-2.jpg

الإجراء يتكون من مدخل واحد Path من نوع نص ويمثل مسار الملف الذي سيتم تحميلة

أي أننا عندما نستدعي الإجراء سنكتب إسمه ونعطيه مدخل من نوع نص مثلاً:

LoadFile("C://s.mp3");

الكود السابق سيقوم بإستدعاء الإجراء و الإجراء سيقوم بفحص وتحميل الملف s.mp3 الموجود في القرص c

ملاحظة: في لغة السي شارب يعتبر حرف \ حرفاً غير مسموح به

لذلك عند كتابة مسار الملف يتم إستبدالة بـ //

في السطر الأول من الإجراء تعلمية StopFile وهي إستدعاء لإجراء أخر سنشرحه فيما بعد

يقوم إجراء StopFile بإيقاف تشغيل أي ملف لكي يتم تحميل ملف جديد بدلاً منه وإذا لم نوقف تشغيل

الملف السابق وقمنا بتحميل ملف آخر سيحدث تداخل في الملفات ويتم تشغيل أكثر من ملف في آن واحد

في السطور 2 و3 و4 و5 كما هو مشروح في الكود يتم تصفير الكائنات

ومعنى التصفير هو إلغاء تحميل الملفات السابقة لكي يتم تحميل ملفات جديدة

بعدها جملة try الأولى تقوم بتحميل كائن الفيديو الملف المدخل من خلال المتغير Path

فإذا تم التحميل بنجاح فإن التعليمة type="V" تقوم بتحميل الحرف V إلى المتغير type

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

ويتم فيها تحميل الملف لكائن الصوت فإذا تم التحميل بنجاح يتم تحميل المتغير type الحرف A

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

ويتم فيه تحميل الملف إلى كائن rm "لاحظ الأختلاف في الأمر عن أوامر الصوت والفيديو"

فإذا تم التحميل بنجاح يتم تحميل المتغير type الحرف R دلالة على أن نوع الملف هو ريل

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

ويحمل المتغير الحرف N دلالة على أن نوع الملف غير معروف .

إجراء تشغيل الملف

سنقوم بكتابة إجراء مستقل أخر لتشغيل الملف , إجراء التشغيل سيكون أسهل بكثير من إجراء تحميل الملف

لان لدينا نوع الملف مخزن في المتغير type ولن نقوم بفحص نوع الملف مرة أخرى

حيث سنقوم بإستخدام تعليمة if لنعرف الحرف الموجود في type ومن خلالة نعرف نوع الملف فنشغل الكائن المطلوب

لنسمي هذا الإجراء PlayFile ولن تكون لهذا الإجراء أي مدخلات

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

void PlayFile()
{
if(type=="V")
{
vp.Play();
}
else if(type=="A")
{
ap.Play();
}
else if(type=="R")
{
rp.DoPlay();
}
}

في المقارنة الأولى إذا كان المتغير يحمل الحرف V فهذا يعني أن نوع الملف هو فيديو كما في إجراء التحميل

ولذلك سيتم تشغيل كائن الفيديو vp , إما إذا لم يكن V فينتقل المعالج للمقارنة الثانية وإلا للثالثة

إجراء الإيقاف المؤقت

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

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

void PauseFile()
{
if (type=="V")
{
vp.Pause();
}
else if (type=="A")
{
ap.Pause();
}
else if (type=="R")
{
rp.DoPause();
}
}

لا أظن أنها تحتاج إلى شرح..

إجراء إيقاف التشغيل

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

void StopFile()
{
if (type=="V")
{
vp.Stop();
}
else if (type=="A")
{
ap.Stop();
}
else if (type=="R")
{
rp.DoStop();
}
}

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

لو قمت بتشغيل البرنامج الآن لن يتم تشغيل أي إجراء لأننا لم نستدعي أي منها

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

OF.ShowDialog();
LoadFile(OF.FileName);
PlayFile();

في السطر الأول إستدعينا نافذة فتح الملف

في السطر الثاني إستدعينا إجراء تحميل الملف و حملنا المدخل بناتج كائن فتح الملف

أي أنه في شفرة إجراء التحميل ستكون قيمة المدخل Path هي قيمة OF.FileName

بعد إستدعاء إجراء تحميل الملف استدعينا إجراء تشغيل الملف , أي أنه سيتم تشغيل الملف بمجرد إختياره

إذهب إلى التصميم مجددا واضغط مزدوجاً على زر التشغيل, أمسح الكود السابق وأكتب بدلاً عنه:

PlayFile();

إستدعاء لإجراء التشغيل لا غير

نلاحظ كيف أستدعينا إجراء التشغيل في زر فتح الملف وفي زر التشغيل

اذهب للتصميم واضغط مزدوجاً على زر الإيقاف المؤقت وأكتب فيه هذا الكود:

PauseFile();

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

StopFile();

نستطيع الآن أن نقول أن التطبيق يشغل جميع أنواع الملفات

ملاحظة:

عند أستيراد ملف دوال الريل بلاير AxInterop.RealAudioObjects.dll

تقوم بيئة التطوير بإنشاء الملف الآخر كربط بين التطبيق والملف

حيث يتكون الملف Interop.RealAudioObjects.dll

بجانب التطبيق بمجرد تشغيل التطبيق من بيئة التطوير

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

إذا لم تستطيع البيئة تكوين هذا الملف لسبب أو لآخر

يجب ان يوضع بجانب التطبيق

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


الواجب

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

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

..

سرمد الزهراء
03-23-2007, 06:58 PM
حطيها في أي مكان خارج أي إجراء , والأفضل تكون تحت هذه السطرين بعد الحاصرة يعني :

public partial class Form1 : Form
{
private ......



صحيح هذا مو موجود أخي بالصفحة كما قلت سابقا أي صفحة الشفرة ....الناتجة من الضغط على الأزرار مثل BUTTON ولكن في SOLUTION EXPLORER
توجد صفحة اسمهاProgram.csولما فتحتها وجدت Main...وبالتالي أقدر أحط كود بيها
أو التعريف بالمتغيرات هل هي خصوصية أو عمومية
لكن هذي الصفحة مختلفة عن الصفحة الي أحط بيها الشفرة ...
فهل هذا يسبب أي عله أو شي مو صح بالبرنامج ...

سرمد الزهراء
03-23-2007, 08:25 PM
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
لقد كنت مشغوله قليلا ....ولكن استطعت مذاكرة الدرس الرابع والخامس ...وأنا ان شاء الله بابتدي بالسادس ..
لكن وكالعادة ....ليس لي منقذ سواك ياأستاذي الكريم
بالنسبة لتطبيق الدرس الرابع ...مااشتغل عندي ..
انا أضفت الأداة اللي حملناها وطلعت لي في أسفل تعليمات الإضافة الإفتراضية
..بالعلم اني اضفت private Audio ap;
في الصفحة program.cs
وليس الصفحة اللي تطلع مباشرة من الضغط على الأزرار
المهم انه صار عندي خطأ بالصفحة ...
وانا حطيت الصفحة ...
ولذلك لم استطع عمل الواجب عشان هذا الخطأ
...ولما طبقت الدرس الخامس على مع الرابع ..طبعا لازم بيكون الرابع شغال عشان يكون الخامس بيشتغل ...
ولما أضفت private Video vp;
بالمثل صار تحتها خطأ وعطاني نفس المسج
يعني مااشتغلوا عندي
وانا راح أحط الخطأ الي عطاني اياه وراح احط البرنامج حقي ..بعد

سرمد الزهراء
03-23-2007, 09:11 PM
اعتذر اخي باين ان الموقع فيه بعض الأخطاء أو ماأدري ايش عشان كده ألحين مابقدر ارفع البرنامج من جهازي ..لأن بيطلع لي ايرر ...
ان شاء الله برفعه اذا اصطلح
السلام عليكم

سرمد الزهراء
03-23-2007, 09:26 PM
هذا البرنامج حقي حق الدرس الرابع والخامس مع بعض ..(التطبيق)
وليس واجب الدرس الرابع ..لكني شلت من البرنامج ملف Resources..لأن بيسوي حجمه كبير وبعدين مابقدرأرفعه للموقع....لكني راح أضعه بملف وينزب ثاني عشان ترجعه للبرنامج وتشوف البرنامج كامل
وان شاء الله يصبرك عليي ...
:smailes65:

moon1986
03-24-2007, 01:00 AM
مشكووووور أخيموضوع رائع

حماة النهضة
03-24-2007, 06:48 AM
حطيها في أي مكان خارج أي إجراء , والأفضل تكون تحت هذه السطرين بعد الحاصرة يعني :

public partial class Form1 : Form
{
private ......



صحيح هذا مو موجود أخي بالصفحة كما قلت سابقا أي صفحة الشفرة ....الناتجة من الضغط على الأزرار مثل BUTTON ولكن في SOLUTION EXPLORER
توجد صفحة اسمهاProgram.csولما فتحتها وجدت Main...وبالتالي أقدر أحط كود بيها
أو التعريف بالمتغيرات هل هي خصوصية أو عمومية
لكن هذي الصفحة مختلفة عن الصفحة الي أحط بيها الشفرة ...
فهل هذا يسبب أي عله أو شي مو صح بالبرنامج ...

طبعاً في شرحي للدروس بنعتمد على بيئة تطوير مختلفة شوية عن اللي عندك

وبالنسبة للملف Program.cs فهو فائدة بس يبدأ البرنامج , يعني مثل البوت للبرنامج

وتعريف المتغيرات الخاصة والعامة المفروض تكون في صفحة الشفرة ....الناتجة من الضغط على الأزرار مثل BUTTON

يعني هنا :

public partial class Form1 : Form
{
private ......

..
.

حماة النهضة
03-24-2007, 06:54 AM
مشكووووور أخيموضوع رائع


شكراً لكم على المرور

حماة النهضة
03-24-2007, 06:58 AM
السلا عليكم ورحمة الله وبركاته

اليوم موعد .....
..
.
الدرس السابع


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

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

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

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

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

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

ap.Duration;

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

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

rp.GetLength();

فهي تنتج رقم يحدد طول الملف بالملي ثانية مثلاً إذا أنتجت 50000 يعني أن طول الملف 50 ثانية

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

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

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

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

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

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

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

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

ap.CurrentPosition;

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

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

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

ap.CurrentPosition=60;

هذه التعليمة تقوم بنقل التشغيل إلى الثانية رقم 60 , أي أن التشغيل يقفز من موقعه إلى الثانية رقم 60

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

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

rp.GetPosition();

ترجع رقم يمثل رقم الملي ثانية الذي وصل إليها التشغيل فمثلاُ إذا كان طول الملف 10000 ملي ثانية

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

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

rp.SetPosition(60000);

هذه التعليمة تقوم بنقل التشغيل إلى الثانية رقم 60 , لاحظ أن جميع تعاملات مشغل rm تكون بالملي ثانية

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

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

الموقت Timer

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

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

http://www.7oma.com/csharp/images/image7-1.jpg

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

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

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

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

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

التطبيق في الرد التالي :

..

حماة النهضة
03-24-2007, 06:59 AM
التطبيق

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

أضف مؤقت Timer , ستلاحظ انه سيضاف إلى الشريط الأصفر تحت نافذة التصميم

http://www.7oma.com/csharp/images/image7-3.jpg

إختر المؤقت وقم بتعديل خاصية Interval إلى 1000 ,"ثانية واحدة"

وعدل قيمة الخاصية Enabled إلى True , هذه الخاصية تقوم بتشغيل أو تعطيل عمل الموقت

فإذا كانت القمية True فالمؤقت مفعل , أما إذا كانت False فهو معطل ولن يعمل

http://www.7oma.com/csharp/images/image7-4.jpg

أضف كائن التنقل TrackBar ليستخدم كأداة تنقل عبر الملف

http://www.7oma.com/csharp/images/image7-2.jpg

إختر كائن التنقل و عدل الخاصية TickFrequency إلى 0 لكي تختفي خطول القياس

وعدل الخاصية TickStyle إلى Both إذا أردت

http://www.7oma.com/csharp/images/image7-5.jpg

كائن التنقل يرجع قيمة بين الخاصيتين Minimum و Maximum

فمثلاً إذا كان Minimum = 0 و Maximum=50 فإن الخاصية Value سترجع قيمة بين 0 و 50

تمثل مكان المؤشر بالنسبة للكائن فمثلاً إذا كان المؤشر في منتصف الكائن فإن Value سترجع الرقم 25

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

ونعدل الخاصية Maximum إلى طول الملف حتى ترجع القمية Value رقم بين 0 وطول الملف

وبما أن طول كل ملف يختلف عن الملف الآخر , فإننا سنعدل الخاصية Maximum عند تحميل أي ملف

ولن نحتاج لتعديل الخاصية Minimum لأن قيمتها الإفتراضية هي 0

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

http://www.7oma.com/csharp/images/image7-6.jpg

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

إنقل هذا الكود إلى شفرة البرنامج مع مراعات أن يكون خارج أي إجراء آخر

void SetTrackBar()
{
if (type=="V")
{
trackBar1.Maximum=Convert.ToInt32(vp.Duration);
}
else if (type=="A")
{
trackBar1.Maximum=Convert.ToInt32(ap.Duration);
}
else if (type=="R")
{
trackBar1.Maximum=Convert.ToInt32(rp.GetLength());
}
}

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

فإذا كان نوع الملف صوت أو فيديو فإنا نأخذ طول الملف عبر الخاصية Duration

ثم نحول الرقم إلى عدد صحيح عبر كائن التحويل Convert.ToInt32

والرقم الناتج نحملة لخاصية Maximum في كائن التنقل , وبهذا مهما تنقلنا في الكائن فأن القيمة الناتجة ستكون بين 0 و طول الملف

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

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

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

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

OF.ShowDialog();
LoadFile(OF.FileName);
SetTrackBar();
PlayFile();

اللون الأزرق يمثل الزيادة التي أضفناها إلى الشفرة.

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

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

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

إنسخ الكود التالي :

if (type=="V")
{
vp.CurrentPosition=trackBar1.Value;
}
else if (type=="A")
{
ap.CurrentPosition=trackBar1.Value;
}
else if (type=="R")
{
rp.SetPosition(trackBar1.Value);
}

عند تغيير مؤشر كائن التغيير سيقوم المعالج بتنفيذ الكود السابق

trackBar1.Value ترجع رقم بين 0 و طول الملف على حسب موقع المؤشر

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

أما إذا كان rm فنعدل موقع التشغيل عبر الخاصية SetPosition.

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

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

إضغط مزدوجاً على كائن المؤقت لتنتقل إلى الكود الذي ينفذ كل ثانية وأنسخ الكود التالي :

if (type=="V")
{
trackBar1.Value=Convert.ToInt32(vp.CurrentPosition );
}
else if (type=="A")
{
trackBar1.Value= Convert.ToInt32(ap.CurrentPosition);
}
else if (type=="R")
{
trackBar1.Value=Convert.ToInt32(rp.GetPosition());
}

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

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

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

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

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

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

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

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

إضغط مزدوجاً على زر التقديم وأنقل الكود التالي :

if (type=="V")
{
vp.CurrentPosition=vp.CurrentPosition+20;
}
else if (type=="A")
{
ap.CurrentPosition=ap.CurrentPosition+20;
}
else if (type=="R")
{
rp.SetPosition(rp.GetPosition()+20000);
}

في الكود السايق نقوم بتعديل موقع التشغيل ليكون موقع التشغيل الحالي + 20 ثانية

أي أننا إذا ضغطنا على زر التقديم فان التشغيل سيقفز 20 ثانية إلى الأمام

يمكن وضع عدد أكبر من العشرين ثانية إذا أردت أو أصغر ..

لاحظ أنه إذا كان نوع الملف rm فإننا إضفنا إلى الموقع الحالي 20000 لأن مشغل rm يتعامل بالملي ثانية

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

الواجب

* أكتب كود زر التأخير ..

* قد يحدث خطأ في زري التقديم والتأخير إذا تم التأخير لأقل من صفر أو التقديم لأكثر من طول الملف

لذلك يجب وضع كود الزرين داخل جملة try هكذا:

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

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

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

ملاحظات:

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

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

و خاصية BackColor إلى Transparent

http://www.7oma.com/csharp/images/image7-7.jpg

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

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

http://www.7oma.com/csharp/images/image7-8.jpg

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



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

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

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

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

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

this.timer1.Tick+=new System.EventHandler(this.Timer1Tick);

كما في الصورة :

http://www.7oma.com/csharp/images/image7-9.jpg

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

وأضف هذا الإجراء وتأكد أنه خارج أي إجراء:

void Timer1Tick(object sender, System.EventArgs e)
{
if (type=="V")
{
trackBar1.Value=Convert.ToInt32(vp.CurrentPosition );
}
else if (type=="A")
{
trackBar1.Value= Convert.ToInt32(ap.CurrentPosition);
}
else if (type=="R")
{
trackBar1.Value=Convert.ToInt32(rp.GetPosition());
}
}

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

..

اماني الاماني
03-24-2007, 08:48 AM
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
لوسمحت أخي الكريم أنا لا أدرس معاكم الدروس لكن ربع تعاون ما ذلو
يا أستاذ حماة النهضة ممكن تساعدنا كيف شفرة أخذ الصور مخزنة في قاعدة البيانات(اكسس) الي الفيجوال 2005
وشكر كل الشكر علي المساعدة وأن الله لايضيع أجر من أحسن عملا

major_47
03-24-2007, 09:40 AM
مشكور أخى العزيز

حماة النهضة
03-24-2007, 11:18 AM
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
لقد كنت مشغوله قليلا ....ولكن استطعت مذاكرة الدرس الرابع والخامس ...وأنا ان شاء الله بابتدي بالسادس ..
لكن وكالعادة ....ليس لي منقذ سواك ياأستاذي الكريم
بالنسبة لتطبيق الدرس الرابع ...مااشتغل عندي ..
انا أضفت الأداة اللي حملناها وطلعت لي في أسفل تعليمات الإضافة الإفتراضية
..بالعلم اني اضفت private Audio ap;
في الصفحة program.cs
وليس الصفحة اللي تطلع مباشرة من الضغط على الأزرار
المهم انه صار عندي خطأ بالصفحة ...
وانا حطيت الصفحة ...
ولذلك لم استطع عمل الواجب عشان هذا الخطأ
...ولما طبقت الدرس الخامس على مع الرابع ..طبعا لازم بيكون الرابع شغال عشان يكون الخامس بيشتغل ...
ولما أضفت private Video vp;
بالمثل صار تحتها خطأ وعطاني نفس المسج
يعني مااشتغلوا عندي
وانا راح أحط الخطأ الي عطاني اياه وراح احط البرنامج حقي ..بعد


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

الخطأ يا أختي بكل بساطة أن المتغيرات ap و vp لازم تنضاف في صفحة الكود اللي بيستخدموا فيها

يعني في الصفحة الناتجة من ضغط بعض الأدوات مثل الزر

أما الملف Programe.cs فعمله بس بدء البرنامج

المفروض تحذفي التعريفات من الملف Programe.cs

وتحطيها في ملف Form1.cs هنا :

namespace تطبيق_2
{
public partial class Form1 : Form
{
private Audio ap;
private Video vp


ولا تنسي ما تضيفي عبارة using في ملف Form1.cs هنا :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.DirectX.AudioVideoPlayback;

وأي سؤال آخر حاضرين , ربنا يوفقك
..
.

حماة النهضة
03-24-2007, 06:22 PM
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
لوسمحت أخي الكريم أنا لا أدرس معاكم الدروس لكن ربع تعاون ما ذلو
يا أستاذ حماة النهضة ممكن تساعدنا كيف شفرة أخذ الصور مخزنة في قاعدة البيانات(اكسس) الي الفيجوال 2005
وشكر كل الشكر علي المساعدة وأن الله لايضيع أجر من أحسن عملا

أبشر يا أخي ولا يهمك إن شاء الله ما نقصر معك

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


http://www.7oma.com/csharp/screen.jpg


تحميل البرنامج من هنا (http://www.7oma.com/csharp/Image.zip)

ربنا يوفقك , ولا تنسونا من صالح دعائكم

..

veto_44
03-25-2007, 08:34 AM
شكرا لك اخ حمادة وعدت واوفيت ما شاء الله عليك متابع
بالدروس بشكل منتظم وتلبي طلبات جميع الاخوان والدروس
مميزة للغاية ومحتواها مفيد جدا جعلها الله بميزان حسناتك
والموضوع يستحق ان يكون بالمقدم امام الجميع ننتظر منك
باقي الدروس وباذن الله تكون دورة متكاملة وعندما اجد القليل
من الوقت ساقوم بحفظ جميع الدروس بالمرفقات في حال تعطل
مواقع رفع الصور دمت بخير وعافية

سرمد الزهراء
03-25-2007, 11:22 PM
أنا فرحانه ...الحمد الله صار معي
...وصار بيفتح عشان اختار ملف واشغله ....
لكن بيعمل لي شوي البرنامج ماأدري ايش ...أول ماأشغله أحيانا ...وليس في كل مرة
انا راح احط اله بيطلع لي في ملف وورد ..
وعندي اسئلة ...او استفسارات
انا لما فتحت ملف فيديو اشتغل ....وشاهدته ...لكن لما انتهى وخلص الملف ...عشان اشغل ملف ثاني صوتي أو فيديو هل لازم اعود اعمل مرة ثانية تشغيل ولا لا
لأني فتحت ملف ثاني مارضى بيشتغل على الأول.. ...قلت يمكن لازم اسكره اول ثم مرة ثانية أفتحه ...أو هذي الشغلة بتحتاج كود
ولما فتحت ملف صوتي ..وبعدين فتحت بعده ملف فيديو ..عادي بيشغله ...لكن لما أرد وافتح فوقه ملف صوتي مابيرضى ....ايكون في سبب ...
....

حماة النهضة
03-25-2007, 11:37 PM
شكرا لك اخ حمادة وعدت واوفيت ما شاء الله عليك متابع
بالدروس بشكل منتظم وتلبي طلبات جميع الاخوان والدروس
مميزة للغاية ومحتواها مفيد جدا جعلها الله بميزان حسناتك
والموضوع يستحق ان يكون بالمقدم امام الجميع ننتظر منك
باقي الدروس وباذن الله تكون دورة متكاملة وعندما اجد القليل
من الوقت ساقوم بحفظ جميع الدروس بالمرفقات في حال تعطل
مواقع رفع الصور دمت بخير وعافية




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

نشكر لكم تقدير جهدنا وتفضلكم بتثبيت موضوعنا

وبإذن الله نكون عند حسن ظنكم إلى النهاية

حتى يحقق هذا المشروع المتواضع ما بدأ لأجله

والشكر للأعضاء المتفاعلين معنا في التطبيق


حماة النهضة

سرمد الزهراء
03-25-2007, 11:40 PM
وانا ألحين ان شاء الله رايحة احط تطبيق الدرس الخامس ...لكن عشان حجمه كبير راح ارفعه في كذاملف وينزب...راح أقسمه ..لكن بعدين ممكن تجمعهم وتشوفهم مع بعض ..
وان شاء الله أرسل باقي الواجبات

سرمد الزهراء
03-26-2007, 12:22 AM
[B]لدي استفسار آخر ...ولكن بخصوص الفيجوال والسي شارب آيضا ..
تذكر أخي الكريم ...ماطلبته منك بشأن الفلاش ....الحمد الله انعمل لي بمساعدتك ومساعدة استاذتي أيضا ..ولكن الفضل الكبير يعود لله سبحانه وتعالى ثم لك ..
لأني كنت اول ماجربتها بعد ان أعطيتني المشروع اله عملته لي ..حاولت وحاولت وانضافت لي أداة الفلاش ..لكن لما عملتها مرة ثانية ...لم تضاف وطلعت لي نفس الرساله ولذلك لجأت الى اضافة الأداتين إلى ملف obj و bin ولما رحت أضيفها انضافت الحمد الله
هذه مشكله وعدت بفضل الله وفضلكم ...
انا أريد أعرف شرح شي من الكود الى الفلاش..
flash1.loadMovie(0, CurDir() + "/هُدَى السَالِكينْ.swf")
flash1...هذا اسم الأداة ..صح
loadMovie....هذا يعني تحميل ملف
0...الصفر ماذا يعني هنا في الشفرة ؟
CurDir....وهذه الكلمة ماتعني؟
"/هُدَى السَالِكينْ.swf"....هذا يعني مسار الفلاش ...
الآن بالنسبة للسي شارب لما أردنا أن نضيف ملف فيديو وضعنا الهPanel الحاضن لكي يخرج فيه ملف الفيديو ..هنا في الفيجوال بيسك أضفنا أداة الفلاش لتكون كالحاضن أيضا كما أعتقد لكي يخرج فيها الفلاش ...صح
هناك في السي شارب عملنا اله كود وايضا استعملنا الأحداث لكي نجعله ملئ الشاشة ثم من الضغط على أي زر في لوحة المفاتيح نستطيع ترجيعه للحجم الحاضن ..
هل من الممكن اعمل نفس الطريقة ....في الفيجوال بيسك لأداة الفلاش ولا لا ...
انني أجعلها مباشرة عند الضغط على زر التحميل تصبح ملئ الشاشة ومن ثم عند الضغط على أي زر بلوحة المفاتيح ترجع لحجم الحاضن
طبعا أكيد مع مراعاة الأختلافات البسيطة بين أكواد السي شارب والفيجوال ..

سرمد الزهراء
03-26-2007, 12:29 AM
....مشكور أخي واستاذي الكريم ..وان شاء الله نكون قد هذه الدروس وأكثر بتوفيق من الله
ومنك ....وان شاء الله تكون من الموفقين ...برحمته جل شأنه انت ووالديك ومن تحب إن شاء الله ...:)
إلى الآن بقي علي الدرس السادس والسابع ...مع تطبيق الدرس الرابع
ان شاء الله أكملهم ...وأرسل الواجبات ...بيهم
السلام عليكم ورحمة الله وبركاته

حماة النهضة
03-26-2007, 04:39 AM
وانا ألحين ان شاء الله رايحة احط تطبيق الدرس الخامس ...لكن عشان حجمه كبير راح ارفعه في كذاملف وينزب...راح أقسمه ..لكن بعدين ممكن تجمعهم وتشوفهم مع بعض ..
وان شاء الله أرسل باقي الواجبات


ماشاء الله التطبيق رائع 100% , إن شاء الله تستمري معانا للآخر

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

هذا التحذير لأن بيئة التطوير بتظن أنو ممكن يحصل خطأ

هي رسالة مزعجة والأفضل ما تظهر مرة ثانية , وعشان ماتظهر روحي على قائمة Debug وبعدين Exeptions

http://www.7oma.com/csharp/debugexeption.JPG

بتظهر لك نافذة دوسي على علامة زائد اللي أمام هذا السطر :

http://www.7oma.com/csharp/exeption.JPG


وبعدين إبحثي عن Loader Lock , وشيلي علامة الصح اللي أمامه , ودوسي OK


http://www.7oma.com/csharp/loaderlock.JPG

واللي قلتي أنو ملف الفيديو ما بيشتغل بعد الصوت أو العكس , فكل هذه العيوب بنصلحها إن شاء الله في الدروس القادمة

وربنا يوفقك

..

NewYac
03-27-2007, 09:53 AM
السلام عليكم
مبلدرة طيبة.

NewYac
03-27-2007, 09:59 AM
السلام عليكم
مبلدرة طيبة.

اماني الاماني
03-27-2007, 10:12 AM
السلام عليكم ورحمة الله وبركاته
استاذي العزيز أود أن أسألك عن الفيجوال بيسك دوت نت 2005
عندما نضيف panel يظهر بشكله التقليدي نريد تغيير شكله هل ذلك ممكن لو سمحت
شاكرة لك على مساعداتك السابقة وعلى قاعدة البيانات التي عملتها لي
وسوف لن أنسى ذلك لكم مثابين إنشاء الله
والسلام عليكم ورحمة اللة وبركاته

#Mahmoud.C
03-27-2007, 01:02 PM
شكرا اخي الكريم
منتظرين بدايه الدروس

حماة النهضة
03-27-2007, 02:03 PM
السلام عليكم ورحمة الله وبركاته

مرحبا شباب ..

أختي سرمد

flash1...هذا اسم الأداة ..صح
نعم إسم الأداة

loadMovie....هذا يعني تحميل ملف
هذا إجراء تحميل الملف

0...الصفر ماذا يعني هنا في الشفرة ؟
الصفر هنا يعني الطبقة المراد تشغيلها

الطبقة يعني Layer في الفلاش كل مشروع فيه طبقة أو أكثر

والملف عادة فيه طبقة واحدة بس وهي ترتيبها 0 لذلك بنكتب صفر

لكن إذا كان فيه ملفات فلاش فيها أكثر من طبقة , ممكن يتغير هذا الصفر

CurDir....وهذه الكلمة ماتعني؟
هذه الكلمة هي إختصار لكلمة Current Directory يعني المسار الحالي

التعلمية CurDir تنتج نص يمثل المسار الحالي اللي موجود فيه البرنامج exe

وبما أن ملف الفلاش موجود بجانب البرنامج إستفدنا من هذه الدالة عشان نعرف مسار ملف الفلاش كامل

الآن بالنسبة للسي شارب لما أردنا أن نضيف ملف فيديو وضعنا الهPanel الحاضن لكي يخرج فيه ملف الفيديو ..هنا في الفيجوال بيسك أضفنا أداة الفلاش لتكون كالحاضن أيضا كما أعتقد لكي يخرج فيها الفلاش ...صح
صحيح بالضبط أداة الفلاش مثل الكائن الحاضن في تطبيقنا

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

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

روحي للتصميم وإختاري أداة الفلاش , ومن جدول الخصائص غيري الخاصية Dock إلى Fill هكذا :

http://www.7oma.com/csharp/Dock.JPG

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

الله معك أختي ...


..][ حمـاة النهـضة ][..

حماة النهضة
03-27-2007, 02:09 PM
السلام عليكم
مبلدرة طيبة.
وعليكم السلام ورحمة الله وبركاته
مرحبا بك أخي
:)


شكرا اخي الكريم
منتظرين بدايه الدروس
العفو^^


---------------------------------------

يتبع الدرس الجديد لحتى ما نتأخر عليكم ...

حماة النهضة
03-27-2007, 02:24 PM
الدرس الثامن

المصفوفات:

المصفوفات هي عبارة عن مجموعة متغيرات من نفس النوع متراصة ومترابطة داخل كائن Array

ويتم الوصول لأي عنصر في هذه المجموعة من خلال ترتيبة في المجموعة Index

مثلاً : مصفوفة أيام الأسبوع تعتبر مجموعة متغيرات من نوع نص

و مصفوفة أيام الشهر تعتبر مجموعة متغيرات من نوع رقم ..

يتم تعريف المصفوفة بإحدى ثلاث طرق :

1-طريقة تعريف إسم المصفوفة فقط


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

string[] days;

الكود السابق يعرف إسم days لمصفوفة عناصرها من نوع نص

لاحظ القوسين المربعين بعد كلة string دلالة على أن days تمثل مصفوفة نصوص وليس نص

2-طريقة تعريف المصفوفة وتحديد عدد عناصرها

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

string[] days= new string[6];

لأن المصفوفة هي كائن وجب علينا تعريفه بإستخدام عبارة new

والرقم 6 بين قوسي تعريف الكائن هو ترتيب آخر عنصر في المصفوفة

ومن خلاله نعرف عدد عناصر المصفوفة , فالمصفوفة السابقة عدد عناصر 7 عناصر

لأن أول عنصر في المصفوفة ترتيبة صفر وليس 1

أي أن الكود السابق عرف مصفوفة إسمها days تحتوي على 7 عناصر من نوع نص

لكن هذه الطريقة لا تحمل قيم لعناصرها , أي أنها تحتوي على 7 نصوص فارغة

3-طريقة تعريف المصفوفة وتحميل قيم لعناصرها

هذه الطريقة تعرف وتنشئ كائن المصفوفة وتحمل قيم لجميع عناصر المصفوفة:

string[] days= new string[]{"السبت","الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة"};


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

بإدخالها كمجموعة نصوص بين حاصرتين تفصل بين كل نص وآخر علامة ,

لاحظ أنا لم نحدد عدد عناصر المصفوفة حيث سيقوم المعالج بتحديدها آلياً من خلال عد النصوص المدخلة بين الحاصرتين

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

الوصول إلى عناصر المصفوفة:

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

والترتيب في المصفوفات يبدأ من الصفر , أي أن أول عنصر في المصفوفة ترتيبة صفر

فمثلاً في مصفوفة الأيام , يوم السبت ترتيبة صفر و الأحد ترتيبة 1 ... والجمعة ترتيبة 6

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

ماذا لو أردنا إظهار رسالة تخبرنا بالعنصر الذي ترتيبة 4 في مصفوفة الأيام :

string[] days= new string[]{"السبت","الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة"};
MessageBox.Show(days[4]);

لاحظ كيف تم الوصول إلى العنصر الرابع في مصفوفة days من خلال العبارة days[4]

الكود السابق ينتج هذه الرسالة :

http://www.7oma.com/csharp/images/image8-1.jpg

يمكن أيضاً تعديل أي عنصر من عناصر المصفوفة من خلال ترتيبة في المصفوفة :

string[] days= new string[]{"السبت","الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة"};
days[4]="الأربعاء بعد التعديل";
MessageBox.Show(days[4]);

في السطر الثاني غيرنا قيمة العنصر الذي ترتيبة 4 إلى "الأربعاء بعد التعديل"

الكود السابق ينتج الرسالة التالية :

http://www.7oma.com/csharp/images/image8-2.jpg

القوائم

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

إلا أن لها عدداً من العيوب التي سعت C#2005 لحلها من خلال إدخال نوع جديد من هياكل البيانات

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

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

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

for(int i=0;i<days.Lehgth;i++)
{
if (days[i]=="السبت")
{
MessageBox.Show("هذا يوم السبت");
}
}

هيكل البيانات الجديد الذي تفادى عيوب المصفوفات هو القائمة

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

List<string> dayslist;


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

List<string> dayslist=new List<string>();

لاحظ أننا لم نحدد لها حجم أو عدد لعناصر لأن حجمها متغير , حيث تستطيع أن تضيف لها عنصر هذا:

dayslist.Add("السبت");

كما أنك تستطيع أن تضيف لها عناصر مصفوفة كاملة:

dayslist.AddRange(days);

الكود السابق يضيف عناصر المصفوفة days إلى القائمة dayslist

وتستطيع أن تحذف منها عنصر هكذا :

dayslist[5].Remove();

الكود السابق يحذف العنصر الذي ترتيبة 5 من القائمة

كما أنك تستطيع البحث عن عنصر ما هكذا :

dayslist.Contains("السبت");

الدالة السابقة سترجع القيمة true إذا كان العنصر موجود في القائمة

أو ترجع القيمة false إذا لم يوجد العنصر في القائمة

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

وهذا ما سنستخدمه في تطبيقنا

يتبع التطبيق في الرد التالي:

حماة النهضة
03-27-2007, 02:43 PM
التطبيق:

تشغيل أكثر من ملف

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

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

إفتح تطبيق الدرس السابق , ومن صندوق الأدوات قم بسحب أداة القائمة :

http://www.7oma.com/csharp/images/image3-1.jpg

من خلال الخاصية (Name) في جدول الخصائص قم بتغيير إسم القائمة من ListBox1 إلى pl

ليسهل التعامل معها من الشفرة , هذه هي قائمة التشغيل

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

http://www.7oma.com/csharp/images/image8-3.jpg

قم بتحديد إداة OF في الشريط الأصفر تحت النافذة:

http://www.7oma.com/csharp/images/image8-4.jpg

وإذهب إلى جدول الخصائص وقم بتغيير خاصية Multiselect إلى True

http://www.7oma.com/csharp/images/image8-5.jpg

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

http://www.7oma.com/csharp/images/image8-6.jpg

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

كائن القائمة موجود في فضاء الأسماء System.Collections.Generic لذلك يجب إضافة عبارة using لتضمين كائنات ودوال الفضاء

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


using System.Collections.Generic;


إذهب إلى شفرة البرنامج وقم بكتابة الكود التالي تحت كود تعريف كائنات Audio و Vedio و type :


public List<string> albume=new List<string>();


http://www.7oma.com/csharp/images/image8-7.jpg

تحميل قيم القائمة

أداة إختيار الملفات OF تحتوي على خاصية إستخدمناها في الدروس السابقة

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

لكن ماذا لو إختيار المستخدم أكثر من ملف واحد ؟

لحسن الحظ يوجد خاصية أخرى إسمها FileNames "بزيادة حرف s عن الخاصية الأخرى"

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

وعناصر المصفوفة من نوع نص لخزن مسارات الملفات المختارة

فمثلاً لو إختار المستخدم 3 ملفات سيكون عدد عناصر هذه المصفوفة 3

إذهب إلى التصميم وإضغط مزدوجاً على زر فتح ملف ستجد الكود التالي :

OF.ShowDialog();
LoadFile(OF.FileName);
SetTrackBar();
PlayFile();

وغيره إلى الكود إلى التالي :

OF.ShowDialog();
albume.AddRange(OF.FileNames);
LoadFile(albume[0]);
FillList();
SetTrackBar();
PlayFile();

في السطر الثاني قمنا بتحميل جميع عناصر المصفوفة OF.FileNames إلى القائمة albume

والمصفوفة OF.FileNames كما شرحنا سابقاً تحتوي على عناصر تحمل مسارات الملفات المختارة

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

في السطر الثالث قمنا بتحميل العنصر الذي ترتيبة صفر من قائمة albume حتى يتم تشغيله

وفي السطر الرابع إستدعينا إجراء FillList الذي يقوم بملئ قائمة التشغيل بأسماء الملفات في عناصر القائمة albume كما سنشرح في الفقرة التالية

إجراء FillList

هذا الإجراء سيقوم بنقل جميع عناصر القائمة albume إلى قائمة التشغيل

حتى يسهل الوصول للمقطع الصوتي المراد تشغيلة ,

لكن , القائمة albume تحتوي على مسارات الملفات كاملة , وقائمة التشغيل لا تتسع لكتابة مسار الملف كاملاً

نريد فقط أسماء الملفات في قائمة التشغيل

لحسن الحظ يوجد كائن في إطار العمل داخل الفضاء System.IO يقوم بهذا العمل

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

إذا كان مسار الملف هو :

c:\sounds\s1\track.mp3


فالدالة GetFileName تأخذ المسار كامل وترجع القيمة التالية :

track.mp3

يتم إستدعاء الكائن Path من خلال كتابة عنوناه الكامل :

string FileName;
FileName=System.IO.Path.GetFileName("c://sounds//s1//track.mp3");
MessageBox.Show(FileName);


في السطر الأول عرفنا متغير من نوع نص ليحمل نتيجة الدالة GetFileName

في السطر الثاني قمنا بإستدعاء الدالة GetFileName من خلال كتابة عنوانها كاملاً

وأسندنا ناتج الدالة للمتغير FileName

السطر الثالث سينتج رسالة مكتوب عليها :

track.mp3

بعد أن شرحنا عمل الدالة GetFileName سنحتاج في هذا الإجراء أيضاً لدوارة تقوم بالمرور على كافة عناصر القائمة albume

يمكنك الرجوع للدرس الثالث ومراجعة الدوارات

تبدأ الدوارة من 0 إلى عدد عناصر القائمة , حيث يمكن معرفة عدد عناصر القائمة من خلال الخاصية Count :

albume.Count;

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

void FillList()
{
pl.Items.Clear();
for(int i=0;i<albume.Count;i++)
{
string FileName;
FileName=System.IO.Path.GetFileName(albume[i]);
pl.Items.Add(FileName);
}
}

الأمر pl.Items.Clear يقوم بتنظيف القائمة من أي عناصر موجوده مسبقاً حتى تستعد لإدخال العناصر الجديدة

الكود داخل حاصرتي for سيتم تنفيذه بعدد عناصر القائمة albume

في السطر الأول من الكود داخل حاصرتي for , قمنا بتعريف الكائن الذي سيحمل نتيجة الدالة GetFileName

وفي السطر الثاني إستدعينا الدالة GetFileName ومررنا لها العنصر الذي ترتيبة i من قائمة albume

طبعاً في أول مرة يتم تنفيذ الكود سيكون i يساوي صفر , والمرة الثانية 1 والثالثة 2

وهكذا فإن قيمة i متغيرة من مرة لأخرى

في السطر الثالث أضفنا إسم المكلف الناتج إلى قائمة التشغيل pl

..

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

ويبدأ البرنامج بتشغيل أول ملف في القائمة :

http://www.7oma.com/csharp/images/image8-8.jpg

إختيار الملف من قائمة التشغيل

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

أنسخ الكود التالي حيث مؤشر الفارة " بين حاصرتي إجراء plSelectedIndexChanged

StopFile();
LoadFile(albume[pl.SelectedIndex]);
SetTrackBar();
PlayFile();

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

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

والسطر الثاني يأخذ ترتيب العنصر المختار من قائمة التشغيل من خلال الخاصيةSelectedIndex

ويقوم بتحميل الملف من قائمة albume الذي ترتيبة هو نفس ترتيب العنصر المختار في قائمة التشغيل

السطر الثالث والرابع تم شرحهما سابقاً ..

الآن قم بتشغيل البرنامج وإختر أكثر من ملف , سيتم نقل إسماء الملفات لقائمة التشغيل

ثم تشغيل أول ملف في القائمة , وعند إختيار ملف آخر من قائمة التشغيل سيتوقف تشغيل الملف الحالي

ويبدأ تشغيل الملف المختار

خطأ شائع:

أحيانا يقم المؤقت بتغيير قيمة شريك التنقل قبل أن يتم تحميل الملف

وهذا يسبب خطأ لأن قيم شريط التنقل الكبرى والصغرى لم يتم ضبتها بعد

ولا يجوز تغيير قيمة شريك التنقل قبل ضبط قيمه الصغرى والكبرى

لمعالجة الخطأ إذهب إلى شفرة إجراء المؤقت Timer1Tick :

void Timer1Tick(object sender, System.EventArgs e)
{

if (type=="V")
{
trackBar1.Value=Convert.ToInt32(vp.CurrentPosition );
}
else if (type=="A")
{
trackBar1.Value= Convert.ToInt32(ap.CurrentPosition);
}
else if (type=="R")
{
trackBar1.Value=Convert.ToInt32(rp.GetPosition());
}
}

وأضف إلى بدايتها الكود التالي:

if (trackBar1.Maximum == 0)
{
SetTrackBar();
}

وهذا الكود يفحص ما إذا كانت قيمة شريط التنقل الكبرى قد تم ضبطها

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

حيث يصبح شكل الإجراء هكذا بعد وضعه داخل عبارة try لتفادي الأخطاء الأخرى :

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());
}
}
catch
{
}
}

الواجب

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

. نهاية الدرس الثامن .


موفقين يارب ..


--------------------------------------------

أخي imadin

إن شاء الله كل شيء تمام

نفتقد مشاركاتك معنا .. لعل الأمر خير

ويارب تكون ملاحق معنا في الدروس

:)



..][ حمـاة النهـضة ][..

imadin
03-27-2007, 03:42 PM
الحمد لله خير حصل بعض التعطيل فقط ،لكن يلزم لي إعادة الدروس لأني تخربطت مرة في الكود وفسد كل شيء وقمت بإعادة الرابع والخامس وان شاء الله أتدارك بسرعة وأصل معكم
وشكرا على الملاحظة

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

حماة النهضة
03-27-2007, 04:56 PM
السلام عليكم ورحمة الله وبركاته
استاذي العزيز أود أن أسألك عن الفيجوال بيسك دوت نت 2005
عندما نضيف panel يظهر بشكله التقليدي نريد تغيير شكله هل ذلك ممكن لو سمحت
شاكرة لك على مساعداتك السابقة وعلى قاعدة البيانات التي عملتها لي
وسوف لن أنسى ذلك لكم مثابين إنشاء الله
والسلام عليكم ورحمة اللة وبركاته
وعليكم السلام ورحمة الله وبركاته

مرحبا أختي ..

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

يعني من ناحية الألوان أو شكل الحدود أو أيش ؟ وضحي شوية أختى

وعادي أن شاء الله بنساعدكم على قد ما نقدر

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


--------------------------------------------

أخي imadin

الحمد لله خير حصل بعض التعطيل فقط ،لكن يلزم لي إعادة الدروس لأني تخربطت مرة في الكود وفسد كل شيء وقمت بإعادة الرابع والخامس وان شاء الله أتدارك بسرعة وأصل معكم
وشكرا على الملاحظة
الحمد لله ^^
لو في أي مشاكل لا تتردد أبدا إحنا موجودين

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

أي شيء إحنا موجودين ..

--------------------------------------------

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


..][ حمـاة النهـضة ][..

amgadmohamad
03-27-2007, 05:59 PM
i am with you man forever
thanks

hisham_email2
03-28-2007, 01:20 AM
جزاك الله خيرا يا أخى وشكرا على أمل المزيد والاستمرار

lapa
03-28-2007, 01:19 PM
لدي مشكلة صغيرة:
لدي Form1بهاButton1 و Form2 بها Textbox1
اريد معرفة كيف يمكن ان اكتب في TextBox1
إنطلاقا من Button1

---------------------------------------------------
Best Regards.

اماني الاماني
03-28-2007, 10:03 PM
اقصد أخي الفاضل أن بس نضع panel تظهر بشكل مستطيل وشكلها عادي وممل أبغي اعمل علي حوافها أشكال وحركات أبغيها تكون جميلة وانت وشطارتك وحركاتك الحلوة وفضلك هذا ما انساه مدى الحياة

اماني الاماني
03-28-2007, 10:23 PM
أسناذي الفاصل اسفة علي ازعاج مرة ثانية لكن الغريق يتشبث بحبال النجاة ما اطول عليك كيف اعمل ملف تنفيدي لبرنامج معمول بفيجوال بيسك (للعبة البزل) والف شكر علي المساعدات السابقة

كوكاز
03-29-2007, 07:31 PM
شكرا على المبادرة ومن الله التوفيق.

سرمد الزهراء
03-29-2007, 09:43 PM
السلام عليكم ورحمة الله وبركاته
جميل جدا الدرس السادس
:smailes65: .....
مع انه يتضمن التركيز بعض الشي والأنتباه الا انه جيد جدا والحمد الله
وكل هذا بفضل الله وفضلكم ..استاذي الكريم
....وهذا واجب الدرس السادس ....
موفقين الجميع ان شاء الله

imadin
03-30-2007, 09:02 PM
بقي الدرس الثامن
ان شاء الله أدرسه وأرفع التطبيق كامل

حماة النهضة
03-31-2007, 12:13 AM
السلام عليكم

lapa

أخي العزيز , لا أعرف هل كان هذا مقصوداً منك أم لا

لكن هلا تكرمت وأزلت الرابط من ردك :)

أما بالنسبة لسؤالك فالطريقة سهلة جداً , إذهب إلى خصائص TextBox1 وعدل الخاصية Modifiers إلى public

وعندما تريد الوصول إليه من فورم آخر أكتب إسم الفورم متبوعاً بنقطة وإسم مربع النص

هكذا بالسي شارب :

Form2 frm=new Form2();
frm.TextBox1.Text="This Is from Form1";

بالفي بي :

Dim frm as New Form2
frm.TextBox1.Text="This Is from Form1"




اماني الاماني

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

للأسف بيئة الدوت نت بما أنها بيئة إحترافية فهي لا تهتم بالمظاهر كثيرا

لكن مع ذلك يوجد طرق أخرى كثيرة يمكن للمبرمج أن يستخدمها

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

إختاري البانيل وغيري الخاصية BackColor إلى Transparent من التبويب Web

وأنشأي صورة بالفوتوشوب للبانيل وضمنيها كل الحركات التي تريدينها

وإحفظي الصورة بإمتداد Gif أو Png بحيث تكون الخلفية شفافة

ثم من خصائص البانيل إختاري الصورة كخلفية من الخاصية BackGroundImage,


وإختاري Stretch من خاصية BackgroundImageLayout

مثلا لو كونا فورم هذه خلفيتة :

http://www.bramjnet.com/vb3/attachment.php?attachmentid=74561&stc=1&d=1175296212

وأضفنا بانيل وضبطنا خصائصة مثل ما وضحت , وعملنا له هذه الخلفية :

http://www.bramjnet.com/vb3/attachment.php?attachmentid=74558&stc=1&d=1175296212

سيكون الشكل النهائي للفورم هكذا :

http://www.bramjnet.com/vb3/attachment.php?attachmentid=74560&stc=1&d=1175296212

طبعاً يمكن أن تضيفي حركات لخلفية البانيل بما أنها من نوع Gif

أسناذي الفاصل اسفة علي ازعاج مرة ثانية لكن الغريق يتشبث بحبال النجاة ما اطول عليك كيف اعمل ملف تنفيدي لبرنامج معمول بفيجوال بيسك (للعبة البزل) والف شكر علي المساعدات السابقة

إذا كان بالفيجوال بيسك دوت نت , فالملف التنفيذي يتكون بمجرد عمل تشغيل للبرنامج

والملف التنفيذي موجود في مجلد Debug الموجود في مجلد bin في مجلد المشروع

لاحظي أنه يجب لتشغيل البرنامج في كمبيوتر آخر أن يكون إطار عمل .NET Framework مثبتاً على الجهاز



سرمد الزهراء

ما شاء الله , سعدت بتطبيقك , أجدتِ فعلاً

واصلي تألقك :)



imadin

ننتظرك أخي , ولنؤجل قليلاً الدرس التاسع

لتتلافوا التأخير

دمتم بخير

..

اماني الاماني
03-31-2007, 11:28 AM
السلام عليكم ورحمة الله وبركاتة
بعد السلام والتحية نشكركم الشكر الجزيل علي المساعدة يا حماة النهضة
اخي الفاضل انت ما افهمت علي بخصوص الملف التنفدي انا اريد ان يشتغل البرنامج في اي كبيوتر ولايكون موجود فيه اطار العمل. توجد بعض اللعاب تشتغل في الكبيوترات لاتوجد فيها حتى الفيجوال ولا مجموعة ماكروسوفت والشكور الف الشكر علي المساعدة

حماة النهضة
03-31-2007, 03:13 PM
السلام عليكم ورحمة الله وبركاتة
بعد السلام والتحية نشكركم الشكر الجزيل علي المساعدة يا حماة النهضة
اخي الفاضل انت ما افهمت علي بخصوص الملف التنفدي انا اريد ان يشتغل البرنامج في اي كبيوتر ولايكون موجود فيه اطار العمل. توجد بعض اللعاب تشتغل في الكبيوترات لاتوجد فيها حتى الفيجوال ولا مجموعة ماكروسوفت والشكور الف الشكر علي المساعدة

أختي المفروض أنه من المستحيل أن يعمل إي تطبيق .NET بدون إطار العمل

وإصدارات الوندوز الحديثة مثل الفيستا تحتوي على إطار العمل مع الوندوز

فلو كان الكمبيوتر يعمل على نظام تشغيل فيشتا , فلا يحتاج إلى إطار العمل لتشغيل تطبيقات .NET

وإطار عمل .net يشبه كثير Java Virtual machine حيث لا يمكن أن يعمل أي تطبيق جافا بدونها

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

بحيث ان التطبيق لن يحتاج إلى إطار العمل مهما كان نظام التشغيل

ومن هذه البرامج :

RemoteSoft's linker and mini-deployment tool (http://www.remotesoft.com/linker/index.html)

Thinstall Studio (https://thinstall.com/solutions/net_virtual.php)

Xenocode (http://www.xenocode.com/)

..

samirsamir1
04-01-2007, 03:53 PM
السلام عليكم ورحمة الله وبركاته

أهلا بجميع أعضاء ومشرفي وزوار برامج نت .. إبداع وتميز ... :smailes103:

أقدم لكم بموضوعي الأول دروس مباشرة في البرمجة بلغة C#2005 وأرحب بأي أسئلة أواستفسارات تفيدكم .. :smailes67:

والدروس راح تكون مبسطه جدا لحتى الكل يشارك ويفهم

إن شاء الله بيكون في كل أسبوع درس

بحطة يوم الثلاثاء

و بيكون كل درس مقسم لقسمين

قسم الشرح

وقسم التطبيق

بيكون هدفنا من الدروس عمل مشروع برنامج متكامل لتشغيل الصوت والفيديو

برنامج زي الجيت أوديو , عارفينه

وفي كل درس نبدأ بشرح الفكرة أو المفهوم أو القاعدة

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

ونستمر هيك كل أسبوع لحد ما نخلص المشروع

بس قبل ما نبدا بالدروس فيه برنامجين لازم تحملوهم

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

البرنامج الأول (http://www.microsoft.com/downloads/details.aspx?familyid=0856eacb-4362-4b0d-8edd-aab15c5e04f5&displaylang=en)

افتحوا هذا اللينك بتلاقوا زر مكتوب عليه DownLoad اضغطوا عليه وانتظروا لحد ما تظهر رسالة الحفظ واختاروا حفظ الملف

البرنامج الثاني هو بيئة التطوير , يعني المكان اللي بنكتب فيه البرنامج ونجربه و نبنية

بيئة التطوير تتنزل من هذا اللينك

البرنامج الثاني (http://sourceforge.net/project/downloading.php?groupname=sharpdevelop&filename=SharpDevelop2_2.0.0.1591_Setup.exe&use_mirror=nchc)

البرنامج الأول حجمة 22.4 ميجا والثاني تقريباً 4 ميجا

بعد ما تنزلوا البرامج افتحوا القرص D

واعملوا مجلد بإسم CS "اختصار لسي شارب"

وداخل هذا المجلد اعملوا مجلد ثاني اسمه Tools

وحطوا داخل مجلد Tools البرنامجين اللي نزلتوهم

بعدين نصبوا البرنامج الأول dotnetfx.exe

ولما يخلص نصبوا البرنامج الثاني SharpDevelop2_2.0.0.1591_Setup.exe

واستعدوا للدرس الأول الأسبوع الجاي ..

لنرى الآن من سيسجل معي لنبدأ الدروس :smailes66:

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

..][ حمــاة النهضــة ][..


jhgjhgkjhgjkhgjhgjkhgkjhgkjhgkjhgkjhgjhgjhgjkhgjhg jhgjhgjh

نرجسية الروح
04-01-2007, 10:16 PM
متابعة عن بعد

مشكور على الدروس الرهيبة

حماة النهضة
04-01-2007, 10:36 PM
متابعة عن بعد

مشكور على الدروس الرهيبة


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

بالتوفيق

اماني الاماني
04-02-2007, 09:41 AM
الشكر مليون مرة على كل شئ عملة لي وعلى المساعدات القادمة انشاء الله وانا عارفه اني ثقلت عليك والله يساعدك علي ما اطول عليك عندي سؤالين لو سمحت السؤال الأول : عندي شفرة سحب وإفلات لكنها ليست جيدةبقدر المطلوب لو عندك شفرة سحب وإفلات للعبة بزل احقني بها الله لايهنك والسؤال الثاني هو حين نكبر الفورم اشياء الموجودة في الفورم ما تكبر معاه يعني تكون كلها في الزاوية ممكن تشوف لها حل والطلب هو البرامج التي جبتها برامج مساعدة يمكنها إعادة ترجمة التطبيق وتضمين وظائف إطار العمل المستخدمة في التطبيق
بحيث ان التطبيق لن يحتاج إلى إطار العمل مهما كان نظام التشغيل ما عرفت احملها وايضاً كيف تعمل وتستخدم وشكراً

حماة النهضة
04-02-2007, 11:22 PM
السلام عليكم

أماني

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

في المرفقات برنامج صغير فيه كود سحب وإفلات , اتمنى أن يفيدك

حين نكبر الفورم اشياء الموجودة في الفورم ما تكبر معاه يعني تكون كلها في الزاوية ممكن تشوف لها حل

هذا جزء من أحد الدروس القادمة , وهذا إقتباس منه :

ستلاحظ أن جميع كائنات النافذة محصورة في الزاوية العليا اليسرى من النافذة

حيث أن تكبير النافذة لم يقم بتعديل حجم و أماكن الكائنات

ولحل هذه المشكلة سنستخدم خاصية واحدة في جميع الكائنات : Anchor

معنى الكلمة "المرساه" ومن معناها يتبين لنا وظيفتها

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

فمثلاً لو ربطت كائن قائمة التشغيل بيمين النافذة , وقمت بتكبير النافذة فستلاحظ أن مكانها تغير وإنزاح نحو يمين النافذة

أما إذا ربطت أي كائن بجانبين متعاكسين , كأن تربط شريط التنقل بيمين ويسار النافذة

وقمت بتكبير النافذة ستلاحظ أن حجم شريط التنقل قد تغير لأنه مرتبط بإتجاهين متعاكسين وهذا يؤدي إلى "مط" الكائن


بحيث ان التطبيق لن يحتاج إلى إطار العمل مهما كان نظام التشغيل ما عرفت احملها وايضاً كيف تعمل وتستخدم وشكراً

الصراحة أنا لا أنصح أبدأ بأي من هذه البرامج و لا يمكن الإعتماد عليها

فهي أولاً غير قانونية لأنها تخالف قوانين ترخيص إطار عمل الدوت نت

و كلها نسخ تجريبية , وتظهر الكثير من الرسائل عند إستخدامها

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

عموماً هذه من أهم مشاكل بيئة الدوت نت

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

وإضافته عبر التحديث التلقائي في نظم التشغيل القديمة

..

حماة النهضة
04-04-2007, 04:03 AM
الدرس التاسع

إنتاج أرقام عشوائية

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

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

وإنتاج الأرقام العشوائية ليس بالسهولة التي تتصورها

حيث تستخدم خوارزمية شديدة التعقيد لغرض أنتاج أرقام لا معنى لها

تكمن الصعوبة في الخوارزمية أن أنظمة الحاسوب لاتستطيع أن تنتج أي شي لامعنى له

فلا يوجد شيئ "عشوائي" في أنظمة الحاسوب

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

كأن تأخذ تاريخ ووقت النظام , وتجري عليه عددا من الدوال والحسابات

في برنامجنا سنضيف اليوم خاصية إختيار طريقة تشغيل الملفات , إما تتابعية أو عشوائية

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

أما الطريقة العشوائية فهي أن يقوم البرنامج بالحصول على رقم عشوائي بين الصفر و عدد الملفات في قائمة التشغيل ويبدأ بتشغيلة

وعند الإنتهاء منه يحصل على رقم عشوائي ويشغل ملف آخر وهكذا.

في لغة C# يوجد كائن مسئول عن إنتاج الأرقام العشوائية هو كائن Random

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

Rabdom rnd=new Random();

في الكود السابق قمنا بتعريف كائن إسمه rnd من نوع Ranom

الدالة Next في هذا الكائن هي المسئولة عن إنتاج الأرقام العشوائية

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

مثلاً لو أردنا إنتاج رقم عشوائي بين 0 و 10 :

rnd.Next(0,10);

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

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

int num;
num=rnd.Next(0,10);

حيث أن المتغير num سيحمل القيمة الناتجة من الدالة .

يتبع التطبيق في الرد التالي..

حماة النهضة
04-04-2007, 04:04 AM
التطبيق

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

http://www.7oma.com/csharp/images/image9-1.jpg

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

وأكتب أمامها "طريقة التشغيل" , ستلاحظ أن عنوان صندوق المجموعة قد تغير :

http://www.7oma.com/csharp/images/image9-2.jpg

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

http://www.7oma.com/csharp/images/image9-3.jpg

تأكد من أن زري الإختيار قد تم وضعها داخل صندوق المجموعة :

http://www.7oma.com/csharp/images/image9-4.jpg

إختر زر الإختيار المسمى radioButton1 وإذهب إلى جدول الخصائص

وغير الخاصية (Name) من radioButton1 إلى serbtn

وغير الخاصية Text من radioButton1 إلى تتابعي

وغير أيضاً الخاصية Checked إلى true

إختر زر الإختيار الأخر المسمى radioButton2 وإذهب إلى جدول الخصائص

وغير الخاصية (Name) من radioButton2 إلى rndbtn

وغير أيضاً الخاصية Text من radioButton2 إلى عشوائي

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

http://www.7oma.com/csharp/images/image9-5.jpg

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

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

http://www.7oma.com/csharp/images/image9-6.jpg

إجراء تشغيل الملف الحالي

الإجراء PlayCurrent وظيفته هي تشغيل الملف الذي ترتيبه هو قيمة current من القائمة albume

مثلاً إذا كانت قيمة current هي 3 فإن هذا الإجراء يشغل الملف من قائمة التشغيل والذي ترتيبه 3

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

void PlayCurrent()
{
LoadFile(albume[current]);
SetTrackBar();
PlayFile();
}



إجراء إختيار الملف التالي

وظيفة الإجراء SetNext هي إختيار الملف التالي لتشغيلة بعد الإنتهاء من تشغيل الملف الحالي

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

if(rndbtn.Checked)
{
//current إضافة 1 إلى المتغير
}
else
{
// current إختيار رقم عشوائي وتحميلة للمتغير
}


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

void SetNext()
{
if(serbtn.Checked)
{
current=current+1;
}
else
{
Random rnd=new Random();
current=rnd.Next(0,albume.Count-1);
}
pl.SelectedIndex = current;
PlayCurrent();
}

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

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

عندها في السطر الخامس نقوم بإضافة 1 إلى قيمة current , فإذا كانت قيمته مثلاً 5 ستصبح قيمته 6

إما إذا كذا الإختيار على الزر الآخر وهو المخصص للتشغيل العشوائي

ففي السطر التاسع قمنا بتعريف كائن من نوع Random

وفي السطر العاشر إسندنا للمتغير current القيمة الناتجة من دالة إنتاج الأرقام العشوائية

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

ونعرف أن عدد عناصر قائمة التشغيل هو طول نفس عدد عناصر القائمةalbume

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

فإذا كان طول القائمة 5 فإن أعلى ترتيب فيها هو 4 لذلك إضفنا -1 بعد طول المصفوفة


في السطر الثاني عشر قمنا بتغيير الإختيار في قائمة التشغيل من خلال الخاصية SelectedIndex

مثلاً لو أردنا أن نختار العنصر الثالث من قائمة التشغيل سنستخدم الكود التالي :

pl.SelectedIndex=2;

لاحظ 2 و ليست 3 لأن العنصر الثالث في القائمة ترتيبه 2 وليس 3 حيث ان العنصر الأول كما قلنا ترتيبه 0

والعنصر الثاني ترتيبه 1 والعنصر الثالث ترتيبه 2 و هكذا .

في السطر الثالث عشر قمنا بإستدعاء الإجراءPlayCurrent والذي يقوم بتشغيل الملف الذي ترتيبه هو قيمة current

هناك ملاحظة على الكود السابق

فإذا كانت طريقة التشغيل تتابعي , ووصل ترتيب الملف إلى آخر عنصر

عندها إذا أضفنا 1 إلى المتغير current فإنه سيحمل ترتيب أعلى من ترتيب آخر عنصر في القائمة وهذا سيسبب خطأ

عند محاولة تحميل ملف غير موجود اساساً في قائمة الملفات albume وقائمة التشغيل

لذلك يجب أن نفحص قيمة current أولاً فإذا كانت تساوي آخر ترتيب في القائمة فنقوم بأسناد الرقم 0 إلى المتغير current

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

في كود إجراء إختيار الملف أحذف السطر التالي :

current=current+1;

وأكتب مكانه هذه الأسطر :

if(current==albume.Count-1)
{
current=0;
}
else
{
current=current+1;
}

عبارة if في السطر الأول تقوم بفحص قيمة current فإذا كانت تساوي ترتيب آخر عنصر بالقائمة

ففي السطر الثالث تسند القيمة 0 إلى المتغير current

أما إذا كانت قيمة current لا تساوي ترتيب آخر عنصر

ففي السطر السابع تضيف 1 إلى قيمة current

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

void SetNext()
{
if(serbtn.Checked)
{
if(current==albume.Count-1)
{
current=0;
}
else
{
current=current+1;
}
}
else
{
Random rnd=new Random();
current=rnd.Next(0,albume.Count-1);
}
pl.SelectedIndex = current;
PlayCurrent();
}

متى نستدعي إجراء إختيار الملف التالي ؟

إذا قمت بتشغيل البرنامج فلن يتم تشغيل الملفات لا عشوائيا و لا تتابعياً

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

والمفروض أن نستدعي إجراء إختيار الملف التالي عند الإنتهاء من تشغيل الملف الحالي

ولكن كيف نعرف متى سيتم الإنتهاء من تشغيل الملف الحالي ؟

حسنا نعرف أن قيمة شريط التنقل عبر الملف تتغير كل ثانية بفعل المؤقت

سنستخدم هذه الميزة لنعرف وقت الإنتهاء من تشغيل الملف الحال ..

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

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

وبالتالي يجب إستدعاء إجراء SetNext

لكن هناك مشكلة , فالمؤقت يغير قيمة الشريط كل ثانية واحدة , وطول المف في ملفات الريل يقاس بالملي ثانية

أي انه عند وصول الملف لنهايته فهناك إحتمال كبير أن لا تكون قيمة الشريط هي طول الملف

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

الطريقة هي أن نفحص نوع الملف الذي يتم تشغيله حالياً فإذا كان ملف ريل فالفحص يتم على آخر 1000 رقم

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

أي أن شرط الوصول إلى نهاية ملف الريل يتحقق إذا كانت قيمة شريط التنقل أكبر من طول الملف ناقص 1000

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

إذهب إلى تصميم البرنامج وقم بإختيار كائن التنقل trackBar1

من نافذة الخصائص إختر خصائص الأحداث وانقر مزدوجاً أمام الحدث ValueChanged:

http://www.7oma.com/csharp/images/image9-7.jpg

ستنتقل إلى شفرة البرنامج إلى إجراء TrackBar1ValueChanged هذا الإجراء يتم تنفيذه في كل مرة تتغير فيها قيمة شريط التنقل

حيث من المفترض ان نستدعي إجراء إختيار الملف التالي هنا :


void TrackBar1ValueChanged(object sender, EventArgs e)
{
//إستدعاء إجراء إختيار الملف التالي
}

إنسخ الكود التالي إلى داخل الإجراء TrackBar1ValueChanged :

int last;
if (type == "R")
{
last = trackBar1.Maximum - 1000;
}
else
{
last = trackBar1.Maximum - 1;
}
if (trackBar1.Value > last)
{
SetNext();
}

حيث يصبح الإجراء TrackBar1ValueChanged هكذا :

void TrackBar1ValueChanged(object sender, EventArgs e)
{
int last;
if (type == "R")
{
last = trackBar1.Maximum - 1000;
}
else
{
last = trackBar1.Maximum - 1;
}
if (trackBar1.Value > last)
{
SetNext();
}
}


في هذا الإجراء عرفنا متغير إسمه last من نوع رقم يحمل قيمة تمثل أعلى قيمة لطول الملف الصوتي

وهي طول الملف الصوتي ناقص 1000 في ملفات الريل

وهي طول الملف الصوتي ناقص واحد في ملفات الصوت العادية والفيديو

في السطر الرابع عبارة if لفحص نوع الملف الذي يتم تشغيله حالياً من خلال المتغير type الذي شرحناه في دروس سابقة

فإذا كانت قيمة type هي R يعني هذا أنه ملف ريل , وبالتالي فإن أعلى قيمة لطول الملف الصوتي هي آخر ثانية في الملف

وهي طول الملف ناقص 1000 , وقد وضعنا بدل طول الملف trackBar1.Maximum لأنها يحملان نفس القيمة بفعل الإجراء SetTrackBar

أما إذا لم يكن الملف ملف ريل فإن أعلى قيمة لطول الملف هي آخر ثانية وهي طول الملف ناقص واحد

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

فهذا يعني أن البرنامج وصل إلى نهاية الملف الصوتي , ويجب إستدعاء دالة إختيار الملف التالي وتشغيلة
..

إذهب إلى إجراء plSelectedIndexChanged من الدرس السابق وغير شفرته حتى يصبح هكذا :

void plSelectedIndexChanged(object sender, EventArgs e)
{
current=pl.SelectedIndex;
PlayCurrent();
}

عرفنا أن الإجراء plSelectedIndexChanged ينفذ في كل مرة تقوم بإختيار ملف من قائمة التشغيل

والكود السابق يقوم يتحميل المتغير current ترتيب الملف الذي إخترته ثم يستدعي إجراء تشغيله

الآن قم بتشغيل البرنامج وإختر عدة ملفات و جرب طرق التشغيل

الواجب

أرسل التطبيق

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

..

اماني الاماني
04-04-2007, 11:07 AM
الشكر الجزيل علي مساعدتكم لي والله يوفقكم لكن عندي طلب الرابط الموجود لبرنامج السحب والافلات لايتحمل عندي والشكر مرة ثانية علي المساعدة

says12
04-07-2007, 12:30 PM
تسلم اخى على فكرة اول يوم لى النهارده فى الجروب الجميل ده واول واحد تون انتا اقراء منو

وفعلآ goooooooooood وانشاء الله نستكمل معك الدروس ونستفيد ونفيد

تسلم مرة اخرى
مع تحياتى : شيتوس

حماة النهضة
04-07-2007, 07:36 PM
السلام عليكم

الشكر الجزيل علي مساعدتكم لي والله يوفقكم لكن عندي طلب الرابط الموجود لبرنامج السحب والافلات لايتحمل عندي والشكر مرة ثانية علي المساعدة

تفضلي أختي , هذا رابط مباشر (http://www.7oma.com/csharp/DragAndDropOfImage.zip)

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

وفعلآ goooooooooood وان شاء الله نستكمل معك الدروس ونستفيد ونفيد

تسلم مرة اخرى
مع تحياتى : شيتوس

الله يسلمك أخي العزيز

شكراً لمرورك العطر , وإن شاء الله تستفيد من الدروس

..

حماة النهضة
04-07-2007, 08:30 PM
الدرس العاشر

المتغيرات العامة public

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

في درس اليوم سنقوم بإضافة نافذة جديدة إلى البرنامج لإدارة الألبومات "قوائم التشغيل"

حيث سنحتاج للوصول إلى متغيرات النافذة الأساسية من نافذة الالبومات

المتغير الأساسي الذي سنحتاج للوصول إليه من نافذة الالبومات هو قائمة التشغيل albume

حيث يجب تمريرها إلى نافذة الألبومات حتى يتم إجراء التعديلات عليها

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

التطبيق:

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

ومن القائمة إختر Add ثم New Item

http://www.7oma.com/csharp/images/image10-1.jpg

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

http://www.7oma.com/csharp/images/image10-2.jpg

إختر C# ثم Windows Application ثم Form وأكتب في حقل إسم الفورم albumes.cs

ثم انقر على زر Create لكي يتم إنشاء نافذة جديدة في المشروع

يتم التنقل عبر نوافذ البرنامج من خلال النقر المزدوج على ملف النافذة في نافذة Projects

http://www.7oma.com/csharp/images/image10-3.jpg

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

http://www.7oma.com/csharp/images/image10-4.jpg

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

غير الخاصية (Name) إلى lv

وغير الخاصية View إلى Details

إذهب إلى خاصية Columns وأنقر على زر التفاصيل :

http://www.7oma.com/csharp/images/image10-5.jpg

ستظهر نافذة التفاصيل فارغة

هذه هي النافذة التي يتم من خلالها إنشاء أعمده لكائن المستعرض

http://www.7oma.com/csharp/images/image10-6.jpg

حيث سنكون عمودين , عمود لإسم الملف فقط , وعمود آخر لمسار الملف كاملاً

أنقر على زر Add وغير خاصية Text إلى "إسم الملف"

ونقر مرة أخرى على زر Add لتنشئ العمود الثاني وغير خاصية Text فيه إلى "مسار الملف"

ثم انقر على زر الموافقة سيتكون في كائن المستعرض عمودين :

http://www.7oma.com/csharp/images/image10-7.jpg

من صندوق الأدوات إسحب أربعة أزرار إلى يمين كائن المستعرض , وغير خاصية Text إلى

إضافة

إلى الأعلى

إلى الأسفل

حذف

إسحب زرين آخرين من صندوق الأدوات إلى أسفل كائن المستعرض وغير خاصية Text إلى

موافق

إلغاء الأمر

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

http://www.7oma.com/csharp/images/image10-8.jpg

إختر زر "موافق" وإذهب إلى جدول الخصائص وغير الخاصية DialogResult إلى OK

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

ثم إختر زر "إلغاء الأمر" وغير خاصية DialogResult إلى Cancel

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

من صندوق الأدوات إسحب كائن فتح الملفات و إختره وغير خاصية (Name) إلى OF

وغير خاصية MultiSelect إلى true

إنتقل إلى شفرة النافذة , نحتاج لتعريف متغير من نوع قائمة شبيهه بقائمة albume في النافذة الرئيسية

حتى يتم من خلالها التعامل مع الملف وإضافتها إلى كائن المتصفح و حذفها منه

وكما شرحنا سابقاً فإن كائن القائمة موجود في فضاء الأسماء System.Collections.Generic لذلك يجب إضافة عبارة using لتضمين كائنات ودوال الفضاء

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


using System.Collections.Generic;


ثم أكتب كود تعريف القائمة تحت تعريف كائن النافذة :

public List<string> albume=new List<string>();

http://www.7oma.com/csharp/images/image10-9.jpg

لاحظ أنا إستخدمنا الكلمة public وليس private وذلك حتى تتمكن النافذة الرئيسية من رؤية هذا المتغير كما سنرى لاحقاً

القائمة albume في نافذة الألبومات ستكون نسخة مطابقة للقائمة albume في النافذة الرئيسية

ويتم التعامل مع كائن المستعرض من خلال عناصر هذه القائمة .

إضافة ملفات

إنتقل إلى تصميم نافذة الالبومات وأنقر مزدوجا على زر "إضافة" للذهاب إلى شفرته

أكتب الكود التالي بين الحاصرتين :

OF.ShowDialog();
albume.AddRange(OF.FileNames);
FillView();

يقوم هذا الكود بفتح نافذة إختيار الملفات ثم إضافة الملفات المختارة إلى القائمة albume

في السطر الثالث نستدعي إجراء إضافة الملفات إلى كائن المستعرض

الإجراء FillView

يقوم هذا الإجراء بنسخ جميع عناصر القائمة albume إلى كائن المستعرض lv

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

void FillView()
{
lv.Items.Clear();
for (int i = 0; i < albume.Count; i++)
{
string filename=System.IO.Path.GetFileName(albume[i]);
ListViewItem file = new ListViewItem(filename);
file.SubItems.Add(albume[i]);
lv.Items.Add(file);
}
}

فس السطر الثالث قمنا قمنا بإستدعاء دالة تنظيف كائن المستعرض lv.Items.Clear

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

في السطر الرابع دوارة for من الصفر وحتى عدد عناصر القائمة albume التي تحمل مسارات الملفات المختارة

في السطر السادس قمنا بتعريف متغير من نوع نص يحمل ناتج دالة GetFileName والتي ترجع إسم الملف من المسار الموجود في قائمة albume في الترتيب i

في السطر السابع عرفنا كائن جديد إسمه file من نوع ListViewItem

حيث ان كائن المستعرض lv هو عبارة عن مجموعة كائنات ListViewItem حيث يمثل كل كائن منها سطر واحد من سطور كائن المستعرض

ولأن ListViewItem كائن وليس متغير فقد إستخدمنا الجملة new ومررنا له إسم الملف الناتج من السطر السابق

حيث أصبح المتغير يحمل قيمة filename من السطر السابق

وفي السطر الثامن , أضفنا كائن فرعي للكائن file من خلال الدالة file.SubItems.Add

ومررنا لها العنصر الذي ترتيبه i من قائمة albume

الآن المتغير file أصبح يحمل قيمتين الأولى هي إسم الملف والثانية الفرعية هي مسارة المخزن في قائمة albume

في السطر التاسع أضفنا الكائن file إلى lv حيث يعتبر سطر واحد من سطور كائن المستعرض lv

وبعد تكرار هذه العملية لكافة عناصر القائمة albume يصبح الكائن lv محتوياً على جدول يوضح جميع أسماء ومسارات الملفات المختارة

حذف ملف

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

أكتب الكود التالي بين الحاصرتين :

albume.RemoveAt(lv.SelectedIndices[0]);
FillView();

الدالة RemoveAt تقوم بأخذ ترتيب العنصر كمدخل وتحذفة من القائمة

فمثلاً لو أردنا حذف العنصر الذي ترتيبة 4 سيكون الكود كالتالي :

albume.RemoveAt(4);

لاحظ أن العنصر الذي ترتيبه 4 هو العنصر الخامس

الدالة SelectedIndices من دوال الكائن lv تقوم بإرجاع مصفوفة تحتوي على ترتيبات الأسطر المختارة في الكائن

فمثلاً لو أخترنا السطر الثالث و الرابع من القائمة سترجع الداله مصفوفة تحتوي رقمي 2 و 3

لاحظ , أن السطر الثالثة ترتيبة 2 وليش 3 كما شرحنا مراراً.

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

lv.SelectedIndices[0]

وفي السطر الثاني نقوم بإستدعاء الإجراء FillView والذي يقوم بنسخ محتويات القائمة albume إلى الكائن lv

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

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

فذلك يعني أن هناك ملفات مختارة و بالتالي ينفذ كود الحذف ,

عدل الكود السابق حتى يصبح هكذا :

if(lv.SelectedIndices.Count>0)
{
albume.RemoveAt(lv.SelectedIndices[0]);
FillView();
}

يتم فحص عدد العناصر المختارة من خلال الخاصية lv.SelectedIndices.Count

تابع التطبيق في الرد التالي..

حماة النهضة
04-07-2007, 08:31 PM
نقل ملف إلى الأعلى

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

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

وأكتب الكود التالي بين الحاصرتين :

int sel = lv.SelectedIndices[0];
string tmp = albume[sel];
albume[sel] = albume[sel-1];
albume[sel - 1] = tmp;
FillView();
lv.Items[sel-1].Selected = true;

في السطر الأول عرفنا متغير من نوع رقم يقوم بخزن ترتيب السطر المختار في كائن المستعرض lv

وفي السطر الثاني عرفنا متغير آخر من نوع نص يقوم بخزن قيمة العنصر الذي ترتيبة هو ترتيب السطر المختار

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

وفي السطر الرابع قمنا بتحميل السطر السابق للسطر المختار بالقيمة التي كانت مخزنة في السطر المختار

وفي السطر الخامس قمنا بإستدعاء إجراء تعبئة الكائن lv

وفي السطر السادس قمنا بتحديد وإختيار السطر الحالي الذي تم نقله

لتوضيح الكود السابق لاحظ هذا الشكل التوضيحي :

http://www.7oma.com/csharp/images/image10-10.jpg

حيث إفترضنا أن القائمة albume تحتوي على ثلاثة عناصر تم إختيار العنصر الأوسط لنقله خطوة إلى الأعلى

ماذا لو إختار المستخدم أول عنصر سطر في المستعرض , كيف سيتم نقل أول عنصر في القائمة خطوة إلى أعلى

سيحدث خطأ إذا حاول المستخدم فعل ذلك ولتفادي هذا الخطأ يجب أن نفحص ترتيب السطر المختار sel فإذا كان يساوي صفر

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

عدل الكود السابق ليصبح هكذا :

int sel = lv.SelectedIndices[0];
if(sel>0)
{
string tmp = albume[sel];
albume[sel] = albume[sel-1];
albume[sel - 1] = tmp;
FillView();
lv.Items[sel-1].Selected = true;
}

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

عدل الكود السابق ليصبح هكذا :

if(lv.SelectedIndices.Count>0)
{
int sel = lv.SelectedIndices[0];
if(sel>0)
{
string tmp = albume[sel];
albume[sel] = albume[sel-1];
albume[sel - 1] = tmp;
FillView();
lv.Items[sel-1].Selected = true;
}
}


نقل ملف إلى أسف

يشبه كود نقل الملف لأعلى بإختلاف بسيط جداً فبدل من sel-1 نضع sel+1

وعند المقارنه sel>0 نضع sel<lv.Items.Count لأن النقل في هذه الحالة سيكون للأسفل

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

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

if(lv.SelectedIndices.Count>0)
{
int sel = lv.SelectedIndices[0];
if(sel<lv.Items.Count-1)
{
string tmp = albume[sel];
albume[sel] = albume[sel+1];
albume[sel + 1] = tmp;
FillView();
lv.Items[sel+1].Selected = true;
}
}

بهذا نكون قد أنتهينا من نافذة الألبومات ...

أنتقل إلى النافذة الرئيسية و من صندوق الأدوات إسحب كائن الزر إلى النافذة الرئيسية وغير النص إلى "التحكم بالألبومات"

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

http://www.7oma.com/csharp/images/image10-11.jpg

إظهار نافذة الألبومات

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

albumes frm = new albumes();
frm.albume = albume;
frm.ShowDialog();
albume = frm.albume;
FillList();

في السطر الأول عرفنا كائن إسمه frm من نوع albumes , لاحظ أن albumes هو إسم نافذة الألبومات

اي أنها الآن تعتبر كائن في النظام ويمكن تعريف متغريات من نوعها كما كنا نفعل مع القوائم أو الكائنات الأخرى

في السطر الثاني نقوم بتحميل القائمة albume من النافذة frm بقيم القائمة albume من النافذة الرئيسية

أي أن القائمة albume في النافذه الجديدة frm ستصبح نسخة مطابقة لقائمة albume الموجوده في النافذة الرئيسية

في السطر الثالث قمنا بإستدعاء الإجراء ShowDialog والذي يظهر النافذة frm للمستخدم

السطر الرابع يتم تنفيذة عند إغلاق النافذة frm , حيث يتم فيه نسخ قيمة albume من نافذة الألبومات لقائمة albume الموجوده في النافذة الرئيسية

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

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

وفي السطر الخامس نستدعي إجراء FillList الذي يقوم بنسخ قيم albume إلى قائمة التشغيل كما شرحنا في الدروس السابقة

إذا شغلت البرنامج الآن وإخترت "التحكم بالألبومات" فلن تظهر لك عناصر قائمة albume لأنك لم تقم بإستدعاء إجراء تعبئة المستعرض FillView

حيث يحب إستدعاؤة بمجر تحميل نافذة الألبومات

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

private void albumes_Load(object sender, EventArgs e)
{

}

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

private void albumes_Load(object sender, EventArgs e)
{
FillView();
}

شغل البرنامج ومن النافذة الرئيسية إختر مجموعة ملفات ثم إختر "التحكم بالألبومات" وجرب كل الوظائف.

الواجب

أرسل التطبيق

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

..

اماني الاماني
04-09-2007, 10:02 PM
تفضلي أختي , هذا رابط مباشر (http://www.7oma.com/csharp/DragAndDropOfImage.zip)


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

يوفي VIP
04-09-2007, 11:34 PM
ما شاء الله تبارك الله ..
ياليت والله لو اني متفرغ لأتابع ولو بعض من هذه الدروس القيمة ..
لكن الله يعين .. 3 لغات ادرسها في الكلية الان .. وصعبة اني اضيف وادرس لغات اضافيه :(

جعلها الله في ميزان حسناتك أخي الكريم .. ووفقك الله لكل خير ان شاء الله ...


majed

حماة النهضة
04-10-2007, 04:14 AM
الدرس الحادي عشر

دوارة While

في الدرس الرابع تعرفنا على هيكل من هياكل التكرار في لغة C# وهو دوارة for

والحقيقة أن هناك هياكل أخرى من هياكل التكرار أهمها هي دوارة While

وهي تشبة إلى حد كبير دوارة for بإختلاف أنها لا تحتوي على عداد Counter كما كنا نعرف i في دوارة for

والهيكل الأساسي لدوارة While يشبة إلى حد كبير هيكل for بإختلاف أشياء بسيطة :

while (شرط التكرار)
{
كود الدوارة
}

تقوم جملة while بتكرار كود الدوارة ما دام شرط التكرار متحققاً , مثلاً :

int n=0;
while (n<5)
{
MessageBox.Show("من داخل الدوارة ");
n++;
}

الدوارة السابقة تقوم بإظهار الرسالة خمس مرات

حيث عرفنا متغير من نوع رقم n وأسندنا له قيمة إبتدائية 0

وشرط التكرار في الدوارة هو أن تكون قيمة المتغير n أصغر من 5

في المرة الأولى ستكون قيمة n هي صفر , وبالتالي فشرط التكرار متحقق , لأن الصفر أقل من 5

يتم تنفيذ كود إظهار الرسالة , والكود n++ يعني إضافة واحد إلى قيمة n أي أن n سيحمل الآن القيمة 1

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

وهكذا حتى تصبح قيمة n=5 عندها لن يتحقق شرط التكرار لأن 5 لسيت أقل من 5

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

يستخدم هذا النوع من الدوارات حين لا نعرف كم بالضبط سنكرر كود الدوارة

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

ملفات XML

من اهم أنظمة الحاسوب التي استفادة منها الإنسانية منذ ظهور الحاسوب هي أنظمة قواعد البيانات

وأنظمة قواعد البيانات هي برمجيات تستخدم مع لغات البرمجة بغرض خزن وإسترجاع أنواع متعددة من البيانات

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

حيث يتم ترتيب البيانات في وحدات متجانسة تسمى جداول Tables والتي تحتوي على حقول Fields لكل حقل نوع محدد من البيانات

ويمكن للجدول الواحد أن يحتوي على عدة حقول من أنواع بيانات مختلفة

قد ترتبط الجداول مع بعضها بواسطة علاقات Relationships حيث تعتمد بيانات من جدول على بيانات من جدول آخر

أنظمة قواعد البيانات تقسم إلى قسمين , نظام الخزن , ونظام المعالجة

أما نظام الخزن فهو المسئول عن خزن البيانات في ملفاتها المحددة بغض النظر عن ترتيبها أو أماكنها

ونظام المعالجة هو المسئول عن تحديد أماكن البيانات الصحيحة و إسترجاعها والقيام بالعمليات عليها

النظام الأول -نظام الخزن- يتكفل به نظام التشغيل ولا يحتاج لبرمجيات أو برامج خاصة

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

معظم أنظمة قواعد البيانات تستخدم النظام الثاني , مثل قواعد الأكسس و الأوراكل و غيرها

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

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

وإنما ملفاته عبارة عن ملفات نصية يمكن فتحها وتعديلها بأي محرر نصوص

وسنستخدم ملفات XML في تطبيقنا لخزن بيانات الألبومات أو قوائم التشغيل

صيغة هذه الملفات النصية تشبة إلى حد كبير صيغة ملفات HTML

حيث يعتمد على وسوم Tags ترتب البيانات في هياكل مترابطة

وكل جزء من البيانات يحتوي على وسم بداية ووسم نهاية وله إسم محدد

فمثلاً هذا الكود :

<msg>رسالة</msg>

هذا جزء من كود ملف XML حيث يحتوي على جزء لخزن البيانات إسمه msg

يحتوي هذا الجزء على بيانات مخزنة هو كلمة "رسالة" لاحظ أن الجزء يحتوي على وسمين

وسم البداية حيث يحتوي على إسم الجزء بين علامتي أصغر وأكبر من

ووسم النهاية وهو مشابه تماما لوسم البداية بزيادة الشرطة المائلة / قبل إسم الجزء في وسم النهاية

وبين الوسمين توجد البيانات

وتسمى الأجزاء في ملفات XML بالعقد Nodes فالكود السابق يحتوي على عقدة إسمها msg

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

<albumes>
<albume1>

</albume1>
</albumes>

الكود السابق يحتوي على عقدة رئيسية إسمها albumes تحتوي بدورها على عقدة فرعية إسمها albume1

يمكن أن تحتوي العقدة على عدة عقد فرعية :

<albumes>

<albume1>
</albume1>

<albume2>
</albume2>

</albumes>

لعقدة الرئيسية albumes تحتوي على عقدتين فرعيتين albume1 و albume2

يمكن أيضاً للعقدة الفرعية أن تحتوي على عقد فرعية أخرى:

<albumes>

<albume1>
<file>sound.mp3</file>
<file>wave.rm</file>
</albume1>

<albume2>
<file>real.wav</file>
</albume2>

</albumes>

العقدة الرئيسية albumes تحتوي على عقدتين فرعيتين albume1 و albume2

العقدة الفرعية albume1 تحتوي على عقدتين فرعيتين بنفس الإسم file

كل عقدة من عقدتي file بيانات نصية sound.mp3 و wave.rm

والعقدة الفرعية albume2 تحتوي على عقدة فرعية file

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

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

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

<?xml version="1.0" encoding="utf-8"?>
<albumes>
<albume1>
<file>sound.mp3</file>
<file>wave.rm</file>
</albume1>
<albume2>
<file>real.wav</file>
</albume2>
</albumes>

هذا السطر لا يتغير في معظم ملفات XML

هذا هو هيكل الملف الذي سيقوم بخزن بيانات الألبومات وقوائم التشغيل

يتم التعامل مع ملف XML في البرنامج من خلال كائن Xml******** الموجود في فضاء الأسماء System.XML:

Xml******** doc = new Xml********();

الكود السابق عرفنا من خلالة كائن إسمه doc من نوع Xml********

الكائن doc يقوم بتحميل المف عن طريق الإجراء Load

doc.Load("c://albumes.xml");

الكود السابق يقوم بتحميل الملف albumes.xml الموجود في القرص c إلى الكائن doc

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

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

doc["albumes"];

ويتم الوصول إلى البيانات في العقدة بواسطة الخاصية InnerText :

MessageBox.Show(doc["albumes"].InnerText);

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

ويتم الوصول لإسم العقدة عن طريق الخاصية :Name

MessageBox.Show(doc["albumes"].Name);

الكود السابق يظهر رسالة تحتوي على إسم العقدة albumes

ويتم الوصول إلى العقد الفرعية بإضافة قوسين مربعين يحتويان إسم العقدة

فمثلاً للوصول إلى العقدة الفرعية albume1 الموجود في العقدة albumes :

doc["albumes"]["albume1"]

وللوصول إلى العقدة الأعمق file :


doc["albumes"]["albume1"]["file"]

التطبيق في الرد التالي ..

حماة النهضة
04-10-2007, 04:15 AM
التطبيق

افتح تطبيق الدرس السابق , من نافذة مستعرض المشروع, أنقر بالزر الأيمن على إسم المشروع

ومن القائمة الناتجة إختر Add ثم New Item :

http://www.7oma.com/csharp/images/image11-1.jpg

ستظهر نافذة إضافة ملف جديدة للمشروع , من القائمة في اليسار إختر misc

ثم إختر Empty XML file , وفي صندوق إسم الملف أكتب الإسم التالي albumes.xml , وإختر OK

http://www.7oma.com/csharp/images/image11-2.jpg

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

حيث يصبح الملف موجود بجانب ملفات المشروع الأخرى

الآن قم بفتح تصميم نافذة الألبومات وسحب ثلاثة أزرار إلى النافذة وغير الأسماء فيها إلى

ألبوم جديد

حفظ الألبوم

حذف الألبوم

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

http://www.7oma.com/csharp/images/image11-3.jpg

إختر كائن القائمة المنسدلة و من جدول الخصائص , غير الخاصية (Name) , إلى ac

وغير الخاصية Text إلى "إختر الألبوم"

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

http://www.7oma.com/csharp/images/image11-4.jpg

جميع الدوال التي سنستخدمها للتعامل مع ملف XML موجوده في فضاء الأسماء XML الموجود داخل الفضاء System

لذلك يجب إضافة عبارة using لتعريف جميع دوال وكائنات التعامل مع ملفات XML

إذهب إلى شفرة نافذة الألبومات و أكتب السطر التالي , تحت جمل using في رأس الملف:

http://www.7oma.com/csharp/images/image11-5.jpg

يتم تحميل ملف XML إلى البرنامج والتعامل معه من خلال كائن Xml********

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

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

http://www.7oma.com/csharp/images/image11-6.jpg

قمنا هنا بتعريف كائن إسمه doc من نوع Xml******** , ولأنه كائن إستخدمنا الكلمة new


إجراء تحميل الألبومات للقائمة المنسدلة FillCombo

يقوم هذا الإجراء بتحميل أسماء الألبومات الموجوده في ملف XML إلى القائمة المنسدلة ac

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

void FillCombo()
{
doc.Load(Application.StartupPath + "//albumes.xml");
XmlNode alnd = doc["albumes"].FirstChild;
while (alnd != null)
{
ac.Items.Add(alnd.Name);
alnd = alnd.NextSibling;
}
}

السطر الأول يقوم بتحميل الملف إلى الكائن doc

والتعليمة Application.StartupPath تعيد قيمة نصية تمثل مسار ملف exe للتطبيق

حيث إستفدنا من هذه التعليمة لمعرفة مسار ملف XML وأضفنا إسم الملف للمسار

في السطر الثاني قمنا بتعريف كائن من نوع عقدة XmlNode إسمه alnd

ثم حملنا هذا الكائن أول عقدة فرعية داخل العقدة الرئيسية albumes من خلال الخاصية FirstChild

السطر الثالث يمثل جملة while تنفذ كود الدوارة ما دامت العقدة alnd تحمل قيمة

الشرط alnd!=null يختبر الكائن alnd فإذا كان يحمل قيمة غير القيمة الفارغة null فسيتم تنفيذ كود الدوارة

أما إذا كان الكائن alnd لا يحمل قيمة أي أنه يحمل null فعندها لن يتم تنفيذ كود الدوارة

السطر الخامس يقوم بإضافة إسم العقدة alnd إلى القائمة المنسدلة ac

السطر السادس يقوم بإختيار العقدة التالية للعقدة alnd حيث يحمل الكائن alnd العقد التالية لما كان يحمله

يتم تكرار السطرين السابقين حتى الوصول إلى آخر عقدة عندها سيحمل الكائن alnd القيمة null لأنه لا يوجد عقدة تالية للعقدة الأخيرة

وبالتالي ينتهي تكرار جملة while

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

قم بتعديل الكود السابق حتى يصبح هكذا :

void FillCombo()
{
try
{
doc.Load(Application.StartupPath + "//albumes.xml");
XmlNode alnd = doc["albumes"].FirstChild;
while (alnd != null)
{
ac.Items.Add(alnd.Name);
alnd = alnd.NextSibling;
}
}
catch
{
MessageBox.Show("حدث خطأ أثناء إسترجاع بيانات الألبومات");
}
}

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

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

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

private void albumes_Load(object sender, EventArgs e)
{
FillView();
FillCombo();
}


إجراء قراءة محتويات الألبوم ReadAlbume

سيقوم هذا الإجراء بقراءة محتويات ألبوم محدد من ملف XML وتخزينها في قائمة albume

ثم إستدعاء إجراء FillView لنسخ محتويات القائمة إلى كائن المستعرض lv

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

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

void ReadAlbume(string albumename)
{
try
{
doc.Load(Application.StartupPath + "//albumes.xml");
XmlNode filend = doc["albumes"][albumename].FirstChild;
albume.Clear();
while (filend != null)
{
albume.Add(filend.InnerText);
filend = filend.NextSibling;
}
FillView();
}
catch
{
MessageBox.Show("حدث خطأ أثناء محاولة إسترجاع بيانات الألبومات");
}
}

السطر الأول من الكود يحتوي على إسم الإجراء وإسم المدخل ونوعة string

السطر الخامس لتحميل ملف XML إلى الكائن doc

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

لاحظ أنا وضعنا إسم المدخل في العقدة الفرعية فعند تشغيل البرنامج سيتم إستبدالة بقيمة المدخل كما سنرى لاحقاً

السطر السابق يقوم بتحديد عقدة الألبوم المدخل , مثلاً albume1 ثم أخذ أول عقدة منه file وتحميلها على الكائن filend

السطر السابع قمنا بتنظيف القائمة albume من أي عناصر موجودة فيها حتى ندخل إليها العناصر الجديدة من الملف

جملة while في السطر الثامن , تنفذ كود الدوارة ما دام filend لا يحمل القيمة null

السطر العاشر نقوم بإضافة بيانات العقدة إلى القائمة عن طريق الخاصية InnerText في العقدة

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

في السطر الثالث عشر نقوم بإستدعاء إجراء نسخ القائمة albume إلى كائن المستعرض lv

بعد شرح هذا الإجراء بقي أن نختار المكان المناسب لإستدعائة

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

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

ستذهي إلى الشفرة , أكتب هناك إستدعاء الأجراء ReadAlbume

لا تنسى أن هذا الإجراء يتطلب مدخل من نوع نص يمثل الألبوم المختار

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

لذلك فإستدعاء الإجراء سيكون هكذا :

ReadAlbume(ac.Text);

ويصبح كود الإجراء كاملاً - إختيار إسم الألبوم من القائمة - هكذا :

private void ac_SelectedIndexChanged(object sender, EventArgs e)
{
ReadAlbume(ac.Text);
}

حيث أنه عند تشغيل البرنامج وإستدعاء الإجرء سيتم تغيير albumename في الإجراء إلى قيمة ac.Text

تابع التطبيق...

حماة النهضة
04-10-2007, 04:15 AM
إجراء حذف الألبوم DeleteAlbume

يقوم هذا الإجراء بحذف بيانات الألبوم المختار من ملف XML

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

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

void DeleteAlbume(string albumename)
{
try
{
if (MessageBox.Show("هل أنت متأكد من حذف / تعديل الألبوم ؟", "هل أنت متأكد", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
{
doc.Load(Application.StartupPath + "//albumes.xml");
doc["albumes"].RemoveChild(doc["albumes"][albumename]);
doc.Save(Application.StartupPath + "//albumes.xml");
ac.Items.RemoveAt(ac.SelectedIndex);
lv.Items.Clear();
}
}
catch
{
}
}

السطر الأول يحتوي على إسم الإجراء وإسم المدخل ونوعه string

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

MessageBox.Show("هل أنت متأكد من حذف / تعديل الألبوم ؟", "هل أنت متأكد", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2)

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

لذلك وظيفتها هذه المرة مختلفة قليلاً , المدخل الأول هو نص الرسالة كما عرفنا سابقاً

المدخل الثاني هو عنوان الرسالة الذي سيظهر في شريك العنوان

المدخل الثالث MessageBoxButtons.YesNo هو الأزرار المطلوب إظهارها في الرسالة حيث إخترنا YesNo

وهناك أيضاً OkCancel و هناك مجموعات أخرى من الأزرار

المدخل الرابع MessageBoxIcon.Question يمثل الأيقونه المراد إظهارها في الرسالة حيث إخترنا أيقونة السؤال Question

المدخل الخامس MessageBoxDefaultButton.Button2 يمثل الزر الإفتراضي , أي الزر الذي يكون التركيز عليه عند ظهور الرسالة

وقد إخترنا Button2 والذي سيكون في هذه الحالة زر No حيث سيكون الجواب الإفتراضي للرسالة هو No

وقد إخترنا No بدلا من Yes حتى يتأكد المستخدم من إختيارة قبل أن نحذف بيانات الألبوم

وإذا كانت نتيجة هذه الرسالة هي الموافقة DialogResult.Yes سيتم تنفيذ كود الحذف وإلا فلا

في السطر السابع تعليمة تحميل الملف لكائن doc

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

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

داخل قوسي إجراء الحذف العقدة المراد حذفها , وهي العقدة الذي إسمها هو المدخل albumename

الموجودة داخل العقدة الرئيسية albumes

في السطر التاسع تعليمة حفظ التغييرات على ملف XML بإستدعاء الإجراء Save من كائن doc

في السطر العاشر تعليمة حذف إسم الألبوم المحذوف من القائمة المنسدلة

وفي السطر الحادي عشر تعليمة تنظيف كائن المستعرض lv من ملفات الألبوم المحذوف

المكان المناسب لإستدعاء هذا الإجراء هو كود الزر "حذف الألبوم"

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


DeleteAlbume(ac.Text);



إجراء حفظ الألبوم WriteAlbume

هذا الإجراء سيقوم بتخزين محتويات كائن المستعرض lv إلى ملف XML

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

ثم يقوم بإنشاء العقد الفرعية file والتي تحتوي على مسارات الملفات الموجودة في كائن المستعرض

وأيضاً يقوم الإجراء بحفظ التغيرات على ألبوم موجود أساساً , بحيث يقوم بحذفة أولاً من الملف ثم تخزين ألبوم جديد بنفس الإسم وبالبيانات المعدلة

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

void WriteAlbume(string albumename)
{
try
{
doc.Load(Application.StartupPath + "//albumes.xml");
if (doc["albumes"][albumename]!=null)
{
doc["albumes"].RemoveChild(doc["albumes"][albumename]);
}
else
{
ac.Items.Add(ac.Text);
}
XmlNode albumend = doc.CreateElement(albumename);
for (int i = 0; i < albume.Count; i++)
{
XmlNode filend = doc.CreateElement("file");
XmlNode path = doc.CreateTextNode(albume[i]);
filend.AppendChild(path);
albumend.AppendChild(filend);
}
doc["albumes"].AppendChild(albumend);
doc.Save(Application.StartupPath + "//albumes.xml");
}
catch
{
MessageBox.Show("حدث خطأ أثناء محاولة حفظ بيانات الألبومات");
}
}

السطر الأول يحتوي على إسم الإجراء وإسم المدخل و نوعة string

السطر الخامس تعليمة تحميل الملف إلى كائن doc

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

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

والحذف هنا هو للبيانات القديمة وخزن البيانات الجديدة كأنها إلبوم جديد بنفس الإسم

أما اذا لم يكن الألبوم موجود في الملف فإن كود الحذف لن يفعل شيئاً

لأنه ألوم جديد وبالتالي يضاف إسم هذا الألبوم إلى القائمة المنسدلة في السطر الثاني عشر

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

doc.CreateElement(albumename);

حيث يقوم الكود السابق بإنشاء عقدة جديدة في الملف إسمها هو المدخل albumename وهو إسم الألبوم المراد حفظه

السطر الخامس عشر عبارة for من الصفر إلى عدد عناصر القائمة albume لإنشاء عقد جديدة لكافة عناصرها

السطر السابع عشر عرفنا متغير من نوع عقدة إسمه filend حيث سيقوم بحمل عقدة جديدة إسمها file بعد إستدعاء تعليمة إنشاء العقدة

doc.CreateElement("file");

لاحظ لحد الآن أن لدينا عقدتين , العقدة albumend التي تحمل إسم الألبوم , والعقدة filend التي تحمل إسم file

بقي أن ندخل البيانات إلى العقدة file

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

doc.CreateTextNode(albume[i]);

حيث يستقبل هذه الإجراء مدخل من نوع نص وهو البيانات المراد خزنها في العقدة , وهي العنصر الذي ترتيبة i من القائمة albume

الآن أصبح لدينا ثلاث عقد عقدة albumend التي تحمل إسم الألبوم , والعقدة filend التي تحمل إسم file وعقدة path التي تحمل مسار الملف من عنصر القائمة albume

إلى الآن لم يتم ربط العقد ببعضها البعض فهي إلى حد الآن عقد مستقلة ومنفصلة

يتم ربط عقدة فرعية بعقدة رئيسية من خلال إستدعاء الإجراء AppendChild من العقدة الرئيسية

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

وأصبحت العقدة file تحتوي على بيانات , ثم في السطر العشرين ربطنا العقدة filend بما فيها بالعقدة albumend

وبتكرار العملية لكافة عناصر القائمة albume ستنتج لنا عقدة رئيسية إسمها بإسم المدخل albumename

تحتوي على عدة عقدة فرعية file تحتوي على مسارات الملفات في الألبوم

لاحظ أن عقدة الألبوم حتى الآن لم ترتبط بعقدة رئيسية , بل ربطناها بعقد فرعية فقط

في السطر التانب والعشرين ربطنا العقدة albumend بالعقدة الرئيسية في الملف albumes

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

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

ستنتقل إلى الشفرة , أكتب هذا :


WriteAlbume(ac.Text);


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

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


lv.Items.Clear();
albume.Clear();
ac.Text = "";


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

وفي السطر الثاني قمنا بتنظيف القائمة albume من أي عناصر موجودة مسبقاً

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

شغل البرنامج الآن وقم بتجريب حفظ ألبوم و إسترجاع بياناته

ملاحظة: عند أنشاء ألبوم جديد تأكد من أن إسم الألبوم لا يحتوي على فراغات أو رموز غريبة

لأن أسماء العقد يجب أن لا تحتوي على فراغات أو رموز غريبة وإلا ظهرت رسالة الخطأ .

الواجب

أرسل التطبيق

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

..

حماة النهضة
04-10-2007, 08:37 AM
تفضلي أختي , هذا رابط مباشر (http://www.7oma.com/csharp/DragAndDropOfImage.zip)


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

ما في داعي للشكر أختي , المهم نقدر نفيدكم بشيئ

هذه البرنامج بالفي بي 2005

http://www.7oma.com/csharp/DragDrop.zip


هو كود بسيط بس إن شاء الله يساعدك في شيئ

..

سرمد الزهراء
04-12-2007, 05:44 AM
بسم الله الرحمن الرحيم
اللهم صل على محمد وآل محمد الطيبين الطاهرين
السلام عليكم ورحمة الله وبركاته
اولا ....
:smailes80:
كل عام وانتون بألف ألف خير ....الخ
ولو انها جاءت متأخرة ..ولكن يبقى ليها طعم .....بمناسبة المولد النبوي الشريف
للنبي محمد وحفيده الإمام الصادق عليهم السلام
:smailes79:
....واسبوع الوحدة ....
:smailes80:
أريد ان ارفع واجباتي ......اللي عملتها لكن بالمنتدى كاتب لي لاأستطيع ارفاق ملفات ليش ....ماأدري ويش أسوي ؟
:smailes12:

سرمد الزهراء
04-12-2007, 05:57 AM
في الدرس السابع .....:smailes80:

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


هل هذا يعني انه راح يفحص ان الملف يشتغل ولا لا ..في حال فتح الملف وتشغيله

قد يحدث خطأ في زري التقديم والتأخير إذا تم التأخير لأقل من صفر أو التقديم لأكثر من طول الملف

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

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

كيف ذلك وخاصية FlatStyle....غير موجودة او متوفرة له ....

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

ماهي هذه البيئة ....موجودة عندي بالسي شارب 2005 ....يعني
لأني حاولت اعمل اله موضوع في الدرس عنه لكن مو موجود عندي mainFrom.Designer.Cs
في الإجرائات ...

سرمد الزهراء
04-12-2007, 06:17 AM
في الدرس الثامن
كائن القائمة موجود في فضاء الأسماء System.Collections.Generic لذلك يجب إضافة عبارة using لتضمين كائنات ودوال الفضاء
....هل اضافتنا لهذه العبارة لكي نستطيع تضمين أو وضع أكثر من ملف في اللستة ....
ماذا تعني ...دوال الفضاء ؟
وهل يعني هذا انني كلما أردت اعن اعمل تضمين للملفات ان اعرفه بهذا المتغير دائما System.Collections.Generic

لحسن الحظ يوجد كائن في إطار العمل داخل الفضاء System.IO يقوم بهذا العمل
هل تعني بالفضاء النظام System...
lO.....ماذا يعني هنا ...


The using directive for 'System.Collections.Generic' appeared previously in this namespace
ماذا يعني هذا الخطأ الذي ظهر لي ....
تحت عبارة using System.Collections.Generic;

...لماذا كل المتغيرات التي اضفناها في الدروس خصوصية وهذا الدرس كان المتغير عمومي ...
private Audio ap;
private Video vp;
private AxRealAudioObjects.AxRealAudio rp = new AxRealAudioObjects.AxRealAudio();
private string type;
public List<string> albume = new List<string>();
private int current;

والعمل حقي شغال الحمد الله

سرمد الزهراء
04-12-2007, 06:55 AM
في الدرس التاسع ...عملت كل شي الحمد الله عدل ....لكن
احنا لما نشغل البرنامج وبختار الطريقة التتابعية ...هل هذا يعني اني لما أضيف الملفات الصوتيه راح يشتغل الأول ولما يخلص تلقائيا يشتغل وراه الثاني من دون ماأختاره انا واحدده
انا من فهمي هذه الفكرة التي استنتجتها ...لكن لما شغلت البرنامج واخترت تتابعي يشغل الملف الأول ولما يخلص شريط التنقل خلاص بيوقف عند النهاية ..لازم اروح واحدد اللي بعده عشان يرجع المؤشر للبداية ويشغلها ...وعادي حتى لو اخترت اي ملف مو لازم اللي بعد الملف الأول يشغله ....وحتى لو اخترت عشوائي نفس الشكل بيصير لي واقدر انا على هواي اختار فيه ملف ورا الثاني أو بطريقة عشوائية ...ماحسيت ان شي اختلف بين الأثنين او حتى اثروا حتى ..يمكن اني ماسويته عدل بالمرة ...لكن ماأدري هل هو كده صح عادي ولا لا ...ودي انزل البرنامج لكن ....

بالنسبة للدرس العاشر ...حاولت البداية فيه ..لكن لما اسوي على المشروع ADD newItems>>>
بتطلع لي نافذة ADDnewItems غير عن الموجودة بالدرس...والملفات اله طلعوا لي كثيرين ومختلفين عن الموضوعين بالدرس ...نفس الشكل ...
فاحترت .....ايش الحل ...

اخير كنت سأسئل ولكن سؤال خارجي عن السي شارب ...هل الفلاش ماتخذ اله لونين فقط اسود وابيض ...من الخاصية BackgroundColor
اي اننا مانقدر نحط لخلفيتها الوان ثانية ولا لا ...وهل من الممكن ان نجعلها شفافة ولا لا ..
ثانيا بالنسبة للخاصية Dock >>>انا عملتها وجعلتها fill لكن لما سويت ليها كده اتصير على الفورم كله وحتى زر Button اله حاطتنه بيختفي وماأقدر اسوي للأداة تصغير ..
ولما أشغل البرنامج بيصير مابيشتغل ليش ....ماأدري

حماة النهضة
04-12-2007, 11:13 AM
في الدرس السابع .....

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



هل هذا يعني انه راح يفحص ان الملف يشتغل ولا لا ..في حال فتح الملف وتشغيله



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

وفي تطبيقنا عاملينه يغير موقع المؤشر في شريط التنقل كل ثانية واحدة

يعني المؤقت وظيفته بس يغير موقع المؤشر في شريك التنقل , يعني الموقت هو اللي بيحرك شريط التنقل

قد يحدث خطأ في زري التقديم والتأخير إذا تم التأخير لأقل من صفر أو التقديم لأكثر من طول الملف



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


وفي أزرار التقديم والتأخير بنغير موقع التشغيل 20 خطوة للأمام من خلال هذه التعليمة :

vp.CurrentPosition=vp.CurrentPosition-20;

لكن مثلاً لو وصل التشغيل إلى قبل نهاية الملف بخمس ثواني

وضغطنا على زر التقديم راح يقدم عشرين خطوة , لكن الملف ما باقيله إلا 5 ثواني , فهنا بيظهر خطأ

والخاصيةCurrentPosition تستقبل أي عدد صحيح , يعني مثلاً لو كتبنا التعليمة :

vp.CurrentPosition=-20;

هنا أيضاً راح يظهر خطأ لانو مفيش ملف طولة بالسالب .

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



كيف ذلك وخاصية FlatStyle....غير موجودة او متوفرة له ....

تعديل الخلفية يتم من خلال الخاصية BackColor وليس من الخاصية FlatStyle

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



ماهي هذه البيئة ....موجودة عندي بالسي شارب 2005 ....يعني
لأني حاولت اعمل اله موضوع في الدرس عنه لكن مو موجود عندي mainFrom.Designer.Cs
في الإجرائات ...

المشكلة اللي ذكرتها ما راح تظهر معك لانك بتستخدمي البيئة الكاملة تبع ميكروسوفت

و ملف mainFrom.Designer.Cs ما يظهر إلا للي بيشتغلوا على بيئة Sharp Developer


في الدرس الثامن


كائن القائمة موجود في فضاء الأسماء System.Collections.Generic لذلك يجب إضافة عبارة using لتضمين كائنات ودوال الفضاء
....هل اضافتنا لهذه العبارة لكي نستطيع تضمين أو وضع أكثر من ملف في اللستة ....
ماذا تعني ...دوال الفضاء ؟

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

مثلاً دالة إظهار إظهار الرسالة MessageBox , هي دالة موجوده في مكتبة دوال الدوت نت

والمكتبة هذه تنزل مع الدوت نت فريم وورك وفيها دوال كثيرة مرتبة في ملفات dll

وعشان عدد الدوال بالآلاف كان لازم طريقة لتنظيمهم هشان المستخدم يعرف بالضبط فين يلاقي الدالة اللي يبغاها

فرتبوا الدوال في "مجلدات" داخلية مرتبة حسب وظائف الدوال , مثلاً الدوال اللي تتعامل مع قواعد البيانات

عاملين لها مجلد داخلي إسمه Data داخل مجلد داخلي ثاني إسمه System

فلما نبغى نستخدم إي دالة من الدوال اللي تتعامل مع قواعد البيانات لازم نكتب:

using System.Data;

عشان المعالج يعرف فين مكان الدالة اللي إستخدمناها ويروح ينفذها على طول

وفي تطبيقنا دوال التعامل مع القوائن موجوده في مجلد Generic داخل مجلد Collections داخل مجلد System

يعني أنها موجوده في المجلد System.Collections.Generic لذلك لازم نكتب :

using System.Collections.Generic;

عشان المعالج يعرف فين الدوال بالضبط ويروح ينفذها

احظي أن إحنا بنستخدم كلمة فضاء بدل مجلد

وهل يعني هذا انني كلما أردت اعن اعمل تضمين للملفات ان اعرفه بهذا المتغير دائما System.Collections.Generic

لأ هذا يعتمد على الدوال اللي تبغي تستخدميها مثل ما شرحت

لحسن الحظ يوجد كائن في إطار العمل داخل الفضاء System.IO يقوم بهذا العمل
هل تعني بالفضاء النظام System...
lO.....ماذا يعني هنا ...

الفضاء System.IO هو مجلد داخل يحتوي على دوال التعامل مع الملفات

و IO هي إختصار لـ Input Output أي دوال الإدخال والإخراج


The using directive for 'System.Collections.Generic' appeared previously in this namespace
ماذا يعني هذا الخطأ الذي ظهر لي ....
تحت عبارة using System.Collections.Generic;

هذا الخطأ يعني أنك كتبتي جملة using مرتين لنفس فضاء الأسماء يعني كتبتي التعليمة هذه مرتين :

using System.Collections.Generic;

لازم تكون مرة واحدة بس


...لماذا كل المتغيرات التي اضفناها في الدروس خصوصية وهذا الدرس كان المتغير عمومي ...


private Audio ap;
private Video vp;
private AxRealAudioObjects.AxRealAudio rp = new AxRealAudioObjects.AxRealAudio();
private string type;
public List<string> albume = new List<string>();
private int current;


والعمل حقي شغال الحمد الله

لأن كل المتغيرات السابقة كنا نستخدمها في نفس النافذة , النافذة الرئيسية

لكن المتغير albume راح نستخدمه في نافذة ثانية , نافذة الألبومات لذلك لازم نعمله من نوع متغير عمومي

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

نعم لما تختاري الطريقة التتابعية راح يشتغلوا الملفات ورا بعض آلياً من دون ما تختاري الملف

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

في الدرس راجعي هذا الجزء :

من نافذة الخصائص إختر خصائص الأحداث وانقر مزدوجاً أمام الحدث ValueChanged:

http://www.7oma.com/csharp/images/image9-7.jpg

ستنتقل إلى شفرة البرنامج إلى إجراء TrackBar1ValueChanged هذا الإجراء يتم تنفيذه في كل مرة تتغير فيها قيمة شريط التنقل

حيث من المفترض ان نستدعي إجراء إختيار الملف التالي هنا :


void TrackBar1ValueChanged(object sender, EventArgs e)
{
//إستدعاء إجراء إختيار الملف التالي
}

إنسخ الكود التالي إلى داخل الإجراء TrackBar1ValueChanged :



int last;
if (type == "R")
{
last = trackBar1.Maximum - 1000;
}
else
{
last = trackBar1.Maximum - 1;
}
if (trackBar1.Value > last)
{
SetNext();
}

حيث يصبح الإجراء TrackBar1ValueChanged هكذا :



void TrackBar1ValueChanged(object sender, EventArgs e)
{
int last;
if (type == "R")
{
last = trackBar1.Maximum - 1000;
}
else
{
last = trackBar1.Maximum - 1;
}
if (trackBar1.Value > last)
{
SetNext();
}
}

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

بالنسبة للدرس العاشر ...حاولت البداية فيه ..لكن لما اسوي على المشروع ADD newItems>>>
بتطلع لي نافذة ADDnewItems غير عن الموجودة بالدرس...والملفات اله طلعوا لي كثيرين ومختلفين عن الموضوعين بالدرس ...نفس الشكل ...
فاحترت .....ايش الحل ...


الأختلاف في الشكل فقط بين بيئة Sharp Developer و بيئة ميكروسوفت , في بيئت ميكروسوفت أتبعي الخطوات التالية :

http://www.7oma.com/csharp/new.JPG

اخير كنت سأسئل ولكن سؤال خارجي عن السي شارب ...هل الفلاش ماتخذ اله لونين فقط اسود وابيض ...من الخاصية BackgroundColor
اي اننا مانقدر نحط لخلفيتها الوان ثانية ولا لا ...وهل من الممكن ان نجعلها شفافة ولا لا ..
ثانيا بالنسبة للخاصية Dock >>>انا عملتها وجعلتها fill لكن لما سويت ليها كده اتصير على الفورم كله وحتى زر Button اله حاطتنه بيختفي وماأقدر اسوي للأداة تصغير ..

عندي حل بسيط , بعد ما تضيفي أداة الفلاش , ضيفي أداة Panel للفورم

وعدلي خاصة Dock في البانيل إلى Bottom , والزر حطيه داخل البانيل مش داخل الفورم

بعدين إختاري إداة الفلاش وبالزر اليمين إختاري BringToFront

http://www.7oma.com/csharp/dock.JPG

بهذه الطريقة لو تكبر أداة الفلاش ما راح تغطي على الزر

..

سرمد الزهراء
04-13-2007, 04:33 PM
السلام عليكم ورحمة الله وبركاته
أخي واستاذي الكريم
شكرا جزيلا على التوضيح وفقكم الله لكل خير ...
ان شاء الله راح اعمل اله قلتوا عنه بالدرس التاسع وان شاء الله بيستوي معايه ...
انا راح اضع الدروس التي لم اضعها ...على الرابط وهناك اضغط داونلود التي في المستطيل
ثم اضغط ...
if it doesn't, please click here to start it now
وراح يتحمل ان شاء الله
تطبيق الدرس الرابع
1608157515801576 15751604158315851587 15751604158315851587 157516041585157515761593.zip - 0.12MB (http://www.zshare.net/download/1608157515801576-15751604158315851587-15751604158315851587-157516041585157515761593-zip-86u.html)
تطبيق الدرس السابع
1608157515801576 15751604158315851587 157516041587157515761593 15781591157616101602 2.zip - 0.61MB (http://www.zshare.net/download/1608157515801576-15751604158315851587-157516041587157515761593-15781591157616101602-2-zip-u9n.html)
تطبيق الدرس الثامن
1608157515801576 15751604158315851587 157516041579157516051606 15781591157616101602 2.zip - 0.52MB (http://www.zshare.net/download/1608157515801576-15751604158315851587-157516041579157516051606-15781591157616101602-2-zip-sk0.html)
واعتذر عن كثرة اسئلتي واستفساراتي ...وعلى الله الأجر ...
انا سئلت عن الفلاش هل تمتلك خاصية للألوان يمكن منها تلوين الأداة غير اللونين الأبيض والأسود ..وهل بالإمكان ان تصبح شفافة ..ولا لا ..
..في الأخير ادعوا لي بالتوفيق راح اتغيب عن الدروس اسبوعين ان شاء الله في خير
امتحاناتي تبتدا هذا الأسبوع ...
الا ان شاء الله ووفقت لدخول المنتدى اذا كنت مو مشغولة
السلام عليكم ورحمة الله وبركاته

mister_lira
04-14-2007, 12:46 AM
السلام عليكم و رحمة الله
شكرا لك أخي الكريم على هذا الجهد الجبار و الشرح الوافي
أود أن أنضم اليكم في هذه الدروس الجميلة بالرغم من أني أتيت متأخرا و لكن لأن تأتي متأخرا خير لك من أن لا تأتي و أنا لدي إطلاع على لغة ال c# و لكني أعمل في بيئة ال console application و لذلك سأتمكن إنشاء الله من اللحاق بركبكم .
و أسأل الله أن يتقبل منا و منكم و ان يجعل أعمالنا خالصة لوجهه الكريم .

mister_lira
04-14-2007, 02:04 AM
السلام عليكم
الرجاء شرح كيفية إرسال التطبيقات و شكرا

حماة النهضة
04-14-2007, 01:08 PM
السلام عليكم ورحمة الله وبركاته
أخي واستاذي الكريم
شكرا جزيلا على التوضيح وفقكم الله لكل خير ...
ان شاء الله راح اعمل اله قلتوا عنه بالدرس التاسع وان شاء الله بيستوي معايه ...
انا راح اضع الدروس التي لم اضعها ...على الرابط وهناك اضغط داونلود التي في المستطيل
ثم اضغط ...
if it doesn't, please click here to start it now
وراح يتحمل ان شاء الله
تطبيق الدرس الرابع
1608157515801576 15751604158315851587 15751604158315851587 157516041585157515761593.zip - 0.12MB (http://www.zshare.net/download/1608157515801576-15751604158315851587-15751604158315851587-157516041585157515761593-zip-86u.html)
تطبيق الدرس السابع
1608157515801576 15751604158315851587 157516041587157515761593 15781591157616101602 2.zip - 0.61MB (http://www.zshare.net/download/1608157515801576-15751604158315851587-157516041587157515761593-15781591157616101602-2-zip-u9n.html)
تطبيق الدرس الثامن
1608157515801576 15751604158315851587 157516041579157516051606 15781591157616101602 2.zip - 0.52MB (http://www.zshare.net/download/1608157515801576-15751604158315851587-157516041579157516051606-15781591157616101602-2-zip-sk0.html)
واعتذر عن كثرة اسئلتي واستفساراتي ...وعلى الله الأجر ...
انا سئلت عن الفلاش هل تمتلك خاصية للألوان يمكن منها تلوين الأداة غير اللونين الأبيض والأسود ..وهل بالإمكان ان تصبح شفافة ..ولا لا ..
..في الأخير ادعوا لي بالتوفيق راح اتغيب عن الدروس اسبوعين ان شاء الله في خير
امتحاناتي تبتدا هذا الأسبوع ...
الا ان شاء الله ووفقت لدخول المنتدى اذا كنت مو مشغولة
السلام عليكم ورحمة الله وبركاته

آسف نسيت أرد على هذا السؤال

للأسف لا يمكن تلوين الخلفية غير بالأسود أو الأبيض , ولا يمكن ان تكون شفافة

هذه القيود كلها إن شاء الله راح تنحل لما ينتجوا أداة فلاش بتقنية الدوت نت

سمعت أن مكروميديا بتشتغل فيها الآن , والمسأله كم أسبوع وتجهز , هذا إذا ما جهزت فعلاً

و موفقه أختي في الإمتحانات إن شاء الله

..

حماة النهضة
04-14-2007, 08:39 PM
الدرس الثاني عشر

تحسين وظائف التطبيق

من البديهايات في البرمجة أن يحتوي أي تطبيق على شوائب bugs

تحد من إداء التطبيق مهامة على أكمل وجه

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

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

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

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

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

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

حيث يطلب من مستخدمي النسخ التجريبة أرسال أي أخطاء قد تواجههم إلى المطور

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

والشوائب عادة ما تكون إحدى ثلاثة:

1-أخطاء الشوائب برمجية

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

وتسبب خلل في عمل البرنامج , كأن يتوقف البرنامج فجأة أو يقوم بعمليات غير منطقية

وكمثال على هذه الشوائب :

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

ثم إفتح نافذة الألبومات وأختر أحد الألبومات , ثم أختر إلغاء الأمر من نافذة الألبومات

المفروض بما أنك ألغيت الأمر أن لا يتغير شيئ في قائمة التشغيل في النافذة الرئيسية

ولكن القائمة تغيرة رغم أنك إخترت "إلغاء الأمر"

هذا الخطأ يعتبر من الشوائب البرمجية , وعلى المطور أن يبحث عن مكان الخطأ ويصححة

مكان الخطأ هنا هو إجراء النقر على زر "التحكم بالأبومات"

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

ستجد هذا الكود :

try
{
albumes frm = new albumes();
frm.albume = albume;
frm.ShowDialog();
albume = frm.albume;
FillList();
LoadFile(albume[0]);
SetTrackBar();
PlayFile();
}
catch
{
MessageBox.Show("حدث خطأ أثناء محاولة تشغيل الملف المحدد");
}

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

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

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

هناك خطأ آخر هنا في السطر الرابع :

frm.albume = albume;

هذه التعليمة تساوي بين القائمة albume في كلا النافذتين , بحيث إذا تغير شيئ في قائمة albume في هذه النافذة

سيتغير نفس الشيئ في قائمة albume في النافذة الألبومات والعكس صحيح أيضاً

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

وإنما نسخ عناصر القائمة في هذه النافذة إلى القائمة في النافذة الآخرى , والنسخ غير المساواة

المساواة تعني أن كلا النافذتين تحمل نفس القيمة دائماً

فإذا ساويت بين قائمتين ثم عدلت في أي منهما فإن الأخرى بالضرورة ستتعدل تلقائيا

أما النسخ فإذا نسخت قائمة من أخرى وعدلت في أي منها فإن الأخرى لا تتأثر لأنهما مستقلتان عن بعض

وهذا ما نحتاجه هنا , و النسخ في القوائم يتم عبر الإجراء AddRange كما شرحناه سابقاً

وبالتالي فالمفروض إستبدال السطر الرابع بهذا السطر :

frm.albume.AddRange(albume);

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

try
{
albumes frm = new albumes();
frm.albume.AddRange(albume);
frm.ShowDialog();
if (frm.DialogResult == DialogResult.OK)
{
albume = frm.albume;
FillList();
LoadFile(albume[0]);
SetTrackBar();
PlayFile();
}
}
catch
{
MessageBox.Show("حدث خطأ أثناء محاولة تشغيل الملف المحدد");
}


لا حظ داخل حاصرتي if أنا ساوينا بين قائمتين , وهنا المساواة هي المطلوبة وليس النسخ

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

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

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

ولحل هذه المشكلة أذهب إلى كود زر ملئ الشاشة , وأضف جملة try :

try
{
vp.Fullscreen = true;
}
catch
{
MessageBox.Show("لا يوجد ملف فيديو ");
}


2-إخطاء نقص في الوظائف

وهي الأخطاء التي لا تنتج عن خطأ في الكود وإنما تنتج عن نقص في وظائف التطبيق

أي أن التطبيق لا يحقق جميع الوظائف المطلوبة من المستخدم , ويتم حل هذه المشكلة بالتحديث Updating

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

كمثال على هذه الأخطاء في تطبيقنا :

المستخدم عادة ما يفضل طريقة لإختيار سريع للألبوم الذي يريد تشغيلة

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

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

نحتاج لذلك إلى كائن من نوع Xml******** ولذلك يجب إضافة عبارة using كما فعلنا في نافذة الألبومات

http://www.7oma.com/csharp/images/image11-5.jpg

ثم نعرف متغير عام إسمه doc من نوع Xml******** تحت تعريف القائمة albume كما فعلنا في نافذة الألبومات

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

http://www.7oma.com/csharp/images/image11-3.jpg

وقم بتغيير الخاصية Name إلى ac و الخاصية Text إلى "إختر الألبوم"

يجب تحميل أسماء الألبومات بمجرد فتح البرنامج , لذلك سنكتب شفرة تحميل أسماء الألبومات في حدث تحميل النافذة كما فعلنا في نافذة الألبومات

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

إنسخ هذا الكود بين الحاصرتين :

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;
}

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

نحتاج لقراءة ملفات الألبوم المحدد إلى إجراء ReadAlbume الموجود في نافذة الألبومات

إنسخ كود الإجراء ReadAlbume إلى شفرة النافذة الرئيسية وتأكد من أنه خارج أي إجراء آخر :

void ReadAlbume(string albumename)
{
try
{
doc.Load(Application.StartupPath + "//albumes.xml");
XmlNode filend = doc["albumes"][albumename].FirstChild;
albume.Clear();
while (filend != null)
{
albume.Add(filend.InnerText);
filend = filend.NextSibling;
}
FillList();
}
catch
{
MessageBox.Show("حدث خطأ أثناء محاولة إسترجاع بيانات الألبومات");
}
}

كما نحتاج إيضاً لإضافة كود إستدعاء الإجراء ReadAlbume في حدث التغيير في القائمة المنسدلة

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

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

try
{
ReadAlbume(ac.Text);
FillList();
LoadFile(albume[0]);
SetTrackBar();
PlayFile();
}
catch
{
MessageBox.Show("حدث خطأ أثناء محاولة تشغيل الملف المحدد");
}

السطر الثالث يستدعي الإجراء ReadAlbume ليتم تحميل ملفات الملف المحدد إلى القائمة albume

والسطر الرابع يقوم بإستدعاء الإجراء FillList لتحميل عناصر albume إلى قائمة التشغيل

والسطر الخامس يقوم بتحميل أول عنصر من عناصر القائمة

والسادس يضبط شريك التنقل و السابع يشغل الملف ..

تابع الدرس في الرد التالي ..

حماة النهضة
04-14-2007, 08:40 PM
3- أخطاء في الواجهات

وهي الأخطاء التي لا تؤثر على عمل البرنامج ولكن تؤثر على الواجهات الصورية للنوافذ

وهذه الأخطاء عادة ما يتم حلها بواسطة التحديثات Updating

كمثال على هذه الأخطاء من تطبيقنا :

إفتح التطبيق , وانقر على زر تكبير النافذة في شريط العنوان

ستلاحظ أن جميع كائنات النافذة محصورة في الزاوية العليا اليسرى من النافذة

حيث أن تكبير النافذة لم يقم بتعديل حجم و أماكن الكائنات

ولحل هذه المشكلة سنستخدم خاصية واحدة في جميع الكائنات : Anchor

معنى الكلمة "المرساه" ومن معناها يتبين لنا وظيفتها

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

فمثلاً لو ربطت كائن قائمة التشغيل بيمين النافذة , وقمت بتكبير النافذة فستلاحظ أن مكانها تغير وإنزاح نحو يمين النافذة

أما إذا ربطت أي كائن بجانبين متعاكسين , كأن تربط شريط التنقل بيمين ويسار النافذة

وقمت بتكبير النافذة ستلاحظ أن حجم شريط التنقل قد تغير لأنه مرتبط بإتجاهين متعاكسين وهذا يؤدي إلى "مط" الكائن

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

وغير خاصية Anchor إلى Top, Bottom, Left, Right

http://www.7oma.com/csharp/images/image12-1.jpg

لاحظ أنا ربطنا كائن الشاشة بجميع جوانب النافذة وبالتالي فحجمها سيتمدد في جميع الجهات

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

إختر صندوق "طريقة التشغيل" وغير الخاصية anchor إلى : Bottom, Right

زر التحكم بالألبومات : Bottom, Right

القائمة المنسدلة لإختيار الألبوم : Top, Right

قائمة التشغيل : Top, Bottom, Right

شريط التنقل : Bottom, Left, Right

أزرار التشغيل : Bottom, Left

الآن شغل التطبيق , وجرب تغيير حجم النافذة ستلاحظ أن الكائنات تغير من حجمها و مكانها بحسب حجم النافذة

أيضاً كمثال على هذه الأخطاء , شكل شريط التنقل الكبير , والمشوه

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

وذلك بإستخدام كائن النص الثابت Label , إفتح تصميم النافذة الرئيسية ومن صندوق الأدوات إسحب كائن Label مرتين

وقم بتغيير الخاصية BackColor في كليهما إلى Transparent من تبويب Web وإحذف أي كلمة أمام خاصية Text

ثم قم بتغطية الأجزاء الزائدة من شريط التنقل ولا تنسى أن تغير الخاصية Anchor فيهما كما هي في شريط التنقل

أيضاً يمكن أن تغير أيقونه التطبيق بإختيار النافذة الرئيسية وتغيير الخاصية Icon

لتضيف لمسة إحترافية على التطبيق قم بتغيير الصور على الأزرار من خلال الخاصية Image

وتغيير خلفية النافذة من خلال الخاصية BackGroundImage

ملاحظة : هناك خطأ برمجي في بيئة تطوير ميكروسوفت وهو أن خلفية النافذة لا تظهر إذا كانت الخاصية RightToLeft تساوي True


سيبدو شكل التطبيق بعد هذه التعديلات هكذا :

http://www.7oma.com/csharp/images/image12-2.jpg

الواجب

إختبر التطبيق وصحح أي أخطاء برمجية أخرى

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

.نهاية الدروس.

تم بحمد الله

..

ختاماً :

نتمنى أن نكون قد وفقنا , في تقديم لغة C#2005 وشرح بعض مبادئها

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

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

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

فإن أصبنا فمن الله , وإن أخطأنا فمن أنفسنا والشيطان

لا تنسونا من صالح دعائكم , وفقكم الله لما يحب ويرضى

وصلى الله على سيدنا محمد وعلى آله وصحبه أجمعين

..

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

..

حماة النهضة
04-14-2007, 08:59 PM
السلام عليكم
الرجاء شرح كيفية إرسال التطبيقات و شكرا


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

إرسال التطبيق كما هو مشروح في نهاية الدرس الأول

ضغط مجلد bin وإرسالة بواسطة المرفقات في المنتدى

أو بإستخدام أحد مواقع تحميل الملفات و أفضلها

http://www.9q9q.com/

ثم أرسال الرابط برد في الموضوع

..
.

mister_lira
04-14-2007, 11:30 PM
السلام عليكم
شكرا أخي على الرد

التطبيق الأول :
http://up.9q9q.net/up/index.php?f=GjeGdB00z

التطبيق الثاني :
http://up.9q9q.net/up/index.php?f=LojiEdihg

التطبيق الثالث:
http://up.9q9q.net/up/index.php?f=hJEKhF884

حماة النهضة
04-15-2007, 08:59 AM
السلام عليكم
شكرا أخي على الرد

التطبيق الأول :
http://up.9q9q.net/up/index.php?f=GjeGdB00z

التطبيق الثاني :
http://up.9q9q.net/up/index.php?f=LojiEdihg

التطبيق الثالث:
http://up.9q9q.net/up/index.php?f=hJEKhF884

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

ما شاء الله رائعة تطبيقاتك أخي :smailes91:

يسعدني أن تكمل معنا بقية الدروس :)

..

خلود12345
04-15-2007, 07:58 PM
لو ممكن تقولي كيف اجيب الشفرة حقت Microsoft Visual Basic 2005 Express Edition

حماة النهضة
04-16-2007, 06:12 AM
لو ممكن تقولي كيف اجيب الشفرة حقت Microsoft Visual Basic 2005 Express Edition

أختي أظن أني لم أفهم سؤالك تماماً ...

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

..

اماني الاماني
04-16-2007, 09:11 AM
أستاذي الفاضل والعزيز لو كان كلمة شكراً توفي حقك كنت شكرتك ألي يوم الممات, وأنا اعرف أنها ما توفي حقك. أنت ما تخيل كبر المساعدة التي قدمتها لي و لأنكن إنسان فاضل وكريم أنت وأصحاب الكرام أني أتجرئ واطلب المساعدة من جديد وهي الشفرة التي تفضلت مشكوراً بتقديمها(شفرة لعبة البزل ب2005vb) ما اؤفة حاجتي لكن عندي لعبة نفس الشي الذي احتاجه وعاوزة ادرجها كملف مرفق حتي تطلع عليها وشوف الشفرةاللي انا محتاجاها لكن ما اعرف كيف ادرجها ممكن مساعدتي في اقرب وقت ممكن ,و إن الله لا يضيع أجر من أحسن عملا. والشكر مرة أخرى .

اماني الاماني
04-16-2007, 09:23 AM
أستاذي الفاضل والعزيز لو كان كلمة شكراً توفي حقك كنت شكرتك ألي يوم الممات, وأنا اعرف أنها ما توفي حقك. أنت ما تخيل كبر المساعدة التي قدمتها لي و لأنكن إنسان فاضل وكريم أنت وأصحاب الكرام أني أتجرئ واطلب المساعدة من جديد وهي الشفرة التي تفضلت مشكوراً بتقديمها(شفرة لعبة البزل ب2005vb) ما اؤفة حاجتي لكن عندي لعبة نفس الشي الذي احتاجه وعاوزة ادرجها كملف مرفق حتي تطلع عليها وشوف الشفرةاللي انا محتاجاها لكن ما اعرف كيف ادرجها ممكن مساعدتي في اقرب وقت ممكن ,و إن الله لا يضيع أجر من أحسن عملا. والشكر مرة أخرى .

اماني الاماني
04-16-2007, 09:26 AM
أستاذي الفاضل والعزيز لو كان كلمة شكراً توفي حقك كنت شكرتك ألي يوم الممات, وأنا اعرف أنها ما توفي حقك. أنت ما تخيل كبر المساعدة التي قدمتها لي و لأنكن إنسان فاضل وكريم أنت وأصحاب الكرام أني أتجرئ واطلب المساعدة من جديد وهي الشفرة التي تفضلت مشكوراً بتقديمها(شفرة لعبة البزل ب2005vb) ما اؤفة حاجتي لكن عندي لعبة نفس الشي الذي احتاجه وعاوزة ادرجها كملف مرفق حتي تطلع عليها وشوف الشفرةاللي انا محتاجاها لكن ما اعرف كيف ادرجها ممكن مساعدتي في اقرب وقت ممكن ,و إن الله لا يضيع أجر من أحسن عملا. والشكر مرة أخرى .

علي طبره
04-16-2007, 10:04 AM
بارك الله بيكم ومشكورين

:smailes21: :smailes21: :smailes21: :smailes21: :smailes21:

علي طبره
04-16-2007, 10:05 AM
بارك الله بيكم وانا جدا ممنووووووووووون منكم

اماني الاماني
04-16-2007, 10:58 AM
استاذي الكريم اسفه
عرفت كيف اضع الرابط
هذه اللعبة التي أرجو منكم الإطلاع عليها
the best game eng_awfa.zip - 0.36MB (http://www.zshare.net/download/the-best-game-eng_awfa-zip.html)
هي نفس فكرة اللعبة

خلود12345
04-16-2007, 12:59 PM
يا اخي العزيز مشكوور وماقصرت بس انا عندي كتاب تعليم الفجيول بيسك يقول لازم اجيب الشفرة لصنع لوحة تحكم

انا ولد منا بنت

mister_lira
04-17-2007, 01:09 AM
السلام عليكم و رحمة الله و بركاته
شكرا لك أخي الكريم على متابعة أعمالي رغم تأخري عنكم و أسأل الله أن يجعل عملك في ميزان حسناتك

و هذا التطبيق الرابع
http://up.9q9q.net/up/index.php?f=YwVmOk610

sultansma
04-17-2007, 05:15 AM
الف الف شكر على الموضوع الرائع

المواطن عربي
04-17-2007, 06:51 AM
اخي العزيز يوفي عند الضغط على Recordsource يظهر مربح الحوار في المنتصف مكتوب فيه couldnt find file db97.mdb ارجوا المساعده مع جزيل الشكر

حماة النهضة
04-17-2007, 09:02 AM
استاذي الكريم اسفه
عرفت كيف اضع الرابط
هذه اللعبة التي أرجو منكم الإطلاع عليها
the best game eng_awfa.zip - 0.36MB (http://www.zshare.net/download/the-best-game-eng_awfa-zip.html)
هي نفس فكرة اللعبة


أطلعت على اللعبة ولم أجد الكود

عموما أتمنى أن يساعدك هــذا التطبيق (http://www.7oma.com/csharp/Puzzle.zip)

..
.

حماة النهضة
04-17-2007, 09:03 AM
يا اخي العزيز مشكوور وماقصرت بس انا عندي كتاب تعليم الفجيول بيسك يقول لازم اجيب الشفرة لصنع لوحة تحكم

انا ولد منا بنت

آسف أخي , لم أفهم ماذا تقصد بلوحة التحكم , هل تقصد الوصول إلى لوحة تحكم النظام من خلال البرنامج؟

..

خلود12345
04-17-2007, 11:22 AM
اول طريقة لصنع برنامج تصنع لوحة تحكم النضام للبرنامج الي نبي نصنع صح ولا لا

حماة النهضة
04-17-2007, 01:02 PM
اخي العزيز يوفي عند الضغط على Recordsource يظهر مربح الحوار في المنتصف مكتوب فيه couldnt find file db97.mdb ارجوا المساعده مع جزيل الشكر

أعتقد أنك تعمل على برنامج قواعد بيانات , إذا كان كذلك فتحقق من وجود ملف قواعد البيانات المسمى db97.mdb

تحقق من وجوده في نفص المجلد الموجود بع ملفت DLL أو ملفات المشروع exe

..

حماة النهضة
04-17-2007, 01:06 PM
اول طريقة لصنع برنامج تصنع لوحة تحكم النضام للبرنامج الي نبي نصنع صح ولا لا

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

أخي لو تراجع تطبيق الدرس الأول أعتقد أنك تجد الإجابة على سؤالك بالتفصيل الممل

..

mister_lira
04-17-2007, 03:32 PM
السلام عليكم
شكرا لك أستاذي الكريم على متابعة أعمالي رغم تأخري
و هذا التطبيق الخامس
http://up.9q9q.net/up/index.php?f=yVvy0V9a1

حماة النهضة
04-17-2007, 06:37 PM
السلام عليكم و رحمة الله و بركاته
شكرا لك أخي الكريم على متابعة أعمالي رغم تأخري عنكم و أسأل الله أن يجعل عملك في ميزان حسناتك

و هذا التطبيق الرابع
http://up.9q9q.net/up/index.php?f=YwVmOk610


السلام عليكم
شكرا لك أستاذي الكريم على متابعة أعمالي رغم تأخري
و هذا التطبيق الخامس

http://up.9q9q.net/up/index.php?f=yVvy0V9a1



عليك المهم أنك تطبق وتستفيد و الدروس ستظل هنا في أي وقت تطبقها

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

تمام تطبيقاتك كلها صحيحة

الرابع والخامس , واصل ^^

mister_lira
04-17-2007, 08:32 PM
السلام عليكم
الله يبارك فيك أستاذنا الكريم
و نحنا معك للنهاية إذا الله راد
و هذا التطبيق السادس
http://up.9q9q.net/up/index.php?f=nKkyyvgBb

حماة النهضة
04-18-2007, 08:02 AM
السلام عليكم
الله يبارك فيك أستاذنا الكريم
و نحنا معك للنهاية إذا الله راد
و هذا التطبيق السادس
http://up.9q9q.net/up/index.php?f=nKkyyvgBb

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

تطبيقك صحيح , إن شاء تواصل معنا للنهاية

..
.

AJAX
04-18-2007, 12:16 PM
شكرا لك استاذي الفاضل معهلم وبارع جدا بايصال المعلومة
بارك الله فيك .

حماة النهضة
04-18-2007, 03:13 PM
شكرا لك استاذي الفاضل معهلم وبارع جدا بايصال المعلومة
بارك الله فيك .

وفيك بارك الله يا أخي وجزاك الله خيراً

الحمدلله التوفيق والفضل من الله


..
.

_Killer_
04-18-2007, 03:42 PM
thnx man For This Learn

azedine
04-19-2007, 11:14 PM
merci merci merci

اماني الاماني
04-24-2007, 06:33 AM
سامحنا أخوي الكريم على الإزعاج الشفرة اللي عطيتنا إياها حلوة بس إحنا نبغي أن أجزاء الصورة تكون في بانل( panel ) مو علي الفروم خارج الفروم
واحنا نسحب القطعة الى مكان الترتيب وحتى لو كانت القطعة ليست في مكانها الصحيح نقدر نسحبها الى أي مكان موجود في الفورم او خارج الفرم وشكراً

nmrmohammed
04-24-2007, 08:52 AM
بسم الله توكلت على الله ولا حول ولا قوة إلا بالله
اسأل الذي جمعنا في دنيا فانية أن يجمعنا ثانية في جنة قطوفها دانية
الحمد لله انا ماشى فى الدروس كويس بس ليا بعض الاسئلة يارب تقدر تجاوبنى عليها وجزاك الله خيرا
1- ما هى دلالة الالوان فى السى شارب حيث تظهر كلمات باللون الاحمر والاخضر والازرق والاسود فى واجهة البرنامج؟
2-اريد شرح مبسط للاكواد الابتدائية الثابتة فى اى برنامج يتم تكوينة
3-ياريت تشرح بعض الكائنات الشائعة الاستخدام بالتفصيل فى اقرب وقت ممكن او لو عندك بعض الكتب المفيدة فى هذة الجزئية توضعها
وجزاك الله خيرا بكل حرف تكتبة تفيد بة المسلمين
الله يسعدك و للخير يرشدك و بالجنه يوعدني و يوعدك

NewYac
04-24-2007, 06:57 PM
Salam
Baraka Elaho fika Wa Djazaka Elaho khairan.
I hope that you helpe me in my project of database
Are you oK ?
Salam

Igora
04-25-2007, 01:21 AM
جزاك الله كل خير واعانك على اكمال المسيرة :)

اماني الاماني
04-25-2007, 08:57 AM
اسفه اخي اهذا التطبيق يتحمل معاي لكن ما ينفك الضغط ممكن يكون الملف معطوب :smailes108:

مسلم محب cresent
04-25-2007, 10:09 AM
السلام عليكم ورحمة الله وبركاته
جزاكم الله خيرا
أنا محتاج sharp develop

حماة النهضة
04-25-2007, 04:57 PM
أماني

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

طيب جربي هذا التطبيق :

http://www.zshare.net/download/puzzle-zip.html



nmrmohammed


1- ما هى دلالة الالوان فى السى شارب حيث تظهر كلمات باللون الاحمر والاخضر والازرق والاسود فى واجهة البرنامج؟

الألوان في بيئة التطوير كثيرة جدا قد تصر إلى 200 لون مختلف

وكل بيئة تطوير تختلف عن الأخري في معاني الألوان

لكن من الألوان الشائعة و المتعارف عليها :

الأحمر : نص أو ساسلة نصية

الأخضر : تعليق , أو كود لن يتم ترجمته

الأزرق : كلمة مجوزة في قواعد اللغة

الأسود : كود عادي بواسطة الكستخدم

الرمادي : كائن أو كلاس في بيئة التطوير


2-اريد شرح مبسط للاكواد الابتدائية الثابتة فى اى برنامج يتم تكوينة

لو تابعت معنا الدروس ستجد مبتغاك , فالشرح المبسط لا ينفع في هذه الحالة

3-ياريت تشرح بعض الكائنات الشائعة الاستخدام بالتفصيل فى اقرب وقت ممكن او لو عندك بعض الكتب المفيدة فى هذة الجزئية توضعها


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

و لكن عليك أن تبحث عن المزيد إذا أردت التعمق في اللغة

وهذه كتابين أرجو أن تستفيد منهما :


C# Programming for the Absolute Beginner

http://rapidshare.com/files/5313256/L-C-S_05.rar

password :www.vanguardnetwork.info

..

Beginning C# Game Programming 2005.pdf

http://rapidshare.com/files/1707634/CsharpGP2005.rar



NewYac


Salam
Baraka Elaho fika Wa Djazaka Elaho khairan.
I hope that you helpe me in my project of database
Are you oK ?
Salam

إذا معي وقت إن شاء الله أساعدك


مسلم محب cresent

السلام عليكم ورحمة الله وبركاته
جزاكم الله خيرا
أنا محتاج sharp develop

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

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

..

nmrmohammed
04-28-2007, 04:15 AM
اكرمك الله اخى فى الله
كنت اود ان اعرف اخى فى الله عن ماذا بعد هذة الدروس هل ستنتهى الدروس عند هذا الحد واين هو هذا الحد فى علم البرمجة وماذا عن المرحلة القادمة وماذا ينقصنا بعد هذة الدروس لكى نصبح مبرمجين محترفين

وفى النهاية كنت اريد منك بعض الطلبات
1-لو عندك بعض المراجع باللغة العربية ياريت ترسل وصلات لها
2- اريد ان اتعلم طريقة التفكير فى برنامج معين وكيف ابدء وليكن البرنامج مثلا برنامج للتعامل مع بيانات مجموعة من المستخدمين وتصنيفهم وتخزين بياناتهم مع اضافة امكانية للبرنامج للبحث والاضافة والمسح

حماة النهضة
04-28-2007, 11:49 AM
اكرمك الله اخى فى الله
كنت اود ان اعرف اخى فى الله عن ماذا بعد هذة الدروس هل ستنتهى الدروس عند هذا الحد واين هو هذا الحد فى علم البرمجة وماذا عن المرحلة القادمة وماذا ينقصنا بعد هذة الدروس لكى نصبح مبرمجين محترفين

وفى النهاية كنت اريد منك بعض الطلبات
1-لو عندك بعض المراجع باللغة العربية ياريت ترسل وصلات لها
2- اريد ان اتعلم طريقة التفكير فى برنامج معين وكيف ابدء وليكن البرنامج مثلا برنامج للتعامل مع بيانات مجموعة من المستخدمين وتصنيفهم وتخزين بياناتهم مع اضافة امكانية للبرنامج للبحث والاضافة والمسح


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

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

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

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

وإن شاء الله في القريب العاجل سنضع لكم روابط كمكتبة متكاملة لمراجع السي شارب

تحتوي على كتب عربية وأجنبية و دروس الفيديو ومراجع أخري مفيدة جداً

..
.

اماني الاماني
04-29-2007, 10:05 AM
شكراً شكراً شكراً شكراً شكراً شكراً شكراً شكراً اخي الكريم علي المساعدة وانا اطلب المساعدة مرة اخرى تذكر اول برنامج (للعبة البزل الرائعة) التي كانت ب#C وبعدين طلبناها بvb.net2005 التي كان فيها 4 بنل وكانت الصورة سيارة صفراء الف شكر عليها لكن اذا فاز اللاعب واكتملت الصورة الصحيحة نريد ان تظهر رسالة تخبر اللاعب انه فاز

قلعة مصر
04-29-2007, 10:20 AM
مشكووووووووووووور

+ abdu +
04-30-2007, 11:49 AM
مشكوووووووووووووووووووور

anoos1973
04-30-2007, 11:57 PM
انا مش هسال على دلالة الالوان لا انا هسال ازاي اخلي اليوزر عند اختيارة للون معين من البانل يقوم البرنامج باخبارة بالاسم الموازي لهذا الرقم

مثلا

0x00FF0000 أزرق
0x000000FF أحمر
0x0000FF00 أخضر
0x0000FFFF أصفر
0x00FFFFFF أبيض
0x00000000 أسود

حماة النهضة
05-01-2007, 11:39 AM
شكراً شكراً شكراً شكراً شكراً شكراً شكراً شكراً اخي الكريم علي المساعدة وانا اطلب المساعدة مرة اخرى تذكر اول برنامج (للعبة البزل الرائعة) التي كانت ب#C وبعدين طلبناها بvb.net2005 التي كان فيها 4 بنل وكانت الصورة سيارة صفراء الف شكر عليها لكن اذا فاز اللاعب واكتملت الصورة الصحيحة نريد ان تظهر رسالة تخبر اللاعب انه فاز

هذا تعديل بسيط في التطبيق

طبعاً هناك طرق كثيرة جداً لعمل المطلوب لكن هذه الطريقة الأسهل

http://www.7oma.com/csharp/DragDrop2.zip



انا مش هسال على دلالة الالوان لا انا هسال ازاي اخلي اليوزر عند اختيارة للون معين من البانل يقوم البرنامج باخبارة بالاسم الموازي لهذا الرقم

مثلا

0x00FF0000 أزرق
0x000000FF أحمر
0x0000FF00 أخضر
0x0000FFFF أصفر
0x00FFFFFF أبيض
0x00000000 أسود

من خلال إستخدام خاصية ToArgb , وهي ترجع رقم صحيح يمثل كود اللون

وإستخدام دالة تحويل العدد الصحيح إلى الصيغة Hex


Color c=Color.Red;
MessageBox.Show(String.Format("{0:x}", c.ToArgb()));

..
.

anoos1973
05-02-2007, 12:34 AM
ياريت توضيح نقطه الصيغة Hex وماهي الصيغ الاخري لاني قد وجدت ان هناك صيغ اخري مثل 65280 ةالتي تعطي اللون الاخضر

وما الفرق بين الصيغ

واتمني ان لا اكون مزعجا

حماة النهضة
05-02-2007, 11:44 AM
ياريت توضيح نقطه الصيغة Hex وماهي الصيغ الاخري


نعرف ان كل لون هو خليط من الألوان الثلاثة الأساسية

وقيمة اللون في أنظمة الحاسوب تحدد شدة اللون من خلال قيمة بين 0 و 255

وعادة ما تكون بالصيغة الست عشرية من 0 إلى FF

في بعض الأحيان يتطلب تحديد اللون قيمة رابعة وهي شدة الوضوح Alpha

حيث يتكون كود اللون من أرعة أجزاء :

1-ألفا

2-الأحمر

3-الأخضر

4-الأزرق

والدالة ToArgb ترجع رقم صحيح يمثل الصيغة العشرية للرقم المكون من قيم الأربعة الإجزاء

مثلاً : إذا كان الفا =5C و الأحمر =0 والأخضر= AF و الأزرق= 23 سيكون كود اللون بالصيغة Hex:

5C00AF23

وبالصيغة العشرية :

1543548707


لاني قد وجدت ان هناك صيغ اخري مثل 65280 ةالتي تعطي اللون الاخضر

الصيغة الأكثر إستخداماً في أنظمة الحاسوب هي الصيغة بثلاثة أجزاء :

1-الأحمر

2-الأخضر

3-الأزرق

ويكون كود اللون في المثال السابق :

00AF23

وبالصيغة العشرية :

44835

أما القيمة 65280 فهي تنتج من تصفير قيم اللون الأحمر والأزرق , و إختيار أعلى قيمة للأخضر :

00FF00

وبالصيغة العشرية :

65280

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

Color Code (http://www.7oma.com/csharp/ColorCode.zip)


http://www.codeproject.com/useritems/Color_Value_Formats/Color_Value_Formats.jpg


..
.

anoos1973
05-02-2007, 05:29 PM
شكرا لك استاذي العزيز

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

السؤال بصورة اخري هل هناك قاعده معينه يمكنني استخدامها لتحويل اللون س مثلا من الطريقة الاولي لاخذ كوده بالطريقة الثانيه

حماة النهضة
05-03-2007, 09:49 AM
شكرا لك استاذي العزيز

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

السؤال بصورة اخري هل هناك قاعده معينه يمكنني استخدامها لتحويل اللون س مثلا من الطريقة الاولي لاخذ كوده بالطريقة الثانيه

للتحويل من RGB إلى ARGB :

أولاً حول قيمة RGB إلى الصيغة Hex

ثم أضف FF في بداية القيمة الناتجة

وللتحويل من ARGB إلى RGB :

حول قيمة ARGB إلى الصيغة Hex

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

..
.

anoos1973
05-03-2007, 10:55 PM
شكرا لكل ردودك الرائعه اخي العزيز واتمني ان لا اكون اثقل عليك

كتبت لي في رد سابق الكود التالي


من خلال إستخدام خاصية ToArgb , وهي ترجع رقم صحيح يمثل كود اللون

وإستخدام دالة تحويل العدد الصحيح إلى الصيغة Hex


Color c=Color.Red;
MessageBox.Show(String.Format("{0:x}", c.ToArgb()));

..
.

بس في نقطه فيه مش فاهمها

وهي ايه المراد ب{0:x}

وارجو ان تعذرني على اسالتي الكثيرة

حماة النهضة
05-04-2007, 12:05 AM
anoos1973

هذه التعليمة تستخدم للتعامل مع النص وصيغ المتغيرات دون تقطيعه

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


string name="anoos";
string site="pramejnet";

MessageBox.Show("Welocme" + name + " to " + site);


الكود السابق سينتج لنا رسالة بالجملة التالية :

Welcome anoos to pramejnet

وبإستخدام التعليمة String.Format يمكن للكود ان يكون أكثر وضوحاً


string name="anoos";
string site="pramejnet";

MessageBox.Show(String.Format("Welcome {0} to {1}",name,site));


أما ما بعد النقطتين فيمثل صيغة المتغير المدخل

فالحرف X يعني الصيغة الست عشرية

والحرف D يعني الصيغة العشرية

وهناك أيضاُ S و G و E

وهذا شرح مفصل للتعليمة :


http://msdn2.microsoft.com/en-us/library/b1csw23d.aspx

..
.

anoos1973
05-04-2007, 12:31 AM
بسم الله ماشاء الله

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

ahmed_mahmoud1
05-04-2007, 02:48 AM
الموضوع يا اخى هايل جدا والله
وانا هنضم معاكم من انهارده ان شاء الله
بس كان عندى اقتراح
ليه متخليش الدروس القديمه كلها فى الموضوع الاساسى بدل ما نقلب فى الصفح
او مثلا فى ملف ورد فى المرفقات وكده يعنى
منتظر ردك ومشكور على الموضوع القيم

حماة النهضة
05-04-2007, 09:22 PM
الموضوع يا اخى هايل جدا والله
وانا هنضم معاكم من انهارده ان شاء الله
بس كان عندى اقتراح
ليه متخليش الدروس القديمه كلها فى الموضوع الاساسى بدل ما نقلب فى الصفح
او مثلا فى ملف ورد فى المرفقات وكده يعنى
منتظر ردك ومشكور على الموضوع القيم

أهلا بك أخي معنا , هناك فهرس للدروس في أول رد في هذا الموضوع

كما أضفنا اليوم في آخر الفهرس ملف يحتوي على جميع الدروس :

http://www.7oma.com/csharp/Full.zip

..
.

anoos1973
05-06-2007, 12:34 AM
استخدمت الكود التالي لكي اختار لون ما من الديالوج كلور
ColorDialog cd=new ColorDialog();
if(cd.ShowDialog()!=DialogResult.OK)
return;

ولكن مشكلتي هي كيف اضع اللون المختار في متغير لكي استخدمه

حاولت كالتالي
Color color=Color.FromArgb(DialogResult);

ولكن هناك خطا

ارجو تصحيح الخطا وشرحه اخي العزيز كما اعتدنا منك

حماة النهضة
05-06-2007, 11:51 AM
استخدمت الكود التالي لكي اختار لون ما من الديالوج كلور
ColorDialog cd=new ColorDialog();
if(cd.ShowDialog()!=DialogResult.OK)
return;

ولكن مشكلتي هي كيف اضع اللون المختار في متغير لكي استخدمه

حاولت كالتالي
Color color=Color.FromArgb(DialogResult);

ولكن هناك خطا

ارجو تصحيح الخطا وشرحه اخي العزيز كما اعتدنا منك


أخي جرب هذا الكود :

Color color=cd.Color;

..
.

Aicha83
05-06-2007, 02:22 PM
السلام عليكم
هل يمكن أن أعرف أين تود دروس Visual C++2005 متقدمة. أرجوكم ساعدوني
و شكرا جزيلا :smailes88:

حماة النهضة
05-06-2007, 09:58 PM
السلام عليكم
هل يمكن أن أعرف أين تود دروس Visual C++2005 متقدمة. أرجوكم ساعدوني
و شكرا جزيلا :smailes88:

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

هذه مجموعة من الدروس بالصوت والصورة (http://msdn2.microsoft.com/en-us/visualc/aa336415.aspx)

وهذه أمثلة لبرامج مفتوحة المصدر (http://msdn2.microsoft.com/en-us/library/1370z17c(VS.80).aspx)


وهذه بعض المنتديات ومواقع المساعدة (http://msdn2.microsoft.com/en-us/visualc/aa431848.aspx)

وهذه بعض دروس How to (http://msdn2.microsoft.com/en-us/library/ms177549(VS.80).aspx)


وبالتوفيق
..
.

mxxxm_0x0
05-07-2007, 02:31 PM
`·.¸¸.·¯`··._.· (السلام عليكم ورحمة الله وبركاته) `·.¸¸.·¯`··._.·

~*¤ô§ô¤*~الــــــف شكر لـك على الموضوع الرائع~*¤ô§ô¤*~ :smailes21: :smailes60:

¨°o.O (مزيد من التقدم) O.o°¨ :smailes95: :smailes80:

{}{}{}{}{دمــــت في خــــــــير}{}{}{}{}
:smailes9:

•·.·°¯`·.·• (و جزاااك الله كل خــــــــــيــــــــر) •·.·°¯`·.·•

anoos1973
05-08-2007, 03:14 AM
اخي العزيز

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

سؤال اخر واتمني ان لا ازعجك

كيف اقوم بحفظ تغيير معين مثلا اضافة القوسين في السؤال السابق في متغير بدون ان ااثر على الريتش بوكس بحيث يظهر الريتش بوكس دون قوسين بحيث استخدم النص بالقوسين في امر اخر
اتمني ان يكون سؤالي مفهوما

حماة النهضة
05-08-2007, 10:49 PM
anoos1973

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

richTextBox1.SelectedText="[" + richTextBox1.SelectedText + "]";


سؤال اخر واتمني ان لا ازعجك

كيف اقوم بحفظ تغيير معين مثلا اضافة القوسين في السؤال السابق في متغير بدون ان ااثر على الريتش بوكس بحيث يظهر الريتش بوكس دون قوسين بحيث استخدم النص بالقوسين في امر اخر
اتمني ان يكون سؤالي مفهوما

إذا كنت تقصد نظام كنظام المنتديات فلا يا أخي النص يحفظ كما هو بأكواده

ولكن عند إظهار النص يتم تحليل الأكواد وإظهار النص فقط

أما إذا كنت تقصد شيئاً آخر , فالأمر بسيط إحفظ النص بمتغير من نوع string قبل أن تغير فيه شيء

ثم أحفظه في متغير آخر بعد ما تغير فيه

..

anoos1973
05-09-2007, 12:40 PM
طيب لو حفظت النص في متغير قبل التغيير وحفظته بعد متغير في متنغير تاني

ازي اخليه لما اغير حاجه في الاول تاني غير اللي غيرته اول مرة يقوم بتغيير نفس الشيء في المتغير التاني اللي نتج اول مرة مع انه ساعتها هيبقى مختلف شوية

يعني مثلا قبل التغيير a :
السلام عليكم ورحمة الله وبركاته
بعد التغيير B:
( السلام عليكم ) ورحمة الله وبركاته
كيف اذا غيرت A تاني بحيث بحيث حطيت قوسين كمان على ورحمة الله وبركاته اجد التغيير حدث في b دون ان يحدث في A

حماة النهضة
05-09-2007, 03:01 PM
طيب لو حفظت النص في متغير قبل التغيير وحفظته بعد متغير في متنغير تاني

ازي اخليه لما اغير حاجه في الاول تاني غير اللي غيرته اول مرة يقوم بتغيير نفس الشيء في المتغير التاني اللي نتج اول مرة مع انه ساعتها هيبقى مختلف شوية

يعني مثلا قبل التغيير a :
السلام عليكم ورحمة الله وبركاته
بعد التغيير B:
( السلام عليكم ) ورحمة الله وبركاته
كيف اذا غيرت A تاني بحيث بحيث حطيت قوسين كمان على ورحمة الله وبركاته اجد التغيير حدث في b دون ان يحدث في A


طيب أنت ليش تغير في A ؟

قبل ما تغير شي في A إنسخه إلى B

وأعمل التغييرات كلها في B

أخي ممكن توضح أيش المطلوب من البرنامج بالضبط

يمكن أفهمك أحسن

..
.

anoos1973
05-09-2007, 04:39 PM
انا عاوز اعمل برنامج فكرته هي هي فكرة البرنامج بتاع ردود المنتدي

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

المشكله عندي في فكرة ان اسجله في متغيرين فينفس الوقت واغير في واحد يقوم مغير في التاني

Cyborg:M
05-10-2007, 07:38 PM
اله يعطيك العافييه

بالتوفيق

anoos1973
05-11-2007, 03:34 PM
ان شاء الله يكون المانع اللي خلانا منشوفكش يومين دلوقتي خير باذن الله

حماة النهضة
05-12-2007, 07:00 AM
انا عاوز اعمل برنامج فكرته هي هي فكرة البرنامج بتاع ردود المنتدي

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

المشكله عندي في فكرة ان اسجله في متغيرين فينفس الوقت واغير في واحد يقوم مغير في التاني

الآن فهمت قصدك ,

لكن لازمك على كذا مترجم Parser

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

وتعملك أكواد زي أكواد المنتدى , والمترجم هذا لما يظهر النص في مربع النص

يستبدل الأكواد بما يقابلها

الأمر من الصعوبه بمكان , وتحتاج وقت كبير لو أفترضنا أنك فهمت طريقة العمل

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

يضيف لك في أول النص :

[ b ]


وفي آخر النص :

[ / b ]

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

<strong>

و

</strong>


..

anoos1973
05-12-2007, 03:52 PM
طيب معلش سؤال غبي شوية

اشمعنا بتقولي اعملها في كلاس مانا مممكن اعملها في اتلبرنامج على طول

حماة النهضة
05-13-2007, 09:01 PM
طيب معلش سؤال غبي شوية

اشمعنا بتقولي اعملها في كلاس مانا مممكن اعملها في اتلبرنامج على طول

عادي ممكن تعلملها في البرنامج

بس الأفضل في كلاس عشان تنظيم البرنامج

وعشان تستخدمه في أكثر من برنامج بكل سهولة

..

anoos1973
05-15-2007, 12:27 AM
عملته على شكل كلاس بس كان عندي سؤال
الكلاس ممكن استخدمها في اكتر من برنامج بس ازاي اعمل للكلاس شكل واستخدمها بالشكل بتاعها في اكتر من برنامج

حماة النهضة
05-15-2007, 09:21 PM
عملته على شكل كلاس بس كان عندي سؤال
الكلاس ممكن استخدمها في اكتر من برنامج بس ازاي اعمل للكلاس شكل واستخدمها بالشكل بتاعها في اكتر من برنامج

إعمله كلاس من نوع UserControl

وضيف له أي أدوات زي الإزرار والقوائم و النصوص ...

..

anoos1973
05-16-2007, 12:21 AM
معلش انا اول مرة اسمع موضوع الكلاس كونترول ياريت تشرحهولنا

yacoub0
05-16-2007, 09:17 AM
http://israblog.nana.co.il/blogread.asp?blog=392363

anoos1973
05-18-2007, 01:13 PM
بالنسبة للدروس انا وصلت للدرس الخامس بس عندي سؤال

ايه الفرق بين الاجراء procedures ,والfunctionمن جهة وال class من جهة اخري

حماة النهضة
05-18-2007, 05:57 PM
معلش انا اول مرة اسمع موضوع الكلاس كونترول ياريت تشرحهولنا

للاسف هذه الخاصية غير موجودة إلا في بيئة Express أو البيئة الكاملة

ومعنى UserControl هو كائن من نوع أداة يصممها المستخدم بنفسه

مثل أداة الزر والقائمة و مربع النص

ويستخدمها في برامج كثيرة , فيمكن إنشاء UserControl تحتوي على مربع نص وزر معاً

وعند إستخدامها في البرنامج تظهر في مربع الإدوات وتسحبها كما تسحب الأدوات الأخرى

ويتم إنشاء هذا النوع من الكلاسات بالنقر باليمين على إسم المشروع في نافذة متصفح المشروع

ثم Add new item ثم من النافذة الناتجة إختر UserControl

ستظهر لك نافذة تصميم تشبه نافذة تصميم الفورم , إسحب إليها أي أدوات تريدها

المربع النص والزر , ولها كود خلف كل إداة تماماً كأنك تصمم فورم


بالنسبة للدروس انا وصلت للدرس الخامس بس عندي سؤال

ايه الفرق بين الاجراء procedures ,والfunctionمن جهة وال class من جهة اخري

سؤال وجيه :)

الفرق أن الإجراءات والدوال لكل منها وظيفة واحدة ولا يوجد لها خصائص

أما الكلاس فله عدة إجراءات ودوال بوظائف متعددة وله أيضاً خصائص مثلاً الكلاس التالي :


class cls1
{
private int n1;
public int n2;

private void showmsg()
{
MessageBox.Show("رسالة من داخل الكلاس خاصة بالكلاس");
}

public void showmsg2()
{
MessageBox.Show("رسالة من داخل الكلاس عامة");
}

}



هذا الكلاس يحتوي على خصائص عامة وخاصة وإجراءات عامة وخاصة

الخاصة private تعني أنه لا يمكن إستخدامها إلى داخل الكلاس

والعامة public فيمكن إستخدامها من خارج الكلاس مثلاً عند تعريف كائن من نوع هذا الكلاس :


cls1 c=new cls1();


يمكن إستخدام الإجراءات والخواص العامة :


c.n2=3;
c.showmsg2();


ولكن لا يمكن إستخدام الخاصة :



c.n1=3;
c.showmsg1();


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

..

anoos1973
05-18-2007, 07:44 PM
بعد انشائي ل userclass وقفت امام مشكلة كيف اخذ هذا التطبيق بحيث استطيع استعماله في اكثر من برنامج

حماة النهضة
05-19-2007, 08:06 AM
بعد انشائي ل userclass وقفت امام مشكلة كيف اخذ هذا التطبيق بحيث استطيع استعماله في اكثر من برنامج

إذا أردت إستخدام الأداة في مشاريع أخرى فيجب نقلها إلى مشروع جديد من نوع Windows Control Library

وعندما تقوم ببناء المشروع Build سينتج ملف من نوع DLL وهو الملف الذي ستستخدمه في المشاريع الأخرى

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

ثم إختر Add Item و من تبويب .NET إختر Browse ثم إختر الملف DLL ثم OK

ستظهر الأداه في صندوق الأدوات ويمكنك إستخدامها كأي أداة أخرى

..
.

anoos1973
05-29-2007, 10:23 AM
عندي سؤال صغير

لو انا عملت في البرنامج فورم تاني ازاي اعمل زرار لما ادوسه يقوم فاتح الفورم التاني

حماة النهضة
05-29-2007, 11:06 PM
عندي سؤال صغير

لو انا عملت في البرنامج فورم تاني ازاي اعمل زرار لما ادوسه يقوم فاتح الفورم التاني


أول شيء يا أخي لازم تعرف الفورم بالأمر

Form2 frm2=new Form2();

الآن عرفنا الفورم التاني بالاسم

frm2


بتعمل زر

و بتكتب الكود التالي في الزر

frm2.show();



ربنا يوفقك

anoos1973
06-07-2007, 01:21 AM
ِكرا لك اخي العزيز
ولديسؤال جديد

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

حماة النهضة
06-07-2007, 04:16 PM
ِكرا لك اخي العزيز
ولديسؤال جديد

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

في حدث النقر على زر البراوس أكتب هذا الكود

openFileDialog1.ShowDialog();
Image im = Image.FromFile(openFileDialog1.FileName);
if (im.Height > pictureBox1.Height || im.Width > pictureBox1.Width)
{
pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
}
else
{
pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImag e;
}
pictureBox1.Image=im;


حيث pictureBox1 هو صندوق الصورة المقصود

و openFileDialog1 هو كائن فتح الملفات

..
.

eng_hany
06-16-2007, 10:33 AM
جزاك الله كل الخير ووفقك الى الجديد والجدير دائما

mostafanet
07-04-2007, 02:36 PM
شكرا ياغالى على هذه الدروس

era2006
07-05-2007, 01:36 PM
دائما مبدع
ننتظر منك المزيد

ABCARINO77
07-07-2007, 08:56 PM
مشكورا يا أخى
ملحوظه ....
أو من الممكن تسطيب visual studio dot net 2003
أو
visual studio dot net 2003
و شكرا مرة ثانيه


أخوكم فى الله ....
محمود عبدالرحمن

jockey4ever
07-09-2007, 03:55 PM
ترليون
ترليون ترليون ترليون ترليون
ترليون ترليون ترليون ترليون ترليون ترليون ترليون ترليون
ترليون ترليون ترليون ترليون ترليون ترليون ترليون
ترليون ترليون ترليون ترليون ترليون ترليون
ترليون ترليون ترليون ترليون ترليون
ترليون ترليون ترليون ترليون
ترليون ترليون ترليون
ترليون ترليون
ترليون


عافية..

حماة النهضة
07-09-2007, 10:56 PM
ترليون
ترليون ترليون ترليون ترليون
ترليون ترليون ترليون ترليون ترليون ترليون ترليون ترليون
ترليون ترليون ترليون ترليون ترليون ترليون ترليون
ترليون ترليون ترليون ترليون ترليون ترليون
ترليون ترليون ترليون ترليون ترليون
ترليون ترليون ترليون ترليون
ترليون ترليون ترليون
ترليون ترليون
ترليون


عافية..


هههههه

الله يعافيك ويبقيك يا أخي

..

majid64
07-14-2007, 02:28 AM
اخي الكريم لقد بدات منذ يومين متابعة دروسك القيمة و اثناء تطبيقي للدرس الرابع ياتني هذا الخطا :
DLL 'C:\********s and Settings\Administrateur\Local Settings\Application Data\Temporary Projects\WindowsApplication1\bin\Debug\Microsoft.D irectX.AudioVideoPlayback.dll' is attempting managed execution inside OS Loader lock. Do not attempt to run managed code inside a DllMain or image initialization function since doing so can cause the application to hang.
ارجو المساعدة و شكرا على كل ما تقوم به

حماة النهضة
07-15-2007, 02:51 PM
اخي الكريم لقد بدات منذ يومين متابعة دروسك القيمة و اثناء تطبيقي للدرس الرابع ياتني هذا الخطا :
DLL 'C:\********s and Settings\Administrateur\Local Settings\Application Data\Temporary Projects\WindowsApplication1\bin\Debug\Microsoft.D irectX.AudioVideoPlayback.dll' is attempting managed execution inside OS Loader lock. Do not attempt to run managed code inside a DllMain or image initialization function since doing so can cause the application to hang.
ارجو المساعدة و شكرا على كل ما تقوم به

أهلا بك أخي معنا

الخطأ الذي يظهر هو فقط تحذير ولو تابعت بزر F5 لواصل تنفيذ البرنامج

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

ثم Exceptions

http://www.7oma.com/csharp/exeption.JPG

ثم Managed Debugging Assistants

ثم أزل العلامة من مربع الإختيار أمام Loader Lock

http://www.7oma.com/csharp/loaderlock.JPG

ثم إختر OK

بالتوفيق:)

..

majid64
07-15-2007, 05:33 PM
شكرا لك اخي على ردك السريع و المفيد
و دمت في خدمة المنتدى .
شكرا مرة اخرى

majid64
07-17-2007, 10:33 PM
مرة اخرى اخي الكريم التجا اليك فبعد اظافة المكتبة الخاصة بقرءة ملفات الميديا الخاصة ب:الريل بلاير فياتيني الخطا التالي :Error 1 The type or namespace name 'AxInterop' could not be found (are you missing a using directive or an assembly reference?) C:\********s and Settings\Administrateur\Mes ********s\Visual Studio 2005\Projects\WindowsApplication2\WindowsApplicati on2\Form1.cs 9 7 WindowsApplication2
هذا بالرغم من انني اضقت الملفين الى الفولدر الذي به المشروع .كما اوضحت في الدرس السابق.
تحياتي

NORTONFOX
07-17-2007, 10:47 PM
شكرا علي الموضوع الممتاز :)

majid64
07-18-2007, 01:11 AM
مرة اخرى اخي الكريم التجا اليك فبعد اظافة المكتبة الخاصة بقرءة ملفات الميديا الخاصة ب:الريل بلاير فياتيني الخطا التالي :Error 1 The type or namespace name 'AxInterop' could not be found (are you missing a using directive or an assembly reference?) C:\********s and Settings\Administrateur\Mes ********s\Visual Studio 2005\Projects\WindowsApplication2\WindowsApplicati on2\Form1.cs 9 7 WindowsApplication2
هذا بالرغم من انني اضقت الملفين الى الفولدر الذي به المشروع .كما اوضحت في الدرس السابق.
تحياتي

تمكنت من تجاوز هذا الخطأ و ذلك بإلغاء عبارة :
using AxInterop.RealAudioObjects
من الكود.

majid64
07-19-2007, 11:20 PM
أخي - حماة النهة - ارجو منك ان تخبرني عن كيفية افراغ الكانن List من جميع مكوناته في مرة واحدة ،لآني ادركت انه اثناء تحميل الكائن List للمرة الثانية انه يحتفظ بمكوناته السابقة مما يجعل الكائن Listboxe و كانه لم يقم بمحو محتوياته قبل ان يملآ من جديد....
و شكرا اخي الكريم..

حماة النهضة
07-19-2007, 11:28 PM
أخي - حماة النهة - ارجو منك ان تخبرني عن كيفية افراغ الكانن List من جميع مكوناته في مرة واحدة ،لآني ادركت انه اثناء تحميل الكائن List للمرة الثانية انه يحتفظ بمكوناته السابقة مما يجعل الكائن Listboxe و كانه لم يقم بمحو محتوياته قبل ان يملآ من جديد....
و شكرا اخي الكريم..

كود التفريغ هو :


lv.Items.Clear();


بإعتبار أن lv هو إسم الكائن ListBox

طيب أخي في أي مكان حصل لك هذا الخطا ؟

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

بالتوفيق

..

majid64
07-20-2007, 01:23 PM
اخي الكريم الكائن الذي عنيته في سؤالي هو الكائن list الذي سميناه Albume و هو من نوع المصفوفات و قد اشرت في احد الدروس الأخيرة الى كيفية حذف احد مكـــــــــــــــوناته:([albume.RemoveAt(lv.SelectedIndices[0 و بالرغم اني وضغت هذه العبارة داخل دوارة بعدد مكونات الائحة albume الا انها تبقى محتفظة ببعض عناصرها:
for(i=0;i<albume.count;i++)
{
albume.RemoveAt(i);
}

وشكرا

حماة النهضة
07-22-2007, 03:15 PM
اخي الكريم الكائن الذي عنيته في سؤالي هو الكائن list الذي سميناه Albume و هو من نوع المصفوفات و قد اشرت في احد الدروس الأخيرة الى كيفية حذف احد مكـــــــــــــــوناته:([albume.RemoveAt(lv.SelectedIndices[0 و بالرغم اني وضغت هذه العبارة داخل دوارة بعدد مكونات الائحة albume الا انها تبقى محتفظة ببعض عناصرها:
for(i=0;i<albume.count;i++)
{
albume.RemoveAt(i);
}

وشكرا

طيب أخي ممكن تبعث لي المشروع كامل

عشان أفحص مكان الخطأ

المفروض لو تتبع تعليمات الدروس يمشي معك كل شي تمام

..

majid64
07-23-2007, 01:50 PM
أرسل اليك اخي الكريم بالمشروع الذي عملته ارجو ان يكون في مستوى دروسك القيمة

http://rapidshare.com/files/44451532/MyMediaPlayer.rar
ملاحضة :
قد يكون المشروع لا يحتوي على المكتبات الصوتية ارجو ان تضيفها ان كان كذلك
و شكرا

حماة النهضة
07-23-2007, 04:19 PM
أرسل اليك اخي الكريم بالمشروع الذي عملته ارجو ان يكون في مستوى دروسك القيمة

http://rapidshare.com/files/44451532/MyMediaPlayer.rar
ملاحضة :
قد يكون المشروع لا يحتوي على المكتبات الصوتية ارجو ان تضيفها ان كان كذلك
و شكرا

ما شاء الله أخي ماجد

تطبيقك رائع بالفعل

حتى شكلة أحترافي :smailes70: :smailes70:

ربنا يوفقك في دراساتك المستقبلية ^^

..