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

مشاهدة النسخة كاملة : تعلم البرمجه خطوه بخطوه


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

thegust2000
07-04-2006, 05:00 AM
بسم الله الرحمن الرحيم



نظرا الى الحاجه الملحه التى يسعى الجميع وراءها
فى تعلم لغات البرمجه ونظرا الى انها مفتقده
شئ ما فى المنتدى
فقررت نقل بعض الموضيع والكتب من بعض المواقع والمنتدايات
الخاصه بهذا المجال لتعم الفائده على الجميع
وان شاء الله سوف يتم ادراج بعض الروابط من منتدى مشاغب الخاصه بهذا المجال
والى كل من يجد انه يستطيع ان يشارك فى الموضوع فلا يتاخر فى المشاركه للافاده للجميع

وهذه بعض البرامج
الشهوره فى هذا المجال والذى سوف تجدون راوبط لها فى الصفحه الرابعه
لغة التجميع Assembly
Visual Basic 6
لغة الفورتران
لغة Cobol
لغة Tasm5
Borland Delphi 2005
Borland C++
Microsoft C++
GWBasic
**********
MS C/C++ 7.0 For Win
Pascal
Turbo C
Turbo Pascal For windows



وهذه هى اول الدروس
باذن الله



ملحوظه 1:رغبتى فى تعلم لغات البرمجه هى التى دفعتنى الى المشاركه بهذا الموضوع

ملحوظه2: هذا الموضوع متجدد فيجب عليك قراءه كافه المشاركات
وهذا البرانامج قد اضيف
Microsoft Visual C++ Enterprise 4
رجاء متابعه المشاركات حتى لا يفوت على احد شئ ما



س و جـــ عن البرمجة







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

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




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



الدرس الأول

ماهى البرمجة ؟؟
وما مستوى الذكاء المطلوب للبرمجة ؟
وهل تتطلب لغة انجلزية جيدة ؟
وهل يجب ان يكون لدى خلفية رياضية جيدة ؟


الدرس الثانى

ومن اين ابدا تعلم لغات البرمجة ؟
وماهى ايسر الطرق لتعلم لغات البرمجات ؟
وهل يمكن التعلم من على شبكة النت ؟
وما هى المدة المطلوب لاتقان اللغة ؟
وما هى المدة المطلوبة للانتقال الى لغة اخرى ؟


الدرس الثالث

وما هى انواع البرمجة ؟
وكيف اصل للاحتراف فى البرمجة ؟؟!!
ولكن هل توجد اى مصطلحات معقدة!!



الدرس الرابع

هل لابد لى من معرفة لغات البرمجة السابقة ؟؟



الدرس الخامس

ما هى أقسام لغات البرمجة المختلفة ؟



الدرس السادس

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



الدرس السابع والاخير

والآن .. كيف ابدأ ..؟؟




لا تنسونا من دعواتكم
والسلام عليكم ..

thegust2000
07-04-2006, 05:02 AM
بسم الله الرحمن الرحيم

س و ج عن البرمجة

الدرس الأول



الدرس الأول

ماهى البرمجة ؟؟
وما مستوى الذكاء المطلوب للبرمجة ؟
وهل تتطلب لغة انجلزية جيدة ؟
وهل يجب ان يكون لدى خلفية رياضية جيدة ؟



ماهى البرمجة ؟؟

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



وما مستوى الذكاء المطلوب للبرمجة ؟

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

وهل تتطلب لغة انجلزية جيدة ؟

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



وهل يجب ان يكون لدى خلفية رياضية جيدة ؟

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

thegust2000
07-04-2006, 05:05 AM
بسم الله الرحمن الرحيم

س و ج عن البرمجة

الدرس الثانى



ومن اين ابدا تعلم لغات البرمجة ؟
وماهى ايسر الطرق لتعلم لغات البرمجات ؟
وهل يمكن التعلم من على شبكة النت ؟
وما هى المدة المطلوب لاتقان اللغة ؟
وما هى المدة المطلوبة للانتقال الى لغة اخرى ؟




ومن اين ابدا تعلم لغات البرمجة ؟

هناك قاعدة عصرية تقول : أبدء من حيث انتهى الاخرون او بمعنى اخر لاتعيد اختراع العجله!!!
فلغات البرمجة تتطور بسرعة وبطريقة رهيبة ولا يمكنك مجاراتها الا اذا بدأت بما انتهى اليه الاخرون .. فهناك لغات برمجة عديدة موجدة ولكن التى ظهرت فى الساحة مؤخراً هى لغات الدوت النت واشهرها لغة السى شارب ولغة الفيجوال بيسيك دوت نت او يمكنك البدء بلغة الجافا ان اردت ..



وماهى ايسر الطرق لتعلم لغات البرمجات ؟

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



وهل يمكن التعلم من على شبكة النت ؟

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



وما هى المدة المطلوب لاتقان اللغة ؟

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






وما هى المدة المطلوبة للانتقال الى لغة اخرى ؟

هذا يعتمد على مهاراتك ومدى اتقانك للغتك الاصلية .. فيمكنك الانتقال الى لغة بعد ذلك فى ظرف اسبوعان ان شاء الله .

-==Zero==-
07-04-2006, 05:06 AM
جزاك الله خيرا يا أخى

thegust2000
07-04-2006, 05:07 AM
بسم الله الرحمن الرحيم

س و ج عن البرمجة

الدرس الثالث





وما هى انواع البرمجة ؟
وكيف اصل للاحتراف فى البرمجة ؟؟!!
ولكن هل توجد اى مصطلحات معقدة!!




وما هى انواع البرمجة ؟

لا يوجد تعريف محدد لانواع لغات البرمجة لانها كلها غالباً مرتبطة ببعضها وباتقانك اى لغة برمجة يمكنك التعامل بسلاسة بأى نوع من الانواع الاخرى بعد اخذك خلفية بسيطة عن اساسيتها ..
ويمكنا لبقول ان انواع لغات البرمجة نسبياً هى :
1- البرمجة العادية
2- برمجة قواعد البيانات
3- برمجة مواقع الويب





وكيف اصل للاحتراف فى البرمجة ؟؟!!

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



ولكن هل توجد اى مصطلحات معقدة !!

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

thegust2000
07-04-2006, 05:09 AM
بسم الله الرحمن الرحيم

س و جــ عن البرمجة

الدرس الرابع



13- هل لابد لى من معرفة لغات البرمجة السابقة ؟؟





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

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

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

thegust2000
07-04-2006, 05:10 AM
بسم الله الرحمن الرحيم

س و جــ عن البرمجة

الدرس الخامس



14- ما هى أقسام لغات البرمجة المختلفة ؟

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

فيمكن تقسيم لغات البرمجةمن حيث طريقة كتابة البرنامج واسلوبه الى :

ü طريقة البرمحة الخطية :
ونستطيع ان نقول ان كل لغات البرمجة قبل ظهور الويندوز تعتمد على هدا الاسلوب مثل :
لغة البيسك - BASIC والسي - C والباسكال - Pascal والكوبول - COBOL والفوتورن



ü وطريقة البرمجة الشيئية Object Oriented Programming :
وهى لغات البرمجة التى ظهرت بعد نظام التشغيل ويندوز ..
حيث البرمجة تأخد مجال اكثر سهولة واتساعاً فى نفس الوقت ..!!
وهى تشتمل غلى لغات البرمجة التى تتطورت من لغات سابقة مثل
الفيجوال بيسك - Visual Basic والتى تطورت من لغة البيسيك ..
وكذلك لغات السي ++ والفيجوال سي Visual C تتطورت ايضاً من لغة السى
وكذلك الدلفي - Delphi من لغة الباسكال .

thegust2000
07-04-2006, 05:11 AM
بسم الله الرحمن الرحيم



س و جـ عن البرمجة

الدرس السادس





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

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



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

لذلك ستجد ان كل لغات البرمجة سواء كانت قديمة او حديثة لابد ان تتحدث عن وتتطرق الى المواضيع التالية :

المتغيرات
جمل الشرط والتحكم
جمل التكرار
الدوال
المصفوفات

thegust2000
07-04-2006, 05:13 AM
بسم الله الرحمن الرحيم

س و ج عن البرمجة

الدرس السابع



15- الآن .. كيف ابدأ ..؟

الى هنا قد وصلت الى غايتك ...
انصحك اولاً بأن تبدأ بقراءة الدروس الاربعة التالية .. التى تتحدث عن :

خلفية تاريخية للبرمجة - انواع لغات البرمجة - الفرق بين البرمجة الخطية والبرمجة بالكائنات الشيئية
التى كتبتها الاستادة جافاجيرل احدى مشرفات السابقين بالموسوعة العربية للكمبيوتر ..

(1)مقدمة على البرمجة بشكل عام

(2) لغات الجيل الرابع

(3) البرمجة بالكائنات الشيئية

(4) البرمجة بالكائنات الشيئية - 2




والان ما رأيك بعد قرائتك للدروس الاربعة السابقة .. ؟؟
(لا تقلق ان كانت هناك بعض الامور الغامضة..!!
فبالدارسة العملية والتجربة وتطبيق الأمثلة وعدم الاكتفاء بالقراءة هى دليلك الى توضيح ما خفى عنك( ..
فأنت الان قد وصلت لنهاية المطاف هنا ..
ولم يعد امامك الا ان تحدد هدفك وتختار احدى لغات البرمجة التى تريد دارستها ..
وان كنت انصحك بأن تبدأ بــ:

احدى لغات برمجة بيئة الدوت نت .NET

او لغة الجافا - Java .





ملحوظة هامة :

ولكن قد يتبادر سؤال الى ذهنك .. ما هو الفرق بين الC#.NET وبين VB.NET ، رغم أنهما الأثنتين من لغات البرمجة القوية ، ولكن ، هل هناك وظائف لأى لغة متميزة عن الأخرى ؟ !!

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






وفى النهاية ..

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

thegust2000
07-04-2006, 05:16 AM
والان الاختيار لكم نبدا الفيجوال بيسك ام سى بلس بلس

thegust2000
07-04-2006, 05:22 AM
انا اخترت لكم ولى الفيجوال فانا احب هذه اللغه واحب ان اتقنها



مقدمة



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

لقد قامت شركة مايكروسوفت بتصميم فيجوال بيسك بناءً على لغة البرمجة بيسك . هذه اللغة (بيسك ) مصممة خصيصاً للمبتدئين في البرمجة نظراً لسهولتها على عكس اللغات التي كانت متوفرة حينذاك مثل الكوبول و فورتران و لغة التجميع Assembly .

رغم أن لغة بيسك مصممة للمبتدئين إلا أن برامجها تحتاج لبعض الدراسة لفهمها و هي تعتمد على النصوص بشكل تام لذا فإن البرامج التي تكتب بلغة بيسك تنتج ناتجاً نصياً أيضاً و لا تظهر في نوافذ كما هو حال برامج الويندوز الحالية .

مرت عملية تطوير لغة البيسك بعدة مراحل قبل أن تصل إلى لغة الفيجوال بيسك الحالية فقد قامت شركة ميكروسوفت بتطوير لغة البيسك إلى إصدارة جديدة أسمتها MBasic -M ترمز لمايكروسوفت - ثم إلى GWBasic و لغة BasicA -A ترمز لـ Advanced أي متقدم - و لغة QuickBasic و لغة Qbasic .

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

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

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

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

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

ابتعد عن الشاشة قليلاً و تمتع بعشر ثواني للراحة ثم انقر التالي

thegust2000
07-04-2006, 05:25 AM
هذه مشاركه للاخ ghost soft


|--*¨®¨*--|الدرس الاول|--*¨®¨*--|

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

والان لنبدا

لفتح البرنامج اتبع الشرح الاتي

http://www.kw20.com/up/55399(kw20)2005x10x24.gif

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

http://www.kw20.com/up/10744(kw20)2005x10x24.gif

الرقم 1
البدا بمشروع جديدة

الرقم 2
فتح مشروع محفوظ مسبقا على الجهاز

الرقم 3
فتح مشروع من قائمة المشاريع المفتوحة حديثا

وهناك الخيار
Don't Show This Dialog in The Future
اي عدم اظهار هذا الصندوق عندنا نقوم بتشغيل برنامج الفجوال بيسك مرة اخرى وسوف يقوم افتراضيا باختيار هذا الخيار http://www.kw20.com/up/7911(kw20)2005x10x24.gif

وقم باختيار الخيار

http://www.kw20.com/up/7911(kw20)2005x10x24.gif

http://www.kw20.com/up/54629(kw20)2005x10x24.gif

وهذه الصور تشرح الواجهة الرئيسية لبرنامج الفجوال بيسك .. بشكل مختصر

اما الان فسوف اقوم بوضع شرح شبه مفصل للواجهة الرئيسية ..

|--*¨®¨*--|سوف نبدا بـ شرح مساحة العمل اي النموذج Form|--*¨®¨*--|

http://www.kw20.com/up/75665(kw20)2005x10x24.gif

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

http://www.kw20.com/up/6431(kw20)2005x10x24.gif

هذا عبارة عن نموذج واجهة برنامج easy lingo وهو يحتوي على مجموعة من الادوات

ويمكن ان نتوصل الى تعريف النوذج على انه ::

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


------------------------------------------------------------------
|--*¨®¨*--|شرح الكائنات|--*¨®¨*--|



الكائنات هي : مجموعة الادوات التي نقوم بإدراجها في البرنامج الذي نقوم برمجته مثل .. الازرار او الصور او الاشكال
و اشرطة التمرير و ملصق التسمية

وتوجد هذه الكائنات في شريط الادوات

http://www.kw20.com/up/16342(kw20)2005x10x24.gif

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

1 Mouse :هو المؤشر الذي يستخدم في ادراج الادوات الى النموذج او تحركها اي نقلها من مكان الى اخر في النموذج او تغير حجمها ..

2 Picture :هذا الخيار يستخدم لادراج الصور في البرنامج

3 Label :ادراج ملصقات التسمية والتي يتم من خلالها كتابة الملاحظات او تعريف الادوات في واجهة المستخدم ( البرنامج )

4 TextBox :صندوق نص يتم من خلاله السماح للمستخدم بإدخال بيانات اما نصية رقمية او حرفية الى البرنامج

5 Frame : هذه الاداة ليست اساسية انما تفيد في ترتيب واجهة البرنامج

6 Command : هذا هو عبارة عن الزر ونشاهده كثيرا جدا في البرنامج ولابد ان الكل يعرفه

7 CheckBox : يستخدم هذا الخيار من اجل تخيير المستخدم من بين عدة خيارات مع امكانية اختيار اكثر من خيار

8 Option : يستخدم هذا الخيار من اجل تخيير المستخدم من بين عدة خيارات ولكن مع امكانية اخيار خيار واحد فقط

9 ComboBox : انشاء القوائم المنسدلة

10 ListBox صندوق يحتوي على مجموعة من الخيارات تقوم انت باختيارها وادراجها



انتظرو باقي الشروحات

][`~*¤!||!¤*~`][ghostsoft][`~*¤!||!¤*~`][





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

إذاً فلنبدأ قم بتشغيل برنامج الفيجوال بيسك سيظهر لك مربع حوار ، تفحص هذا المربع ، إنه يحتوي على ثلاث تبويبات و هي :

-new :

لإنشاء برنامج جديد .

-Existing :

لفتح أحد البرامج الموجودة على جهازك .

- Recent :

لفتح البرامج التي استخدمتها مؤخراً


http://www.c4arab.com/images/lessons/programming/visualbasic/Image3.gif


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


http://www.c4arab.com/images/lessons/programming/visualbasic/vb8.jpg

من التبويبة

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

-Multiple Document Interface (MDI):

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

-Single Document Interface(SDI):

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

-Explorer Style :

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

قم باختيار الخيار الأوسط [خير الأمور أوسطها :) ] ثم اختر اسماً لبرنامجك و اكتبه في المستطيل المسمى

What name do you want for the application?

FirstApp اختر الاسم

لاحظ أنه يجب أن لا تترك مسافات بيضاء في الاسم المختار ثم انقر التالي

Next .

المربع الحالي يطلب منك اختيار القوائم التي تريد إضافتها إلى شريط القوائم في برنامجك .. اترك جميع الخيارات كما هي ثم انقر زر

Next .

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

Next .

المربع الحالي يسألك هل يضع موارد البرنامج

Resources

في ملف منفصل أم يضعها في نفس الملف .اختر

No

Next ثم انقر

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

Next انقر زر

دون تغيير الخيارات الافتراضية .

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

ابتعد عن الشاشة قليلاً و تمتع بعشر ثواني للراحة ثم انقر التالي

thegust2000
07-04-2006, 05:41 AM
بسم الله الرحمن الرحيم



شرح لطريقة ربط بين قاعدة البيانات المبنية في الاكسس وبرنامج الفيجوال بيسك .

1. أبدأ / Start

2. لوحة التحكم / Control Panel



http://www.c4arab.com/images/lessons/databases/vbdatabases/access2vb/1.jpg





· ODBC بعد ذلك تظهر لنا واجهة .

· نقوم بالضغط على Select.. (المشار عليه بالرقم 1)
http://www.c4arab.com/images/lessons/databases/vbdatabases/access2vb/6.jpg



· نقوم باختيار مكان القاعدة (المشار عليه بالرقم 1) .

· نقوم بعدها باختيار القاعدة (المشار عليه بالرقم 2) .

· بعد ذلك نضغط على OK (المشار عليه بالرقم 3) .



http://www.c4arab.com/images/lessons/databases/vbdatabases/access2vb/7.jpg

· بعد ذلك نعطي اسم للقاعدة . (المشار عليه بالرقم 1) .

· بعد ذلك نقوم بالضغط على OK (المشار عليه بالرقم 2) .



http://www.c4arab.com/images/lessons/databases/vbdatabases/access2vb/8.jpg


http://www.c4arab.com/images/lessons/databases/vbdatabases/access2vb/2.jpg


· نقوم باختيار Data Sources (ODBC)

http://www.c4arab.com/images/lessons/databases/vbdatabases/access2vb/3.jpg

نقوم باختيار System DSN .

· Add.. بعد ذلك نضغط على .



http://www.c4arab.com/images/lessons/databases/vbdatabases/access2vb/4.jpg


بعد ذلك نقوم باختيار :

· Microsoft Access Driver (*.mdb) (المشار عليه بالرقم 1) .

· ونضغط على Finish


http://www.c4arab.com/images/lessons/databases/vbdatabases/access2vb/5.jpg

thegust2000
07-04-2006, 05:48 AM
بعد ان نقلت لكم هذا الدرس وجدته ثقيل شوى على الاخوه فممكن ن لاخوه
ان يتركوهذا الجزء الان ويبداومن الدرس الذى يلى هذا

· كما نرى فقد اضيفت القاعدة . (المشار عليه بالرقم 1) .

· وبعد نضعط على OK (المشار عليه بالرقم 2) .



http://www.c4arab.com/images/lessons/databases/vbdatabases/access2vb/9.jpg

· بعد ذلك نقوم بالدخول الى برنامج فيجوال بيسك .

· وبعد الدخول نقوم بالضغط على Project (المشار عليه بالرقم 1) .

· Add Data Environmentونختار من القائمة (المشار عليه بالرقم 2) .



http://www.c4arab.com/images/lessons/databases/vbdatabases/access2vb/10.jpg
· بعد ذلك نضغط على الزر المشار عليه بالسهم (المشار عليه بالرقم 1) .



http://www.c4arab.com/images/lessons/databases/vbdatabases/access2vb/11.jpg

كما نرى فقد اضيف اتصال لقاعدة وبقي علينا تحديد القاعدة .


http://www.c4arab.com/images/lessons/databases/vbdatabases/access2vb/12.jpg

بعد ذلك نقوم بالضغط مرة واحده على Connection1 (المشار عليه بالرقم 1) .

· ونضغط بعد ذلك على الزر الايمن للفارة ونختار Properties (المشار عليه بالرقم 2) .



http://www.c4arab.com/images/lessons/databases/vbdatabases/access2vb/13.jpg



· نقوم باختيار Connection (المشار عليه بالرقم 1) .

· بعد ذلك نقوم باختيار قاعدة البيانات كما يظهر لنا بالصورة (المشار عليه بالرقم 2) .

· بعدها نضغط على OK




http://www.c4arab.com/images/lessons/databases/vbdatabases/access2vb/14.jpg

ولتغير اسم القاعدة نقوم بالضغط على الزر الايمن على القاعدة.

· ونختار Rename



http://www.c4arab.com/images/lessons/databases/vbdatabases/access2vb/15.jpg

thegust2000
07-04-2006, 06:09 AM
طريقة فتح الفيجوال بيسك و بعض الاساسيات



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

لفتح البرنامج :-

اذهب الى زر start اختر programs ثم اضغط على ملف الفيجوال بيسك واختر الفيجوال بيسك 6.0 Microsoft visual basic 6.0



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

اذهب الى اذهب الى زر start اختر programs ثم Microsoft visual studio 6.0 ثم Microsoft visual basic 6.0

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

http://www.c4arab.com/images/lessons/programming/visualbasic/1159/image001.png

نلاحظ 3 صفحات Tabs

1-new :اختيار نوع الملف الذي تريد فتحه و سنتعامل عادة مع الاختيار المظلل في الاعلى

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

3- Recent : الملفات التي تم العمل عليها سابقا



ملاحظة مهمة : عند وضع صح على المربع الذي ينص Don’t show this dialog in the future لن تظهر هذه النافذة مرة اخرى

1- عليك الذهاب الى قائمة File ثم new project او اضغط Ctrl + N ستلاحظ عدم ظهور الصفحتين الاخريتين Existing و Recent

2-لالغاء خاصية عدم ظهور النافذة اذهب الى tools من menu bar ثم options ثم صفحة Environment في الاعلى اشر اضغط على prompt for project في when visual basic starts

http://www.c4arab.com/images/lessons/programming/visualbasic/1159/image003.gif
1- الضغط على زر الخروج close

2- Alt +F4 اضغط

3- اختر من File men

exit

4- Alt+Q اضغط

كمال2006
07-04-2006, 06:10 AM
قبل ان اقرا موضوعك بتمعن
واخشى ما اخشى ان يسبقني
جماعة :D :D :D

UP

في المنتدى
اريد ان اسجل شكر ي لك

thegust2000
07-04-2006, 06:18 AM
لقد تعرفنا في الدرس السابق على طريقة فتح الفيجوال بيسك و على بعض الاساسيات وسنتعرف اليوم على شئ جديد يعرف بمتصفح التطبيقات, فماذا تنتظر فلنبدا....



في الشكل بالاسفل نشاهد نافذة Project Explorer



http://www.c4arab.com/images/lessons/programming/visualbasic/1164/image006.gif
في متصفح التطبيقات يستعمل الترتيب المتفرع و لفتح الملفات

1-عند الضغط على اشارة (+) بجانب الملف ستخرج لك الملفات التي بداخلها و تتحول الاشارة من موجب الى سالب و عند الضغط على اشارة(–)سوف تختفي الملفات الداخلية وتتحول الاشارة من سالب الى موجب

2-الضغط مرتان متتاليتان على الملف لفتح ما بداخله

س- ما فائدة هذه النافذة اثناء عملي؟

ج- هذه النافذة تساعدك في عرض محتويات الملف الذي تعمل عليه و فائدتها الكبرى عند العمل على اكثر من form واحد



ملاحظة: ستلاحظ وجود ثلاث ازرار في النافذة عند تاشير الزر ستلاحظ ظهور كتابة.
http://www.c4arab.com/images/lessons/programming/visualbasic/1164/image007.gif
1 - سنبدا من اليمين الى اليسار بشرحهاتقوم باظهار جميع الملفات الموجودة في التطبيق و التجربة ستوضح الامر اكثر ومعناها في الانجليزي Toggle folders button



2- بالنسبة للزر الثاني view object button فهو سوف يظهر باذن الله الازرار التي من الممكن استعمالها في Tool bar و سيغير لونها من الرصاصي الى لون اخر و لكي تحصل على هذه النتيجة اضغط على form 1 في متصفح التطبيقات (اخر ملف) ضغطة و احدة لتظليله ثم اضغط على الزر الذي نقوم يشرحه و راقب ما يحدث في toolbar وعليك الدقة و السرعة في النظر, ستلاحظ تغير لون بعض الازرار من الرصاصي الى لونها الطبيعي



ملاحظة مهمة: الزر ذو اللون الرصاصي لن يعمل عند الضغط عليه و هذه امثلة لبعض الازرار الرصاصية اللون
http://www.c4arab.com/images/lessons/programming/visualbasic/1164/image009.gif
3- الزر الثالث هو من اهم الاكواد وهو يعرض الكود الكلي الخاص بالتطبيق view code button اضغط عليه و ستخرج الشاشة التالية ان شاء الله

http://www.c4arab.com/images/lessons/programming/visualbasic/1164/image010.gif
ملاحظة: قد تكون الصفحة الخاصة بالكود لديك فارغة لعدم وجود برمجة في ال form

اخفاء و تحريك و تغيير حجم متصفح التطبيقات



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

1- اخفاء متصفح التطبيقات

هناك طريقتان لاخفاء متصفح التطبيقات

أ-اضغط الزر close من الجانب الشمال الشرقي في متصفح التطبيقات
ب-اضغط الزر الايمن للفارة باي مكان في متصفح التطبيقات و اختر اخفاء (Hide)



استرجاع متصفح التطبيقات

أ-اذهب الى قائمة view في Manu bar اضغط على Project Explorer

ب- اضغط ctrl + R

ج-اضغط على الصورة التالية فيhttp://www.c4arab.com/images/lessons/programming/visualbasic/1164/gdgdfg.jpg Tool bar
تحريك متصفح التطبيقات

اضغط على Title bar الخاص بمتصفح التطبيقات و استمر بالضغط عليه و سحبه اينما اردت و Title bar هو الشريط الازرق المكتوب عليه Project-project1))

كما في الصور الاتية


http://www.c4arab.com/images/lessons/programming/visualbasic/1164/image013.jpg http://www.c4arab.com/images/lessons/programming/visualbasic/1164/image014.jpg http://www.c4arab.com/images/lessons/programming/visualbasic/1164/image015.jpg


وهناك طرق اخرى و لكن هذه الطريقة الاكثر شيوعا و لا حاجة لمعرفة جميع الطرق



تمرين

حرك مكان النافذة الخاصة بمتصفح التطبيقات الى اي مكان في الشاشة ثم اضغط مرتان على Title bar الخاص به مرتان بزر الفارة الايسر و لاحظ ماذا يحدث



ملاحظة مهمة: عند الضغط على الزر الايمن على متصفح التطبيقات ستجد علامة صح بجانب كلمة dockable عند ابعاد هذه العلامة ستفقد النافذة خاصية الرجوع عند الضغط مرتان عليها بل سيزداد حجمها و ينقص عند الضغط عليها مرتان كعمل restore في اي نافذة في الكمبيوتر و لارجاعها الى و ضعها الطبيعي اضغط الزر الايمن للفارة على متصفح التطبيقات ثم اضغط علىDockable و اضغط مرتان على Title bar و ستلاحظ رجوع الامر طبيعي

تغيير حجم متصفح التطبيقات

في بعض البرامج الكبيرة يوجد العديد من الملفات و لعرض جميع الملفات في متصفح التطبيقات دون استخدام http://www.c4arab.com/images/lessons/programming/visualbasic/1164/scrollcar.jpgScrollbar
اشر سهم الفارة الى حافة متصفح التطبيقات السفلية او من الجانب الايسر ستلاحظ تحول موشرالفارة الى شكل سهمين متعاكسين انقر بالفارة و اضغط واسحب للاتجاه الذي يحلو لك





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

thegust2000
07-04-2006, 06:20 AM
قبل ان اقرا موضوعك بتمعن
واخشى ما اخشى ان يسبقني
جماعة :D :D :D

UP

في المنتدى
اريد ان اسجل شكر ي لك




وانا ممتن لك كثير على اهتمامك بالرد

thegust2000
07-04-2006, 06:21 AM
بسم الله الرحمن الرحيم السلام عليكم دالة الشرط IF هي دالة تستخدم في وضع شروط معينة وتكون قيمتها دائماً صحيحة ونكتبها على الشكل التالي If ... Then ..... End if أولاً نبدأ ب IF وثانياً نكتب الشرط بعد ذلك نكتب Then ثم نضع الحدث أو الكود المراد تشغيله عندما يكون الجواب صحيح بعد ذلك ننهي الدالة ب End if مثال : أضف مربع نص وزر أمر إكتب هذا الكود في زر الأمر if text1.text = "Password" then MsgBox "الرقم السري صحيح ، أهلاً بك" End if في الدالة السابقة يتأكد من أن قيمة مربع النص هي Password فإذا كانت كذلك يظهر رسالة تعلم المستخدم بأن كلمة المرور صحيحة . الآن نريد أن نظهر رسالة تعلم بأن كلمة السر خاطئة ؟! نستخدم لذلك أمر Else أي إذا كانت الإجابة خاطئة ، فأمر Else دائماً قيمه تكون False فيصبح الكود هكذا if text1.text = "Password" then MsgBox "الرقم السري صحيح ، أهلاً بك" Else MsgBox "الرقم السري خاطيء" End if

thegust2000
07-04-2006, 06:22 AM
أحياناً عندما تكون الإحتمالات التي تحدث في البرنامج كثيره,

يكون من الصعب استعمال if..else..elseif (جملة if المتداخلة).

فمثلا عندما يكون غلى المستخدم اختيار اسم دولته وتريد لكل دولة مثلا

لون محدد فهناك على الأقل في الوطن العربي 22 دوله فهل ستظل تكتب

جملة if .. elseif, ربما يكون هذا ممكنا لكن جملة select case تسهل هذا
كثيرا.ً

[شفرة]


'مثال

Dim Country As String

Country = CStr(txtCountryName.Text)

Select Case Country

Case Country = "Egypt"

Form1.BackColor=QBColor(2)

Case Country ="Syria"

Form1.BackColor = QBColor(3)

Form1.ForeColor = QBColor(12)

' و هكذا لكل دوله

Case Else

MsgBox "Please Check Your Country"

Form1.BackColor = QBColor(6)

End Select

[/شفرة]


لقد عرفنا Country انه متغير نصي, و سجلنا فيه

قيمه صندوق النص (او اي اداه اخرى).

و لقد استعملنا الوظيفه CStr لتحويل هذه القيمه ايضا

الي متغير نصي.

ثم بدأنا جمله Select Case و بعدها المتغير الذي نريد
التغيير حسب قيمته.

ثم لكل قيمه محتمله نكتب Case وبعدها تلك القيمه,

و اذا لم تتطابق اي حاله مع المتغير فيذهب البرنامج الي

الحالة الأخيره Select Else .

thegust2000
07-04-2006, 06:24 AM
بسم الله الرحمن الرحيم

المصفوفات ( Matrix / Arrays ) في الفيجيوال بيسك

~~~~~~~~~~~~~~~~~~


تعريف المصفوفة :
عبارة عن متغيرات مفهرسة Indexed Variables تحتوي على بيانات عديدة من نفس النوع Data Type .
كل مصفوفة لها اسم واحد يمكن استخدامه للرجوع إلى أي عنصر فيها وذلك باقتران هذا الاسم بدليل يمثل مكان العنصر فيها ، ويمكن انشاء مصفوفة لإحتواء أي نوع من أنواع البيانات مثل : النصوص والأعداد الحقيقية و الصحيحة وغيرها ، فأنواع البيانات المتوفرة في الفيجيوال بيسك هي :

Data Type in VB: {Byte, Boolean, Integer, Long, Single, Double, Currency, Decimal, Date, Object, String, Variant, User-defined }.


واستخدام المصفوفات في البرمجة يساعد في صناعة أكواد قصيرة وبسيطة ذات قوة كبيرة لأنه يمكن بناء Loops تتعامل بكفاءة مع المصفوفات مهما كان عدد عناصرها وذلك باستخدام دليل العنصر Index Number .

~~~~~~~~~~~~~~~~~~

الخصائص الأساسية للمصفوفة في الفيجيوال بيسك :

اسم المصفوفة يمثل عنوان Address في الذاكرة ؛ ولا يمكن تغييره أثناء تنفيذ البرنامج .
يمكن الإعلان عن مصفوفة لأي نوع من أنواع البيانات بما في ذلك الأنواع المعرفة من قبل المستخدم User-defined type والـ Object Variables .
كل وحدة بيانات منفردة في المصفوفة تسمى عنصر Element .
جميع العناصر تكون من نفس النوع إلا في حالة الإعلان عن المصفوفة كـ Variant Data Type .
جميع العناصر تكون مخزنة على التتابع في ذاكرة الحاسوب ودليل أول عنصر هو الصفر كـ Default ، ويمكن جعله 1 باستخدام جملة Option Base .
يحدد موقع العنصر بواسطة رقم الصف ورقم العمود الذي يقع فيه .
لكل مصفوفة حداً أعلى Upper bound ، وحداً أدنى Lower bound ؛ وعناصر المصفوفة تكون محصورة بين هذين الحدين .
من الممكن أن تكون المصفوفة ذات بعد واحد أو متعددة الأبعاد .
هناك نوعين من المصفوفات :
المصفوفة ذات الحجم الثابت ( Fixed-size array ) : وهي التي يظل حجمها ثابت أثناء تشغيل البرنامج .
المصفوفة ذات الحجم المتغير ( Dynamic-size array ) : وهي التي يمكن تغيير حجمها أثناء تشغيل البرنامج .
~~~~~~~~~~~~~~~~~~

والآن يمكننا تحديد محتويات دروس المصفوفات بدقة :

سنتعلم في الدرس الأول بإذن الله :
كيفية تعريف مصفوفة ذات حجم ثابت Fixed-size Array.
ثم سنتعرف على كيفية تحديد الحدين الأعلى والأدنى لأي مصفوفة.
المصفوفات متعددة الأبعاد Multi-Dimonsional Arrays.
جملة Option Base.
استخدام الـLoops لمعالجة المصفوفات.
وفي الدرس الثاني سنتعلم :
كيفية تعريف مصفوفة ذات حجم متغير Dynamic Array.
حفظ محتويات الـDynamic Arrays عند إعادة تعريفيها.
جملة ReDim.

o.mohammed
07-04-2006, 06:26 AM
اخي الحبيب
جزاك الله خيرا على هذا الموضوع القيم
ولكن عندي ملاحظه
انت قلت في كلامك انه من الافضل ان تبدا من حيث انتهى الاخرون او لا تعيد اختراع العجله
وها انت تفعل ذلك
فلغه البرمجه Visual Basic 6 قد اكل عليها الزمن وشرب !!!!!!
بالاضافه الى ضعفها
ولكن هناك لغه البرمجه VB.NET التي تضاهي في قوتها لغه السي شارب بل تزيد عليها قوه في سهوله تعلمها
او لغه Visual Basic 2005 وهي احدث اصدار للفيجوال بيسك وبالفعل بها من المميزات ما لايخطر على بالك
فاشكرك اخي العزيز على هذا الموضوع

thegust2000
07-04-2006, 06:29 AM
بسم الله الرحمن الرحيم



محتوى الدرس:

http://www.c4arab.com/images/lessons/databases/mysql/rose.gif
الإعلان عن مصفوفات الحجم الثابتFixed-size Array.
تحديد الحدين الأعلى والأدنى للمصفوفة Upper bound & Lower bound.
المصفوفات متعددة الأبعاد Multi-Dimensional Arrays.
جملة Option Base.
استخدام الـLoops لمعالجة المصفوفات.


الإعلان عن مصفوفات الحجم الثابتFixed-size Array:

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

للإعلان عن مصفوفة عامة Puplic Array تستخدم جملة Puplic في قسم الإعلان Declaration Section للوحدة Module.
للإعلان عن Module-Level Array تستخدم جملة Private في قسم الإعلان الخاص بـProcedure.
للإعلان عن Local Array تستخدم جملة Dim في الـProcedure.

http://www.c4arab.com/images/lessons/databases/mysql/rose.gif





تحديد الحدين الأعلى والأدنى للمصفوفة Upper bound & Lower bound:

عند الإعلان عن مصفوفة، يكتب الحد الأعلى بعد الاسم وبين الأقواس.
لا يمكن أن يزيد الحد الأعلى عن نطاق نوع المتغير Long Data Type.
الحد الأدنى الإفتراضي Default هو الصفر.
لتحديد الحد الأدنى، ينبغي كتابته صراحة باستخدام كلمة To، كما سنرى في الأمثلة.
أمثلة:

http://www.c4arab.com/images/lessons/databases/mysql/rose.gif

مثال (1):

إعلان عن مصفوفة StudentId يمكن وضعه في جزء الأعلان الخاص بالـModule أو داخل الـProcedure:
Dim StudentId (1000) As Integer

وبذلك يكون عدد عناصر هذه المصفوفة 1001 عنصر. ولجعلها مصفوفة عامة، نستبدل Dim بـ Public كالتالي:

Public StudentId (1000) As Integer

ولتحديد الحد الأدنى لهذه المصفوفة بـ1 وبالتالي يصبح عدد عناصرها = 1000 عنصر فقط، نكتب To كالتالي:

Public StudentId (1 To 1000) As Integer

مثال (2):
http://www.c4arab.com/images/lessons/databases/mysql/rose.gif


الإعلان عن مصفوفة بها 51 عنصر مرقمة من 0 إلى 50 من دون تحديد نوع بيانات عناصرها، سيعتبر النوع Variants مباشرة:


Dim DayArray (50)

مثال(3):

http://www.c4arab.com/images/lessons/databases/mysql/rose.gif

الإعلان عن المتغير BirthDate على أنه مصفوفة من التواريخ المفهرسة من 1 حتى 10:

Dim BirthDate (1 To 10) As Date





المصفوفات متعددة الأبعاد Multi-Dimensional Arrays:

يقصد بكلمة بُعد هو عدد الدلائل (Indexes) المستخدمة للرجوع إلى عنصر في المصفوفة. تستخدم المصفوفات متعددة الأبعاد لتخزين بيانات مرتبطة ببعضها البعض.
مثال على ذلك:
تخزين كل نقطة Pixel موجودة على شاشة الحاسوب نحتاج لتخزين إحداثياتها x & y وهذا ممكن باستخدام مصفوفة ذات بعدين.


يمكن معرفة أبعاد مصفوفة بالنظر إلى تعريفها؛ حيث يتم الإعلان عن مصفوفة متعددة الأبعاد بذكر قيمة لأبعادها بعد اسمها مباشرة وداخل الأقواس، يتم فصل قيمة كل بعد بالفاصلة، سواء كانت ذات بعدين أو ثلاثة أبعاد كما ستوضح الأمثلة الآتية:

-Static A(3, 4) As Double

-Static A(1 To 10, 1 To 10) As Integer

- Dim B (3, 1 To 10, 1 To 15)

ملاحظة:
http://www.c4arab.com/images/lessons/databases/mysql/rose.gif


عدد عناصر المصفوفة متعددة الأبعاد يمكن معرفته بضرب قيم الأبعاد ببعضها.

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





جملة Option Base:

تستخدم في الـModule Level للإعلان عن الحد الأدنى المفترض لدلائل subscripts المصفوفات التي سوف تظهر في الـModule.

الصيغة Syntax:

Option Base { 0 | 1 }

مع ملاحظة:

القيمة الافتراضية هي صفر دوماً، ولذلك لا داعي لكتابة Option Base 0 إلا إذا كنّا نريد تذكير قارئ الـcode بذلك!

إذا استخدمت هذه الجملة ينبغي ظهورها مرة واحدة وقبل أي Procedure وقبل أي جملة إعلان عن مصفوفات.

جملة Option Base لها تأثير فقط على الحد الأدنى للمصفوفات في الـModule التي توجد به الجملة.

مثال:

http://www.c4arab.com/images/lessons/databases/mysql/rose.gif

يوضح المثال التالي كيفية تحديد القيمة الافتراضية للحد الأدنى لدلائل المصفوفات، ثم يوضح كيفية استخدام دالة الإعلام عن الحد الأدنى لمصفوفة (LBound):

Option Base 1

Dim Lower
Dim MyArray(20), TwoArray(3, 4)
Dim ZeroArray(0 To 5)

'Use LBound function to test lower bound of arrays.

Lower = LBound (MyArray) 'Returns 1
Lower = LBound (TowArray, 2) 'Returns 1
Lower = LBound (ZeroArray) 'Returns 0



استخدام الـLoops لمعالجة المصفوفات:

يمكن بكفاءة وسهولة معالجة المصفوفات باستخدام الـLoops وخصوصاً المصفوفات متعددة الأبعاد حيث يتم معالجتها باستخدام Loops متداخلة.

مثال:
http://www.c4arab.com/images/lessons/databases/mysql/rose.gif


الجمل التالية سوف تعطي قيمة لكل عنصر من عناصر المصفوفة A هذه القيمة تكون مرتبطة بموقع العنصر داخل المصفوفة كما سنرى:

Dim I As Integer, J As Integer
Static A(1 To 10, 1 To 10) As Integer
For I=1 To 10
For J=1 To 10
A(I, J)= I*10*J
Next J
Next I

thegust2000
07-04-2006, 06:37 AM
بسم الله الرحمن الرحيم



محتوى الدرس:

كيفية تعريف مصفوفة ذات حجم متغير Dynamic Array.
حفظ محتويات الـDynamic Arrays عند إعادة تعريفيها.
جملة ReDim.




http://www.c4arab.com/images/lessons/databases/mysql/rose.gif

المصفوفات متغيرة الحجم Dynamic Array:

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

ولصناعة Dynamic Array نتبع التالي:

نعلن عنها بأحد أوامر الإعلان الموضحة في الدرس السابق (Public or Private or Dim or Static) ونجعلها ديناميكية بعدم أي رقم في الأقواس كما يوضح المثال التالي:

Dim AnyArray( )

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

ReDim AnyArray( x+1 )

ملاحظات:
http://www.c4arab.com/images/lessons/databases/mysql/rose.gif


يمكن لجملة ReDim الظهور فقط في الـProcedure. وبعكس جملتي Dim, & Static فإن جملة ReDim قابلة للتنفيذ Executable.
تستخدم جملة ReDim نفس الصيغة Syntax المستخدم مع مصفوفات الحجم الثابت Fixed Array.
كل جملة من جمل ReDim يمكنها تغيير عدد العناصر بالإضافة إلى الحد الأعلى والحد الأدنى لكل بعد للمصفوفة، ومع ذلك فإن عدد الأبعاد في المصفوفة لا يمكن تغييره.
مثال:

لصناعة مصفوفة M كمصفوفة متغيرة الحجم، نعلن عنها أولاً في الـModule على النحو التالي:

Dim M( ) As Integer

ثم نعيد الإعلان عنها داخل الـProcedure على النحو التالي:

Sub ANY_NAME()



ReDim M(9, 15)

End Sub



حفظ محتويات المصفوفة متغيرة الحجم عند إعادة تعريفها:

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

Empty Value في حالة الــــ Variant Array
Zero في حالة الــــ Numeric Array
Zero-Length String في حالة الــــ String Array
Nothing في حالة الــــ Array of objects

وهذا مفيد عندما نريد تجهيز المصفوفة لبيانات جديدة أو عندما نريد اختزال حجم المصفوفة لتأخذ أقل مساحة ممكنة في الذاكرة. ولكن أحياناً نريد تغيير حجم المصفوفة دون فقد بياناتها!
يمكننا فعل ذلك باستخدام جملة ReDim مع كلمة Preserve وتعني "احفظ".

مثال:

http://www.c4arab.com/images/lessons/databases/mysql/rose.gif

الكود التالي يستخدم جملة ReDim لتخصيص، ثم إعادة تخصيص مساحة تخزينية لمصفوفة متغيرة الحجم، مع افتراض أن الـOption Base يساوي 1:

Dim MyArray ( ) As Integer 'declare Dynamic Array

ReDim MyArray( 5 ) 'allocate 5 elements
For I = 0 To 5 'loop 5 times
MyArray(I) = I 'initialize array elements
Next I

ReDim MyArray( 10 ) 'allocate 10 elements
For I = 0 To 10 'loop 10 times
MyArray(I) = I 'initialize array elements
Next I

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

ReDim Preserve MyArray( 10 )

والآن يمكننا كتابة ملخص متكامل لجملة ReDim.

http://www.c4arab.com/images/lessons/databases/mysql/rose.gif


جملة ReDim:

تستخدم في مستوى الـProcedure لإعادة تخصيص allocates مساحة تخزينية storage space لمصفوفة متغيرة الحجم Dynamic array.

صيغتها Syntax:

ReDim [Preserve] varname(subscripts) [As type] [, varname (subscripts) [As type]]

حيث أن:

Preserve اختيارية، وتستخدم لحفظ البيانات الموجودة في المصفوفة عند تغيير حجم آخر بعد فيها.
varname اسم المتغير (اسم المصفوفة).
subscripts أبعاد المصفوفة (عددهم على الأكثر 60) وتستخدم الشكل التالي:
[lower To] upper [, [lower To] upper]

والقيمة الأدنى تحددها جملة Option Base وإذا لم توجد، يكون الحد الأدنى هو الافتراضي (صفر).

type اختيارية، وتحدد نوع بيان عناصر المصفوفة. وقد تكون أي من الأنواع التالية:
Byte, Boolean, Integer, Long, Single, Double, Currency, Decimal, Date, Object, String, Variant, User-defined.

[, varname (subscripts) [As type]] اختيارية، لإعادة تحجيم مصفوفة أخرى.

ملاحظات هامة:
http://www.c4arab.com/images/lessons/databases/mysql/rose.gif


جميع ما ذكر في الصيغة داخل قوسين مربعين [] يعتبر اختياري يمكن الاستغناء عنه حين عدم الحاجة إليه.
تستخدم جملة ReDim لتحجيم أو إعادة تحجيم مصفوفة متغيرة الحجم Dynamic Array والتي بالفعل قد أعلن عنها مسبقاً باستخدام أي من الجمل Dim, Private, Public مع أقواس فارغة (أي بدون ذكر الأبعاد).
يمكن تكرار استخدام جملة ReDim لتغيير عدد العناصر والأبعاد لمصفوفة، ومع ذلك لا يمكن الإعلان عن مصفوفة بنوع معين من البيانات ثم إعادة تعريفها لاحقاً مع تغيير نوع البيان لنوع آخر إلا إذا كانت المصفوفة محتواه في variant.
إذا كانت المصفوفة محتواه في variant فإن نوع بيان العناصر يمكن أن يتغير باستخدام المقطع As Type إلا إذا استخدمنا كلمة Preserve ففي هذه الحالة لا يسمح بتغييرات.
إذا استخدمنا كلمة Preserve يمكن فقط تحجيم البعد الأخير للمصفوفة ولا يمكن تغيير عدد الأبعاد على الإطلاق.
إذا كان للمصفوفة بعد واحد فيمكن إعادة تحجيم هذا البعد لأنه البعد الأخير والوحيد بالمصفوفة.
وإذا كان للمصفوفة بعدين أو أكثر فيمكن فقط تغيير حجم البعد الأخير مع الاحتفاظ بمحتويات المصفوفة.
عندما نستخدم Preserve يمكن تغيير حجم المصفوفة بتغيير الحد الأعلى بينما ينتج لدينا خطأ حين تغيير الحد الأدنى.
إذا صنعنا مصفوفة أصغر مما كانت فإن بيانات العناصر المخزنة سوف تفقد.
إذا مررنا pass مصفوفة إلى Procedure بالـRefrence فإنه لا يمكن تغيير أبعادها من داخل الـProcedure.
تحذير:

http://www.c4arab.com/images/lessons/databases/mysql/rose.gif

جملة ReDim ستعمل وكأنها جملة إعلان إذا كان المتغير (المصفوفة) التي تعلن عنه غير موجود على مستوى الـProcedure أو الـModule. وإذا كان هناك متغير آخر بنفس الاسم قد أنشئ بعد ذلك وحتى لو كان في النطاق ككل Scope؛ فإن ReDim سوف ترجع للمتغير الأخير ولن يتسبب عن ذلك خطأ في الترجمة Compilation error حتى ولو كانت جملة Option Explicit فعّالة. وبذلك لن يدرك المبرمج أنه هناك خطأ بالشيفرة code.
ولتفادي هذا التعارض لا ينبغي استخدام جملة ReDim كجملة إعلان بدلاً من Dim مثلاً، ولكن نستخدمها فقط لإعادة تعريف حجم المصفوفة.



مثال(1):
http://www.c4arab.com/images/lessons/databases/mysql/rose.gif


يبين المثال التالي كيف يمكن زيادة حجم البعد الأخير للمصفوفة متغيرة الحجم بدون محو البيانات الموجودة فيها:

ReDim X(10,10,10)
ReDim Preserve X(10,10,15)

مثال(2):

http://www.c4arab.com/images/lessons/databases/mysql/rose.gif

لإدخال قائمة من الأعداد غير معلومة العدد مسبقاً (أي وقت كتابة الشيفرة code) ويسأل عن عددها عند تشغيل الـcode:

Dim X() As Integer
N = InputBox("أدخل عدد العناصر من فضلك")
ReDim X(N)
For I = 1 To N
X(I) = InputBox("أدخل عنصر من القائمة")
Next I

مثال(3):

http://www.c4arab.com/images/lessons/databases/mysql/rose.gif

لإدخال قائمة من الأعداد غير معلومة العدد مسبقاً (أي وقت كتابة الشيفرة code)، ولا يسأل عن عددها عند تشغيل الـcode ولكن يقوم المستخدم بإدخال صفر (أو أي قيمة متقف عليها) عند الانتهاء من ادخال عناصر المصفوفة:

Dim X()
Do
prompt=" أدخل عنصراً من القائمة وفي النهاية أدخل صفر"
DummyVariable = InputBox(prompt)
IF DummyVariable <> 0 Then
UpperLimit = UpperLimit + 1
ReDim Preserve X(UpperLimit)
X(UpperLimit) = DummyVariable
Else
Exit Do
End IF
Loop

سلوان
07-04-2006, 06:37 AM
شكرا لك اخي صاحب الموضوع
و اخي عمر محمد(o.mohammed)
هل لغة فيجوال بيسك 2005 هية فيجوال بيسك 2005 .net
ام غيرها؟

thegust2000
07-04-2006, 06:46 AM
اخي الحبيب
جزاك الله خيرا على هذا الموضوع القيم
ولكن عندي ملاحظه
انت قلت في كلامك انه من الافضل ان تبدا من حيث انتهى الاخرون او لا تعيد اختراع العجله
وها انت تفعل ذلك
فلغه البرمجه Visual Basic 6 قد اكل عليها الزمن وشرب !!!!!!
بالاضافه الى ضعفها
ولكن هناك لغه البرمجه VB.NET التي تضاهي في قوتها لغه السي شارب بل تزيد عليها قوه في سهوله تعلمها
او لغه Visual Basic 2005 وهي احدث اصدار للفيجوال بيسك وبالفعل بها من المميزات ما لايخطر على بالك
فاشكرك اخي العزيز على هذا الموضوع


اخى الكريم
اولا:
اشكرك لردك ومرورك بالموضوع
ثانيا:
فى هذا الموضوع الذى هممت بجمعه للمنتدى اردت بهذا ان يكون هناك موضوع واحد على الاقل يمكنك الرجوع اليه فى اى حاله
ثالثا:
انا لم اتطرق الى لغه وتركت اخرى ولكن الموضوع مازال فى البدايه
ومن كلامى وعنوان الموضوع انه ليس مخصص للفيجوال فقط ولكن للغات البرمجه
على وجه عام
رابعا:
اذا كنت تجيد اى من VB.NET او لغه السي شارب او لغه Visual Basic 2005
فبامكانك ان تضيف وتشارك فى الموضوع وستكون الفائده فى النهايه للاعضاء قبل المنتدى
وشكرا مره اخرى على هذا المرور

thegust2000
07-04-2006, 06:48 AM
سأشرح لكم طريقة سهلة للغايه لربط برنامجك بإمتداد معين مثل برنامج Winamp وملفات mp3 مثلا .... ساستخدم الدوال RegCreateKey و RegSetValue قم بتشغيل فيجول بيسك على مشروع جديد إنسخ هذه الاعلانات إلى قسم الإعلانات فى الفورم الجديد Private Declare Function RegCreateKey Lib "advapi32.dll" _ Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal _ lpSubKey As String, phkResult As Long) As Long هذه الدالة تتطلب ثلاث توابع التابع الاول hKey وهو يمثل المفتاح الرئيسى أما التابع الثانى lpSubKey فيمثل المفتاح الفرعى المشتق من المفتاح الاول وهذا المفتاح هو الذى سيتم إنشاءة أما المفتاح الثالث فيمثل مؤشر للمفتاح الذى تم إنشاءة وسنستخدمة فى الدالة الثانية ( حرف P عندما يأتى فى دالة من دوال API فهو يدل على مؤشروهى كلمة مشهورة جداً فى لغة السى وهى تمثل عنوان فى الذاكرة ) Private Declare Function RegSetValue Lib "advapi32.dll" _ Alias "RegSetValueA" (ByVal hKey As Long, ByVal _ lpSubKey As String, ByVal dwType As Long, ByVal _ lpData As String, ByVal cbData As Long) As Long أما هذه الدالة فهى تتطلب خمس متغيرات الاول والثانى كما فى الدالة السابقة أما الثالث dwType فهو يحدد نوع البيانات التى سيتم وضعها فى المفتاح الفرفعى أما التابع الرابع lpData فيمثل مؤشر إلىالتابع الثالث أما cbData فيحدد طول البيانات فى التابع الثانى ثم إنسخ هذه الثوابت أيضاً Const ERROR_SUCCESS = 0& Const ERROR_BADDB = 1& Const ERROR_BADKEY = 2& Const ERROR_CANTOPEN = 3& Const ERROR_CANTREAD = 4& Const ERROR_CANTWRITE = 5& Const ERROR_OUTOFMEMORY = 6& Const ERROR_INVALID_PARAMETER = 7& Const ERROR_ACCESS_DENIED = 8& Private Const HKEY_CLASSES_ROOT = &H80000000 Private Const MAX_PATH = 260& Private Const REG_SZ = 1 هذه الثوابت أعتقد أن معناها واضح ثم إنسخ هذا الكود إلى قسم الاعلانات فى الفورم وأضغط Enter فى يتم إنشاء الدالة التى ستقوم بالعمل Private Sub AssociateFileExtension(Extension _ As String, PathToExecute As String, ApplicationName _ As String) ثم ضع هذه الإعلانات Dim sKeyName As String Dim sKeyValue As String . Dim ret& . Dim lphKey& ألأن سنبدأ العمل فى الدالة....... فأنظر إلى هذا الكود sKeyName = ApplicationName فى هذا المتغير نخزن إسم البرنامج الذى تمرره لنا الدالة وهو سيكون المفتاح الاساسى sKeyValue = ApplicationName فى هذا المتغير نخزن إسم البرنامج الذى تمرره لنا الدالة وهو سيكون المفتاح الفرعى ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&) هنا نستدعى الدالة التى تنشأ المفتاح الاساسى فى التسجيل تحت المفتاح HKEY_CLASSES_ROOT ثم تضع مؤشر لهدا المفتاح فى المتغير &lphKey الذى سنستخدمة فى الخطوة الثانية ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&) فى هذه الخطوة ننشيء المفتاح الخاص بالبرنامج أو بمعنى أدق نضع الاسم فى هذا المفتاح sKeyName = "." & Extension sKeyValue = ApplicationName ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&) ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&) فى هذه الخطوة ننشيء المفتاح الخاص بالإمتداد الذى سيربط بالبرنامج sKeyName = ApplicationName sKeyValue = PathToExecute & " %1" ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&) ret& = RegSetValue&(lphKey&, "shellopencommand", REG_SZ, sKeyValue, MAX_PATH) فى هذه الخطوة سسنشيء المفتاح الذى سيفتح الطبيق عندما يضغط المستخدم ضغطة مزدوجة على أى ملف لة الإمتداد الذى ربطناه وهذه هى الخطوة الاخيرة وبذلك تصبح الدالة بالصورة الاتية Private Sub AssociateFileExtension(Extension _ As String, PathToExecute As String, ApplicationName _ As String) Dim sKeyName As String Dim sKeyValue As String Dim ret& Dim lphKey& sKeyName = ApplicationName sKeyValue = ApplicationName ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&) ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&) sKeyName = "." & Extension sKeyValue = ApplicationName ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&) ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&) sKeyName = ApplicationName sKeyValue = PathToExecute & " %1" ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&) ret& = RegSetValue&(lphKey&, "shellopencommand", REG_SZ, sKeyValue, MAX_PATH) End Sub وعندما ترغب فى إستخدام هذه الدالة ( أو بمعنى أدق هذا الإجراء ) تتبع الصورة الأتية AssociateFileExtension "إمتداد الملف ( ثلاث حروف فقط )" , "مسار البرنامج الذى سيفتح هذا الملف ", " إسم البرنامج" مثال بفرض أن إمتداد البرنامج هو nor ومسار البرنامج هو "C: test" وإسم البرنامج هو Project1.exe فيكون إستخدام الإجراء كالأتى AssociateFileExtension "nor"," C: test " , " Project1.exe" المراجع : MSDN

thegust2000
07-04-2006, 06:50 AM
سوف أحاول وضع دروس حول مشاكل البرمجة بلغة فيجوال بيسك ( DeBugging Visual
Basic )..

وهذا أول درس وهو عبارة عن مقدمة عامة لابد منها للبداية الصحيحة بمثل هذه
الدروس.....



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

1- سهولة إنشاء التطبيقات بهذه اللغة.

2- القدرة على إنشاء تطبيقات تفي بالغرض وتختصر الكثير من الوقت والجهد الذي ستصرفه في غيرها من لغات البرمجة المتقدمة.

3- الدعم المستمر لها من قبل الشركة المصممة ( Microsoft ) .

وربما كان لاستخدام VB في مجالات متعددة وطرق كثيرة ( مثل إنشاء برامج مستقلة أو
تكامل بعض البرامج مع VBA أو بعض التطبيقات المعتمدة على الويب باستخدام IIS و
DHTML ) ربما كلن لهذا اثر في ظهور الكثير من الأخطاء في كتابة الكود ..........
وهذا في الواقع ما يعاني منه الكثير من مبرمجي هذه اللغة .........

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



مقدمة لبناء البرامج:



أول شيء يجب أن يفعله المبرمج هو ( التخطيط للمشروع أو البرنامج ) وربما كانت هذا
أصعب شيء في بناء أي برنامج لذلك نجد الكثير من المبرمجين يغفلون عن هذه المرحلة
ويبدءون مباشرة بالتصميم ولاشك أن بناء أي برنامج بهذه الطريقة يكون سببا لظهور
الكثير من الأخطاء في البرنامج .....

ما هي الأمور التي يجب أن تراعى في مرحلة التخطيط للمشروع ؟؟؟؟

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

1- ما هو الهدف من المشروع ......

2- ما هي الحدود التي يجب أن توضع له ...

3- ما هي المؤسسة ( أو المستخدمين ) الذين سيقومون بالاستفادة من هذا المشروع ....

4- ما هو الوقت المخصص لعمليات تصميم وإنشاء البرنامج ....

هل تستطيع الإجابة عن هذه التساؤلات ؟؟؟

إذا كانت إجابتك( نعم ) فهذا يعني انك جاهز للبدء في التصميم . وأما إذا كانت ( لا
) فأنصحك بأن تتروى قليلا إلى أن تعرفها .......



تصميم واجهة الاستخدام : UI
USER INTERFASE

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

1- بساطة التصميم :

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



2- الالتزام بالأوضاع العامة والأساسية
:

وحتى تتوضح هذه أكثر سأضرب بعض الأمثلة:



أ- لا تضع زري OK و Cancel بهذا الترتيب داخل إحدى المربعات ثم تجعلها Cancel و Ok
في مربع آخر ... بل حاول أن تلتزم بالوضع العام دائما ؟؟؟؟؟

ب- العمل على تحديد مفاتيح الاختصار التي سيتم استخدامها في البرنامج ضمن أسس عامة
ومعروفة مثلا .... Open = CTR +O .....

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



3- عدم استخدام ألوان كثيرة وغير مقبولة:


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

وهذا كله يعتمد بشكل عام على نوعية البرنامج وفي هذه سيسعفك المخطط الذي وضعته
لمشروعك عندما حددت فيه نوعي البرنامج ومستخدميه ....



والخاصة انه يجب بناء واجهة استخدام مبسطة وواضحة تعطي انطباع الرضا من المستخدم ..
لا التعقيد ...



فن كتابة الكود:

المبرمج الواعي يعمل كما يعمل الفنان في تنسيق الصورة التي يرسمها لذلك فهو يقوم
بتنسيق الكود والاعتناء به قدر الامكان وهذا يرجع بالكثير من الفوائد عليه ...
واليك بعض القواعد الأساسية في تنسيق كتابة الاكواد:



1- وضع المسافات بين اسطر الكود:

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

مثال كود لم يتم تنسيقه:










If question = "Yes" Then




For x = 0 To 100



DoSomething = x * 186232


If DoSomething > 3205420 Then



MsgBox "You are here"




Else



MsgBox "You are there"




End If




Next x




Else



MsgBox "later"




End If





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






If answer = "Yes" Then


For x = 0 To 100


DoSomething = x * 186232


If DoSomething > 3205420 Then


MsgBox "You are here"


Else


MsgBox "You are there"


End If


Next x


Else


MsgBox "later"


End If







فمن خلال وضع مسافات بين اسطر الكود تتمكن على الفور من مشاهدة كيفية تجميع البنية
المنطقية. كما ستجد انه قد تم وضع نظام التكرار For – Next في النصف الأول من جملة
If – Then..... وداخل نظام التكرار For – Next ستجد جملة If Then أخرى .....



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



2- إضافة التعليقات إلى الكود:

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

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



3- استخدام طرق صحيحة لتسمية أنواع البيانات:

غالبا ما يستخدم المبرمجون في تسميتهم للمتغيرات والدالات والأدوات أسماء تكون وفقا
لما يعبر في أذهانهم في هذا الوقت , ويستكملون إنشاء برامجهم دون التفكير في
العواقب التي قد تظهر نتيجة لتلك الأسماء التي قاموا باختيارها , وقد لا تكون هذه
مهمة إذا كان القائمين على المشروع مبرمجا واحدا .... وأما إذا كانوا مجموعة
مبرمجين فيجب أن يكون بينهم اتفاق على آلية معينة لمثل هذه التسميات , وهناك الكثير
من الطرق لصيغ الاتفاق لابد وأنك اطلعت على بعضها ... بعض الأمثلة على ذلك:


Array = a ....... Data = dt .......Single =sgl


Text = txt ...... Form =frm .... Check Box = chk



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



هذا الخطأ شائع وهو يحدث مثلا عند وضعك عددا من المتغيرات في سطر واحد مثال ذلك:





Dim nVar1, nVer2, nVer3, As Integer





قد تعتقد هنا انه قد تم تخصيص نوع البيانات الخاص بالأعداد الصحيحة ( Integer )
لكافة المتغيرات الثلاثة .... ولكن الحقيقة انه قد تم تحديد المتغير الأخير فقط
(nVer3 ) كعدد صحيح وأما بالنسبة للمتغيرين الآخرين فقد تم تخصيص نوع البيانات (
Variant ) لكل منهما .....

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




Dim nVar1 As Integer, nVer2 As Integer, nVer3 As Integer



وأختم هذا الدرس بخطأ خفي نوعا ما ( على المبتدئين ) يكون عادة في تسمية المصفوفات
التي تبدأ برقم صفر ( 0 ) :

المصفوفة بشكل عام عبارة عن مجموعة من المكونات المعروفة التي يتم الوصول إليها من
خلال اسم متغير معروف ....... كما يتم التعبير عن كل مكون عن طريق رقم يطلق عليه
اسم فهرس ( Index ) , كما تبدأ مكونات المصفوفة بالرقم صفر ( 0 ) , وعند قيامك
بتحديد المصفوفة الخاصة بك فستجد أنها قد تظهر على النحو التالي :





Dim sStudentName(10) As String



تقوم هذه المصفوفة بتحديد أن المتغير sStudentName سوف يشتمل على أحد عشر مكونا ...
ولكن لماذا أحد عشر وليس عشر مكونات ؟؟؟؟

حيث أن المصفوفة المصفوفة تبدأ بالرقم صفر, فاعلم انه سيتم تضمين هذا المكون في
العدد الإجمالي للمكونات.... أي ستبدأ المصفوفة بالرقم صفر وتنتهي بالرقم ( 10 )
........

قد تسأل عن أهمية معرفة هذا ...؟؟ حسنا ......

عندما تعمل مع عناصر تحكم مثل مربعات القوائم ومربعات السرد ستكتشف أن كل مكون
موجود داخلها يعتبر جزءا من احد الأخطاء , ولتتمكن من معرفة عدد المكونات الموجودة
في عنصر واحد من عناصر التحكم تلك يمكنك استخدام ListCount الخاصة بعنصر التحكم
المطلوب , والتي تعمل على إرجاع عدد المكونات الموجودة داخل المصفوفة .... والآن
عند قيامك باستخدام هذه القيمة داخل نظام التكرار For – Next وذلك للتمكن من معالجة
معلومات المصفوفة مثلما يحدث في الكود التالي سيتم إخبارك بوجود الخطأ ( Subscript
) ...








For x = 0 To lststudents . ListCount


If sStudentName (x) = txtStudentName Then



MsgBox "The Student is Enrolled"


End If



Next







ولمزيد من التوضيح ... يرجع هذا الأمر إلى أنه قد تم تحديد المصفوفة sStudentName
بالعدد ( 10 ) وليس بالعدد ( 11 ) , ولتتمكن من تجنب ظهور مثل هذا الخطأ .. قم بطرح
واحد من المجموع الكلي الذي يتم إرجاعه من خاصية ListCount .... على النحو الموضح
في الكود التالي:








For x = 0 To lststudents . ListCount -1


If sStudentName (x) = txtStudentName Then



MsgBox "The Student is Enrolled"


End If


Next

thegust2000
07-04-2006, 07:05 AM
قد ترغب بعد الانتهاء من برنامج قمت بعمله بلغة الفجوال بيسك بأن تجعل برنامجك في الشكل التجاري الذي يسمح بتحميل برنامجك على أجهزة متعددة دون الوصول إلى الكود.

يمكن عمل مجلد الـSetup الذي يحول برنامجك إلى صيغة ملف تنفيذي exe.
عن طريق أداة جاهزة موجودة مع برنامج الفجوال بيسك..

في هذا الدرس سوف نشرح بالتفصيل كيفية استخدام الأداة Package and Deployment Wizard التي تسهل عليك عمل مجلد الـSETUP لبرنامجك وبالتالي إمكانية تحميل البرنامج على الأجهزة كما هو الحال في البرامج التجارية التي نقوم بشرائها وتحميلها على أجهزتنا.


خطوات العمل:

ملاحظة: تستطيع تحميل البرنامج من هذه الوصلة:

http://www.c4arab.com/images/lessons/programming/visualbasic/vb.zip

لتبدأ في العمل خطوة خطوة.

أولا: بعد الانتهاء من البرنامج قم بحفظ مشروعك كاملا وذلك باختيار save project as من القائمة file
كما بالشكل التالي:

http://www.c4arab.com/images/lessons/programming/visualbasic/p1.jpg
وعملية الحفظ تتم على خطوتين:
الأولى: حفظ النماذج (Forms) الموجودة داخل برنامج. ، برنامجي هنا يحتوي على فورم واحد قمت بتسميته بالاسم formvb
الثانية: حفظ المشروع (Project) كاملا ، وليكن بالاسم projectvb



ثانيا: من قائمة File اختر Make project.exe
سوف تظهر لك نافذة كما بالشكل التالي:


http://www.c4arab.com/images/lessons/programming/visualbasic/p2.jpg

اكتب اسم الملف (File Name) (وليكن نفس اسم المشروع للسهولة projectvb) في مربع النص المعد لذلك ثم انقر OK



ثالثا:

1- من القائمة Add-In اختر Add-In manager
http://www.c4arab.com/images/lessons/programming/visualbasic/p3.jpg
2- يفتح لك نافذة اختر منها Package and Deployment Wizard بالنقر عليها مرتين ثم انقر على OK
http://www.c4arab.com/images/lessons/programming/visualbasic/p4.jpg
3- بعد ذلك اعد فتح القائمة Add_in فتجد أن Package and Deployment Wizard أصبحت من ضمن عناصر القائمة فقم باختياره.
http://www.c4arab.com/images/lessons/programming/visualbasic/p5.jpg
وسوف تظهر لك رسالة مفادها: أن هذه الأداة لن تعمل جيدا إذا لم تكن قد قمت بحفظ مشروعك كاملا، هل تريد حفظ مشروعك قبل الإكمال؟
ونحن قمنا في البداية بحفظ المشروع فاختر لا، أو نعم إذا أحببت أن تتأكد من أنك حفظت المشروع بشكل جيد.


4- بعد ذلك سوف تفتح لك أول نافذة في معالج الـPackage and Deployment ..

http://www.c4arab.com/images/lessons/programming/visualbasic/p6.jpg
طبعا أنت الآن تعمل داخل المشروع الذي تود عمل مجلد الـSetup له، فمن المؤكد إن امتداد المشروع الذي سيظهر لك داخل هذه النافذة سيكون لمشروعك الذي تود عمل مجلد setup له.
وهو في مثالنا هذا:
C:Program FilesMicrosoft Visual StudioVB98Projectvb.vbp

إذا لم يكون كذلك فقم بكتابة مسار الملف كاملا.


5- بعد ذلك اضغط على الأيقونة Package


6- تظهر لك رسالة مفادها: أنه يوجد ملف مصدري Source File أحدث من الملف الذي قمنا بعمله في الخطوة ثانيا.. أجب بـyes إذا كنت ترغب بإعادة عملية الترجمة recompile للملف الجديد أو No إذا كنت تريد استخدام الملف الموجود.


7- يتم بعد ذلك نقل الملفات.. ثم يظهر لك في النافذة التالية نوع الحزمة التي تريدها. اختر Standard Setup Package.. ثم next
http://www.c4arab.com/images/lessons/programming/visualbasic/p7.jpg
8- يطلب منك تحديد مجلد folder يوضع فيه البرنامج بعد عمل الـsetup.. اختر المجلد الذي تريد وضع مجلد الـsetup فيه بعد إنشائه. ثم next للمتابعة.. (وانتبه جيدا لهذا المكان لكي تفتحه لاحقا بعد اكتمال العمل)

http://www.c4arab.com/images/lessons/programming/visualbasic/p8.jpg

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

9- بعد ذلك تظهر لك نافذة يطلب منك تحديد الأشياء التي ترغب بضمها إلى مجلد الـsetup.. قم بتحديد ما تريد أن تضيفه، انقر على الأيقونة Add إذا كنت تريد إضافة ملف آخر إلى مجلد الـSetup كأن تضيف مستند كنت قد أعددته مسبقا لشرح خطوات تحميل البرنامج أو مميزاته أو ما شابه ذلك، أو اجعل الخيارات كما هي.. ثم انقر next للمتابعة..

http://www.c4arab.com/images/lessons/programming/visualbasic/p9.jpg
10- في النافذة التالية يطلب منك اختيار طريقة عمل مجلد الـsetup ، وهي طريقتين إما أن يكون مجلد كامل واحد، أو يكون مقسم بحيث يمكن وضع هذه الأقسام داخل أقراص مرنة. طبعا اختر الخيار الأول Single capللسهولة وهي الطريقة المفضلة والشائعة الاستخدام.. ثم next للمتابعة..
http://www.c4arab.com/images/lessons/programming/visualbasic/p10.jpg
11- في النافذة التالية حدد عنوان نافذة التحميل Installation Title ، يمكنك أن تتأمل الصورة الموجودة في يسار النافذة، لتعرف أين سيظهر هذا العنوان عند التحميل .. من الأفضل كتابة اسم مشروعك.. بالعربي أو بالإنجليزي. ثم next للمتابعة
http://www.c4arab.com/images/lessons/programming/visualbasic/p11.jpg

12- بعد ذلك يطلب منك طريقة وضع البرنامج داخل قائمة ابدأ بشكل افتراضي Default عند تحميل البرنامج. تستطيع أن تجعلها كما هي أو تغيرها حسبما يروق لك. ثم next للمتابعة..
http://www.c4arab.com/images/lessons/programming/visualbasic/p12.jpg
13- النافذة التالية تعرض لك اسم الملف الذي تود عمل Setup له وهو في مثالنا هذا project.exe وكذلك المسار الذي وضعت فيه هذا الملف، وهذا لتتيح لك فرصة التأكد من الملف الذي تود عمل setup له. ثم اضغط next للمتابعة..
http://www.c4arab.com/images/lessons/programming/visualbasic/p13.jpg
14- النافذة التالية تسألك هل ترغب بمشاركة الملف projectvb.exe مع برامج. ضع إشارة صح أمام المجلد إذا كنت تريد ذلك. (غير مهمة).. ثم next للمتابعة..
http://www.c4arab.com/images/lessons/programming/visualbasic/p14.jpg
15- آخر نافذة تخبرك بأنه تم الانتهاء من جمع المعلومات اللازمة لعمل مجلد الـsetup ، اختر منها finish لإكمال الإعدادات المتبقية.http://www.c4arab.com/images/lessons/programming/visualbasic/p15.jpg
عند الانتهاء سيظهر لك تقرير بعملية الـPackaging التي تمت على الملف التنفيذي projectvb.exe، احتفظ بالتقرير إذا كنت ترغب بذلك.


الآن أغلق كل شيء أمامك واتجه إلى المسار الذي قمت بوضع مجلد الـSetup فيه.
C:Program FilesMicrosoft Visual StudioVB98Package (2)

سوف تجد بإذن الله في المكان الذي حددته في الخطوة رقم 8 المجلد الذي وضعت بداخله ملف الـsetup
http://www.c4arab.com/images/lessons/programming/visualbasic/p16.jpg
جرب وقم بعمل setup لبرنامجك لتشعر بمتعة حقيقة لعملك
http://www.c4arab.com/images/lessons/programming/visualbasic/p17.jpg

thegust2000
07-04-2006, 07:08 AM
بسم الله الرحمن الرحيم .


مقدمة :

ما هي App.path ؟ وماذا نستفيد منها ؟

App.path تعني مسار البرنامج ، وهي تستخدم للحصول على مسار المجلد الذي يوجد فيه البرنامج .

ونحتاج لاستخدام app.path بكثرة خصوصاً في البرامج التي تعتمد على ملحقات ، مثل قواعد البيانات ، والصور ، والملفات النصية .

App.path


فمثلاً إذا كان لدينا برنامج في C:\New فهذا هو مسار البرنامج والذي يمكننا الحصول عليه باستخدام App.path
وللتجربة يمكنك الحصول على مسار برنامجك بواسطة أمر هكذا :


Msgbox App.path

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

الفائدة من ذلك هو تلافي مشكلة تغير المسارات من جهاز لآخر ، فمثلاً في برنامج للصور ضع جميع الصور في نفس مجلد البرنامج ، ولتحميل صورة مثلاً اسمها PP1 وامتدادها Bmp اكتب :


Picture1.Picture = Loadpicture(App.path & "\PP1.Bmp")

ويمكنك أيضاً إنشاء مجلد جديد في نفس مجلد البرنامج وتسميه مثلاً Image وتضع فيه الصور ، وبذلك يصبح أمر تحميل الصور بالشكل التالي :

Picture1.Picture = Loadpicture(App.path & "\Image\PP1.Bmp")

وليست الصور هي كل ما نستخدم فيها App.path بل كل شيء ، فمثلاً لتشغيل ملف مفكرة ملحق بالبرنامج نضعه في مجلد البرنامج ونكتب :

Shell "notepad.exe" & " " & App.path & "\RedMe.txt", vbNormalFocus

ولنسخ نفس البرنامج نستخدم الأمر التالي :

Filecopy App.path & App.EXEName , "C:\Ahmed"

وهكذا ، وتوجد لـ App العديد من الفوائد التي لا يتسع المجال لذكرها بعيداً عن الخاصية Path ، ومنها مثلاً إنهاء البرنامج إذا لم يكن يعمل من القرص المدمج ، واستخدامها في أوامر حفظ البيانات واسترجاعها ، ومنع تشغيل أكثر من نسخة .... الخ

لكن ينبغي التنبه إلى أن App.path قد تعطينا C:\Ahmed أو C:\Ahmed\ولتلافي هذه المشكلة نقوم بالتالي :

Dim Folder
Folder = App.path
If Right(Folder,1) <> "\" then Folder = Folder & "\"

هنا قمنا بتعريف متغير وخزنا فيه مسار البرنامج ، واختبرناه ، فإذا كان آخر حرف من اليمين لا يساوي \ فإننا نقوم باضافتها إليه .

وهكذا نتعامل مع الناتج والمخزن في المتغير Folder كأنه يحتوي على \ مباشرة ، ولذا لا حاجة لكتابتها قبل كتابة اسم الملف .

هناك اسلوب آخر متبع من المبرمجين الذين قد تتنقل برامجهم من مكان لآخر بعيداً عن مرفقاته ، وبدلاً من ازعاج المستخدم باظهار رسالة أن البرنامج لم يعثر على مرفقاته ، أو باظهار مربع حواري يطلب منك ارشاد البرنامج إلى مكان المرفقات ، فإنهم يقومون بتخزين مسار مرفقات البرنامج مرة واحدة في مكان موحد ( قيمة في الريجستري - ملف على C ) ، ومن ثم قراءة هذه القيمة من أماكن مختلفة ،

خاتمة :

تعرفنا في هذا الدرس السريع على بعض تطبيقات App.path .

thegust2000
07-04-2006, 07:11 AM
المقدمة :

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

الدرس :

أولاً : الألوان باستخدام QBColor :
تضم هذه الطريقة خمسة عشر لوناً تبدأ من الصفر وحتى 15 ولكل رقم لون معين ، ويمكن الحصول على الألوان من هذه القائمة بالطريقة التالية :

Picture1.BackColor = QBColor(Number)

حيث Number هو رقم بين 0 و 15 .

ثانياً : اختيار الألوان من مربعات الحوار .

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


' لتغيير عنوان مربع الحوار
CommonDialog1.DialogTitle = "اختر اللون الذي تريد"
' لعرض مربع ( لوحة الألوان )
CommonDialog1.ShowColor
' لعرض رقم اللون في رسالة
MsgBox CommonDialog1.Color
' وتغيير لون الفورم حسب اللون المختار .
Form1.BackColor = CommonDialog1.Color

ثالثاً : معرفة رمز اللون .
بفرض أن لدينا لون هو خلفية الفورم فيمكن معرفة رمز اللون ( غير رقمه ) بالشكل التالي :


Dim MyColor
MyColor = Form1.BackColor

Dim Red_C, Green_C, Blue_C

Red_C = (MyColor And &HFF&)
Green_C = (MyColor And &HFF00&) \ 256
Blue_C = (MyColor And &HFF0000) \ 65536

Dim Color_1
Color_1 = Format(Hex(Red_C) &

Hex(Green_C) & Hex(Blue_C), "000000")

MsgBox Color_1

رابعاً : تكوين لون من تغير تركيز الألوان الأساسية ( أحمر + أخضر + أزرق ) .
اضف ثلاثة من أدوات HScrollBar واجعل خاصية Max لها = 255 ( واحدة لتغيير تركيز كل لون ) .
ثم ضع الكود التالي في حدث HScroll_Change

Form1.BackColor = RGB(HScroll1.Value, HScroll2.Value, HScroll3.Value)


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


TextRed.Text = (Form1.BackColor And &HFF&)
TextGreen.Text = (Form1.BackColor And &HFF00&) \ 256
TextBlue.Text = (Form1.BackColor And &HFF0000) \ 65536



خامساً : معرفة تركيز الألوان الأساسية في أي لون ، وهي عملية عكسية للعملية السابقة .

سادساً : معرفة لون النقطة التي يمر بها الماوس

اكتب أولاً الأوامر التالية في الجينرال :

' لمعرفة نقطة الماوس
Option Explicit
Private Type POINTAPI
x As Long
y As Long
End Type
' =========================================
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long

ومن ثم اكتب الأمر التالي في تايمر :


Dim tPOS As POINTAPI
Dim sTmp As String
Dim lColor As Long
Dim lDC As Long
Dim thecolor
lDC = GetWindowDC(0)
Call GetCursorPos(tPOS)
lColor = GetPixel(lDC, tPOS.x, tPOS.y)
Form1.BackColor = lColor

أكواد متنوعة تتعلق بالألوان :

* لعمل خلفية متدرجة بالأزرق مثل برامج التنصيب :

Sub Fade(vForm As Form)
Dim intLoop As Integer
vForm.DrawStyle = vbInsideSolid
vForm.DrawMode = vbCopyPen
vForm.ScaleMode = vbPixels
vForm.DrawWidth = 2
vForm.ScaleHeight = 256
For intLoop = 0 To 255
vForm.Line (0, intLoop)-(Screen.Width, intLoop - 1), RGB(0, 0, 255 - intLoop), B
Next intLoop
End Sub
Private Sub Form_Activate()
Fade Me
End Sub

* لعمل خلفية متدرجة بالرمادي :

Private Sub Command1_Click()
Picture1.ScaleMode = vbPixels
x = Picture1.ScaleWidth
y = Picture1.ScaleHeight
For i = 0 To y - 1
For j = 0 To x - 1
pixel = Picture1.Point(j, i)
red = pixel Mod 256
green = ((pixel And &HFF00) / 256) Mod 256
blue = (pixel And &HFF0000) / 65536
g = ((red * 30) + (green * 60) + (blue * 20)) / 100
Picture1.PSet (j, i), RGB(g, g, g)
Next
Next
Picture1.ScaleMode = vbTwips
End Sub


* لعمل فورم بلون رخامي :

اكتب الأوامر التالي في التصاريح


Private Sub GradientFill()
Dim i As Long
Dim c As Integer
Dim r As Double
r = ScaleHeight / 3.142
For i = 0 To ScaleHeight
c = Abs(220 * Sin(i / r))
Me.Line (0, i)-(ScaleWidth, i), RGB(c, c, c + 30) 'Notice the bias To blue. You can be more subtle by reducing this number (try 10). Try other colours too.
Next
End Sub


وفي حدث Form_Resize

GradientFill


* لعمل فورم بلون قوس المطر :


Option Explicit
Private Sub Form_Load()
Me.AutoRedraw = True
Me.ScaleMode = vbTwips
Me.Caption = "Rainbow Generator by " & _
"K. O. Thaha Hussain"
End Sub


Private Sub Form_Resize()
Call Rainbow
End Sub


Private Sub Rainbow()
On Error Resume Next
Dim Position As Integer, Red As Integer, Green As _
Integer, Blue As Integer
Dim ScaleFactor As Double, Length As Integer
ScaleFactor = Me.ScaleWidth / (255 * 6)
Length = Int(ScaleFactor * 255)
Position = 0
Red = 255
Blue = 1
'Purposfully avoided nested loops
'------------- 1


For Green = 1 To Length
Me.Line (Position, 0)-(Position, Me.ScaleHeight), _
RGB(Red, Green \ ScaleFactor, Blue)
Position = Position + 1
Next Green
'--------------- 2


For Red = Length To 1 Step -1
Me.Line (Position, 0)-(Position, Me.ScaleHeight), _
RGB(Red \ ScaleFactor, Green, Blue)
Position = Position + 1
Next Red
'---------------- 3


For Blue = 0 To Length
Me.Line (Position, 0)-(Position, Me.ScaleHeight), _
RGB(Red, Green, Blue \ ScaleFactor)
Position = Position + 1
Next Blue

'----------------- 4


For Green = Length To 1 Step -1
Me.Line (Position, 0)-(Position, Me.ScaleHeight), _
RGB(Red, Green \ ScaleFactor, Blue)
Position = Position + 1
Next Green

'------------------ 5


For Red = 1 To Length
Me.Line (Position, 0)-(Position, Me.ScaleHeight), _
RGB(Red \ ScaleFactor, Green, Blue)
Position = Position + 1
Next Red
'------------------- 6


For Blue = Length To 1 Step -1
Me.Line (Position, 0)-(Position, Me.ScaleHeight), _
RGB(Red, Green, Blue \ ScaleFactor)
Position = Position + 1
Next Blue
End Sub



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


Sub XFormBlueFade(vForm As Object)
On Error Resume Next
Dim intLoop As Integer
vForm.DrawStyle = vbInsideSolid
vForm.DrawMode = vbCopyPen
vForm.ScaleMode = vbPixels
vForm.DrawWidth = 2
vForm.ScaleHeight = 256


For intLoop = 0 To 255
vForm.Line (0, intLoop)-(Screen.Width, intLoop - 1), RGB(0, 0, 255 - intLoop), B 'Draw boxes With specified color of loop
Next intLoop
End Sub


Sub XFormFireFade(vForm As Object)
'This code works best when called in the
'
' paint event
On Error Resume Next
Dim intLoop As Integer
vForm.DrawStyle = vbInsideSolid
vForm.DrawMode = vbCopyPen
vForm.ScaleMode = vbPixels
vForm.DrawWidth = 2
vForm.ScaleHeight = 256


For intLoop = 0 To 255
vForm.Line (0, intLoop)-(Screen.Width, intLoop - 1), RGB(255, 255 - intLoop, 0), B 'Draw boxes With specified color of loop
Next intLoop
End Sub


Sub XFormGreenFade(vForm As Object)
On Error Resume Next
Dim intLoop As Integer
vForm.DrawStyle = vbInsideSolid
vForm.DrawMode = vbCopyPen
vForm.ScaleMode = vbPixels
vForm.DrawWidth = 2
vForm.ScaleHeight = 256


For intLoop = 0 To 255
vForm.Line (0, intLoop)-(Screen.Width, intLoop - 1), RGB(0, 255 - intLoop, 0), B 'Draw boxes With specified color of loop
Next intLoop
End Sub


Sub XFormIceFade(vForm As Object)
On Error Resume Next
Dim intLoop As Integer
vForm.DrawStyle = vbInsideSolid
vForm.DrawMode = vbCopyPen
vForm.ScaleMode = vbPixels
vForm.DrawWidth = 2
vForm.ScaleHeight = 256


For intLoop = 0 To 255
vForm.Line (0, intLoop)-(Screen.Width, intLoop - 1), RGB(0, 255 - intLoop, 255), B 'Draw boxes With specified color of loop
Next intLoop
End Sub


Sub XFormPurpleFade(vForm As Object)
On Error Resume Next
Dim intLoop As Integer
vForm.DrawStyle = vbInsideSolid
vForm.DrawMode = vbCopyPen
vForm.ScaleMode = vbPixels
vForm.DrawWidth = 2
vForm.ScaleHeight = 256


For intLoop = 0 To 255
vForm.Line (0, intLoop)-(Screen.Width, intLoop - 1), RGB(25, 0, 100 - intLoop), B 'Draw boxes With specified color of loop
Next intLoop
End Sub


Sub XFormRedFade(vForm As Object)
On Error Resume Next
Dim intLoop As Integer
vForm.DrawStyle = vbInsideSolid
vForm.DrawMode = vbCopyPen
vForm.ScaleMode = vbPixels
vForm.DrawWidth = 2
vForm.ScaleHeight = 256


For intLoop = 0 To 255
vForm.Line (0, intLoop)-(Screen.Width, intLoop - 1), RGB(255 - intLoop, 0, 0), B 'Draw boxes With specified color of loop
Next intLoop
End Sub


Sub XFormSilverFade(vForm As Object)
On Error Resume Next
Dim intLoop As Integer
vForm.DrawStyle = vbInsideSolid
vForm.DrawMode = vbCopyPen
vForm.ScaleMode = vbPixels
vForm.DrawWidth = 2
vForm.ScaleHeight = 256


For intLoop = 0 To 255
vForm.Line (0, intLoop)-(Screen.Width, intLoop - 1), RGB(255 - intLoop, 255 - intLoop, 255 - intLoop), B 'Draw boxes With specified color of loop
Next intLoop
End Sub


كل اجراء من الإجراءات السابقة يعطينا تدرجاً معينا كما يلي :

لتدرج من أزرق إلى أسود :


Call XFormBlueFade(Me) 'Makes it Fade Blue

لتدرج من الأصفر إلى الاحمر :

Call XFormFireFade(Me) 'Makes it FIRE!!

لتدرج من أخضر فاتح إلى أخضر غامق :


Call XFormGreenFade(Me) 'Makes it Fade Green

لتدرج من بني إلى أزرق


Call XFormIceFade(Me) 'Makes it Fade ICE



* لعمل 38 خلفية للفورم مشكلة من تداخل اللونين الأصفر والأحمر :


Dim FadeNumPos As Integer
'The First RGB Values
Dim R1 As Integer, G1 As Integer, B1 As Integer
'The Second RGB Values
Dim R2 As Integer, G2 As Integer, B2 As Integer
'These are the RGB values for the curren
' t line
Dim NewRed As Integer, NewGreen As Integer, NewBlue As Integer
'Easier than an array to store a color
Public FadeColors As New Collection
'The Difference
Dim OverAllDiff
'This is the long value for the line col
' or
Dim NewColor
'Gets the colors ready to draw the line
'Then calls on the effect sub to make th
' e gradient


Public Function Gradeffect(Target As Object, style As Integer)
'Clear the object
Target.Cls
'Get the fade count
FadeTimes = FadeColors.Count - 1
'Set the draw width for the line
Target.DrawWidth = 1
'Want auto redraw
Target.AutoRedraw = True
'Don't Modify these. Won't work without
' them
Target.ScaleWidth = 255 'No modifying
Target.ScaleHeight = Target.ScaleWidth 'No modifying
'do each color


For FadeNumPos = 1 To FadeTimes
'Set the Start values
R1 = R2
G1 = G2
B1 = B2
'Set the Start values for the first colo
' r


If FadeNumPos = 1 Then
R1 = FadeColors(1) Mod &H100
G1 = (FadeColors(1) \ &H100) Mod &H100
B1 = (FadeColors(1) \ &H10000) Mod &H100
End If
'Set the End values
R2 = FadeColors(FadeNumPos + 1) Mod &H100
G2 = (FadeColors(FadeNumPos + 1) \ &H100) Mod &H100
B2 = (FadeColors(FadeNumPos + 1) \ &H10000) Mod &H100
'Get the differences
RedDiff = (R1 - R2) / Target.ScaleHeight * FadeTimes
GreenDiff = (G1 - G2) / Target.ScaleHeight * FadeTimes
BlueDiff = (B1 - B2) / Target.ScaleHeight * FadeTimes
'For each line


For OverAllDiff = ((FadeNumPos - 1) * Target.ScaleWidth / FadeTimes) To (FadeNumPos * Target.ScaleHeight / FadeTimes)
'Get the new RGB values
NewRed = R1 - RedDiff * (OverAllDiff - ((FadeNumPos - 1) * Target.ScaleWidth / FadeTimes))
NewGreen = G1 - GreenDiff * (OverAllDiff - ((FadeNumPos - 1) * Target.ScaleWidth / FadeTimes))
NewBlue = B1 - BlueDiff * (OverAllDiff - ((FadeNumPos - 1) * Target.ScaleWidth / FadeTimes))
'Set the color
NewColor = RGB(NewRed, NewGreen, NewBlue)
'Do the effect
Effect Target, style
'Next Line
Next
'Next color
Next
'Done here
End Function
'The effect


Function Effect(Target As Object, kind As Integer)
'There are 36 different gradients. Try t
' hem all


Select Case kind
'Clockwork Down - Cool and New
Case 1
Target.Line (OverAllDiff + 1, Target.ScaleHeight)-(Target.ScaleWidth - OverAllDiff, OverAllDiff), NewColor, BF
'Clockwork Left - Cool and new!
Case 2
Target.Line (0, Target.ScaleWidth - OverAllDiff)-(Target.ScaleWidth - OverAllDiff, OverAllDiff), NewColor, BF
'Clockwork Up - Cool and new
Case 3
Target.Line (OverAllDiff, Target.ScaleHeight - OverAllDiff)-(Target.ScaleHeight, 0), NewColor, BF
'Clockwork Right
Case 4
Target.Line (OverAllDiff, Target.ScaleHeight - OverAllDiff)-(Target.ScaleHeight, OverAllDiff), NewColor, BF
'Right to Left
Case 5
Target.Line (Target.ScaleWidth - OverAllDiff, 0)-(Target.ScaleWidth - OverAllDiff, Target.ScaleHeight - 20), NewColor, BF
'Left to Right
Case 6
Target.Line (OverAllDiff, 0)-(OverAllDiff + 1, Target.ScaleWidth), NewColor, BF
'Fade Out from bottom right
Case 7
Target.Line (0, Target.ScaleHeight - OverAllDiff)-(Target.ScaleWidth, Target.ScaleHeight - (OverAllDiff + 1)), NewColor, BF
Target.Line (Target.ScaleWidth - OverAllDiff, 0)-(Target.ScaleWidth - (OverAllDiff + 1), Target.ScaleHeight), NewColor, BF
'Fade Out from bottom left
Case 8
Target.Line (0, Target.ScaleHeight - OverAllDiff)-(Target.ScaleWidth, Target.ScaleHeight - (OverAllDiff + 1)), NewColor, BF
Target.Line (OverAllDiff, 0)-(OverAllDiff + 1, Target.ScaleHeight), NewColor, BF
'Fade Out from top left
Case 9
Target.Line (0, OverAllDiff)-(Target.ScaleWidth, OverAllDiff + 1), NewColor, BF
Target.Line (OverAllDiff, 0)-(OverAllDiff + 1, Target.ScaleHeight), NewColor, BF
'Fade Out from top right
Case 10
Target.Line (0, OverAllDiff)-(Target.ScaleWidth, OverAllDiff + 1), NewColor, BF
Target.Line (Target.ScaleWidth - OverAllDiff, 0)-(Target.ScaleWidth - OverAllDiff, Target.ScaleHeight - 20), NewColor, BF
'Fade Out from center
Case 11
Target.Line (Int(Target.ScaleWidth / 2 - OverAllDiff / 2), Int(Target.ScaleHeight / 2 - OverAllDiff / 2))-(Target.ScaleWidth / 2 + OverAllDiff / 2, Target.ScaleHeight / 2 + OverAllDiff / 2), NewColor, B
'Fade In from bottom right
Case 12
Target.Line (OverAllDiff, Target.ScaleWidth)-(Target.ScaleWidth, OverAllDiff + 1), NewColor, BF
'Fade In from bottom left
Case 13
Target.Line (0, Target.ScaleHeight)-(Target.ScaleWidth - OverAllDiff, OverAllDiff), NewColor, BF
'Fade In from top left
Case 14
Target.Line (0, 0)-(Target.ScaleWidth - OverAllDiff, Target.ScaleHeight - OverAllDiff), NewColor, BF
'Fade In from top right
Case 15
Target.Line (Target.ScaleWidth, 0)-(OverAllDiff, Target.ScaleHeight - OverAllDiff), NewColor, BF
'Boxes 1
Case 16
Target.Line (Target.ScaleWidth, 0)-(OverAllDiff, Target.ScaleHeight - OverAllDiff), NewColor, BF
Target.Line (0, Target.ScaleHeight)-(Target.ScaleWidth - OverAllDiff, OverAllDiff), NewColor, BF
'Boxes 2
Case 17
Target.Line (Target.ScaleWidth, 0)-(OverAllDiff, Target.ScaleHeight - OverAllDiff), NewColor, BF
Target.Line (OverAllDiff, Target.ScaleWidth)-(Target.ScaleWidth, OverAllDiff + 1), NewColor, BF
'Boxes 3
Case 18
Target.Line (Target.ScaleWidth, 0)-(OverAllDiff, Target.ScaleHeight - OverAllDiff), NewColor, BF
Target.Line (0, Target.ScaleHeight)-(Target.ScaleWidth - OverAllDiff, OverAllDiff), NewColor, BF
Target.Line (OverAllDiff, Target.ScaleWidth)-(Target.ScaleWidth, OverAllDiff + 1), NewColor, BF
'Boxes 4
Case 19
Target.Line (0, Target.ScaleHeight)-(Target.ScaleWidth - OverAllDiff, OverAllDiff), NewColor, BF
Target.Line (OverAllDiff, Target.ScaleWidth)-(Target.ScaleWidth, OverAllDiff + 1), NewColor, BF
'Boxes 5
Case 20
Target.Line (Target.ScaleWidth, 0)-(OverAllDiff, Target.ScaleHeight - OverAllDiff), NewColor, BF
Target.Line (0, 0)-(Target.ScaleWidth - OverAllDiff, Target.ScaleHeight - OverAllDiff), NewColor, BF
'Boxes 6
Case 21
Target.Line (0, Target.ScaleHeight)-(Target.ScaleWidth - OverAllDiff, OverAllDiff), NewColor, BF
Target.Line (0, 0)-(Target.ScaleWidth - OverAllDiff, Target.ScaleHeight - OverAllDiff), NewColor, BF
'Boxes 7
Case 22
Target.Line (OverAllDiff, Target.ScaleWidth)-(Target.ScaleWidth, OverAllDiff + 1), NewColor, BF
Target.Line (0, 0)-(Target.ScaleWidth - OverAllDiff, Target.ScaleHeight - OverAllDiff), NewColor, BF
'Boxes 8
Case 23
Target.Line (0, 0)-(Target.ScaleWidth - OverAllDiff, Target.ScaleHeight - OverAllDiff), NewColor, BF
Target.Line (Target.ScaleWidth, 0)-(OverAllDiff, Target.ScaleHeight - OverAllDiff), NewColor, BF
Target.Line (0, Target.ScaleHeight)-(Target.ScaleWidth - OverAllDiff, OverAllDiff), NewColor, BF
Target.Line (OverAllDiff, Target.ScaleWidth)-(Target.ScaleWidth, OverAllDiff + 1), NewColor, BF
'Top to Bottom
Case 24
Target.Line (0, OverAllDiff)-(Target.ScaleWidth, OverAllDiff + 1), NewColor, BF
'Bottom to Top
Case 25
Target.Line (0, 0)-(Target.ScaleWidth, Target.ScaleHeight - OverAllDiff), NewColor, BF
'Refraction
Case 26
Target.Line (Target.ScaleWidth - OverAllDiff, OverAllDiff)-(Target.ScaleWidth - OverAllDiff, Target.ScaleHeight), NewColor, BF
Target.Line (OverAllDiff, Target.ScaleHeight - OverAllDiff)-(Target.ScaleHeight, OverAllDiff), NewColor, BF
'Line through middle
Case 27
Target.Line ((Target.ScaleWidth / 2) - (OverAllDiff / 2), 0)-((Target.ScaleWidth / 2) - (OverAllDiff / 2), Target.ScaleHeight), NewColor, BF
Target.Line ((Target.ScaleWidth / 2) + (OverAllDiff / 2), 0)-((Target.ScaleWidth / 2) + (OverAllDiff / 2), Target.ScaleHeight), NewColor, BF
'Exploded
Case 28
Target.Line (Target.ScaleWidth, OverAllDiff / 2)-(OverAllDiff, Target.ScaleHeight - OverAllDiff), NewColor, BF
Target.Line (0, Target.ScaleHeight)-(Target.ScaleWidth - OverAllDiff, OverAllDiff), NewColor, BF
'Pouring
Case 29
Target.Line (Target.ScaleWidth, 0)-(OverAllDiff, Target.ScaleHeight), NewColor, BF
Target.Line (0, Target.ScaleHeight)-(Target.ScaleWidth - OverAllDiff, OverAllDiff), NewColor, BF
'lighthouse
Case 30
Target.Line (Target.ScaleWidth, OverAllDiff / 2)-(OverAllDiff, Target.ScaleHeight - OverAllDiff), NewColor, BF
'Square
Case 31
Target.Line (OverAllDiff / 2, Target.ScaleWidth)-(Target.ScaleWidth, OverAllDiff + 1), NewColor, BF
'Ripped
Case 32
Target.Line ((Target.ScaleHeight * OverAllDiff), OverAllDiff)-(OverAllDiff, Target.ScaleWidth + OverAllDiff), NewColor, BF
'Prism
Case 33
Target.Line (Target.ScaleWidth - OverAllDiff, OverAllDiff)-(Target.ScaleWidth - OverAllDiff, Target.ScaleHeight), NewColor, BF
Target.Line (OverAllDiff, Target.ScaleHeight - OverAllDiff)-(Target.ScaleHeight - OverAllDiff, 0), NewColor, BF
'Top left to bottom right
Case 34
Target.Line (0, OverAllDiff * 2)-(OverAllDiff * 2, 0), NewColor
'Fade to center from top right and botto
' m left
Case 35
Target.AutoRedraw = False
Target.Line (0, Target.ScaleHeight - OverAllDiff)-(OverAllDiff, Target.ScaleHeight), NewColor
Target.Line (Target.ScaleWidth - OverAllDiff, 0)-(Target.ScaleWidth, OverAllDiff), NewColor
'Fade to center from top left and bottom
' right
Case 36
Target.Line (Target.ScaleWidth, Target.ScaleHeight - OverAllDiff)-(Target.ScaleWidth - OverAllDiff, Target.ScaleHeight), NewColor
Target.Line (0, OverAllDiff)-(OverAllDiff, 0), NewColor
'Wow I'm finally done!
End Select
End Function


Function nolic(Target As Object)
Target.FontSize = 10
Target.ForeColor = vbBlack
Target.CurrentY = 0
Target.CurrentX = 2
Target.Print "Created With a SpiderTek Product"
Target.ForeColor = vbWhite
Target.CurrentY = 0
Target.CurrentX = 3
Target.Print "Created With a SpiderTek Product"
End Function


Private Sub Form_Click()
Static x As Integer
If x = 36 Then x = 0
x = x + 1
Gradeffect Me, x
Me.CurrentY = 200
Me.CurrentX = 3
Me.Print "You are at """ & x & """ of 36 total effects."
nolic Me
End Sub


Private Sub Form_Load()
FadeColors.Add vbBlack
FadeColors.Add vbRed
FadeColors.Add vbYellow
FadeColors.Add vbWhite
Gradeffect Me, 1
End Sub


Private Sub Form_Resize()
Gradeffect Me, 1
End Sub


الرقم ( 1 ) السابق هو الذي يحدد شكل التداخل بتغيير البارميتر المرسل إلى الإجراء ، وهو يتراوح بين 1 و 38 على الشكل التالي كمثال :


1 - 4 مثلث أصفر ، وتدرج من الأحمر إلى الأسود ( الإختلاف في جهة الملثلث )
5 تدرج من الأحمر للأصفر متقطع
6 تدرج من الأبيض للأسود مروراً بالأحمر والأصفر صافي أفقي
7 مثل السابق من زاوية
8 - 10 من زاوية مع تقطع
11 من الوسط ( نصف مقطع ونصف صافي ) .
12 - 16 من زوايا ولكن الفورم مقسوم نصفين من زاويتين
17 ليس مقسوماً من النصف ولكن من جهة واحدة
18 من ثلاث جهات

خاتمة :

ملحوظة هامة جداً : أكواد القسم الثاني والتي يختص أغلبها بالتداخلات أعدها أخوة كرام في منتدى vb4arab وغيره ، فلهم جزيل الشكر .

في نهاية هذا الدرس نكون قد تعلمنا أساليب عديدة لانتقاء الألون خلال الفيجوال بيسك . وبعض العمليات على الألوان ، اضافة لعدد

thegust2000
07-04-2006, 07:16 AM
بسم الله الرحمن الرحيم .


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

الدرس :

أولاً : عرض الوقت في Label أو غيره بالطريقة القياسية - وكذلك التاريخ :
الأمر بسيط جداً, كل ما عليك هو وضع Timer وتغيير خاصية Interval = 1000 مثلاً للوقت وأكثر للتاريخ ، ومن ثم كتابة الأمر التالي :

Label1.Caption = DateTime

ومن ثم ضع . ستظهر لك قائمة من الطرق هذا تفصيل أهمها :


Date : 07/07/2003
Date$ : 07-07-2003
Now : 07/07/2003 04:37:21 ص
Time : 04:38:30 ص
Time$ : 16:38:46

هناك أيضاً Timer : تعود بعدد الثواني من منتصف الليل وحتى الوقت الحالي ... ويمكن أن تستفيد منها بأكثر من طريقة .

* ملاحظة : في كل ما سبق يمكن كتابته مباشرة دون كتابة DateTime .

ثانياً : عرض جزء من الوقت أو التاريخ ( سنة - شهر - يوم - ساعة - دقيقة - ثانية )
بنفس الطريقة السابقة أو بغيرها من الطرق ولكن يصبح الكود بالشكل التالي ( للثانية مثلاً ) .


Text1.Text = Second(Now)


غير المكتوب بالأحمر حسب المطلوب ليصبح ( Minute - Hour - Day - Month - Year ) .
ويمكنك استخراج هذه القمية من قيمة أخرى مرسلة بالشكل التالي على سبيل المثال .


Dim A1
A1 = "12/11/1424"
Msgbox Day(A1)


ثالثاً : عرض التاريخ الهجري والميلادي الحاليين :

يتم ذلك بتحويل طريقة التاريخ بالشكل التالي للهجري :

VBA.Calendar = vbCalHijri


وللميلادي :


VBA.Calendar = vbCalGreg

ومن ثم كتابة أمر التاريخ بصورة طبيعية كما يلي :


Text1.Text = DateTime.Date

رابعاً التحويل بين التاريخين الهجري والميلادي :

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


Public Function TransDate(thedate As Date, TypeTrans As Integer) As String
Dim TempDate As String, MD As Date, a As String

If TypeTrans = 1 Then
VBA.Calendar = vbCalHijri
TempDate = CStr(thedate)
TransDate = TempDate
VBA.Calendar = vbCalGreg
Text1 = TransDate
Else
a = CStr(thedate)
VBA.Calendar = vbCalHijri
MD = CDate(a)
VBA.Calendar = vbCalGreg
TransDate = CStr(Format(MD, "yyyy/mm/dd"))
txtdateofenglish = TransDate
End If

End Function

ومن ثم في زر الأمر ( للتحويل من ميلادي إلى هجري )


Dim Date1
Date1 = TransDate(Text1, 1)
MsgBox Format(Date1, "DD/MM/YYYY")
وللتحويل من هجري إلى ميلادي :
Dim Date1
Date1 = TransDate(Text1, 2)
MsgBox Format(Date1, "DD/MM/YYYY")


خامساً : معرفة اليوم من الأسبوع .
هنا سوف نعتمد على دالة Weekday ، وبدلاً من كتابة الشروط السبعة التالية كلما احتجنا لمعرفة اليوم ، من المفضل كتابتها في دالة تعود باسم اليوم .

Dim Day_Now As Integer
Day_Now = Weekday(Date)
If Day_Now = 1 Then Label1 = "الأحد"
If Day_Now = 2 Then Label1 = "الاثنين"
If Day_Now = 3 Then Label1 = "الثلاثاء"
If Day_Now = 4 Then Label1 = "الأربعاء"
If Day_Now = 5 Then Label1 = "الخميس"
If Day_Now = 6 Then Label1 = "الجمعة"
If Day_Now = 7 Then Label1 = "السبت"


سادساً : عمل ساعة بسيطة بعقارب
يعتمد مبدأ رسم الساعة بعقارب على مجموعة من المعادلات الرياضية التي تحدد قيم Sin و Cos وغيرها من الدوال المثلثية لحساب زاوية رسم العقرب ، وفيما يلي مثال على ذلك :
ضع تايمر وغير Intrval = 1000 واجعل وحدة قياس الفورم Pixel ثم اكتب ما يلي .


Dim x, y, w, m
Private Sub Form_Load()
y = Me.Height / 2 'تحديد نقطة منتصف الفورم
x = Me.Width / 2 'تحديد نقطة منصف الفورم
w = 1700
End Sub

Private Sub Timer1_Timer()
Me.Cls 'مسح ما في الفورم
DrawWidth = 4: Me.Circle (x, y), w 'رسم دائرة قطرها 1700 هي قيمة w
DrawWidth = 4: Me.Line (x, y)-(x + (900 * Sin(Hour(Now) * 3.1415 / 6)), y - (900 * Cos(Hour(Now) * 3.1415 / 6))), &HFFFF00 ' رسم عقرب الساعات
DrawWidth = 3: Me.Line (x, y)-(x + (1200 * Sin(Minute(Now) * 3.1415 / 30)), y - (1200 * Cos(Minute(Now) * 3.1415 / 30))), vbYellow 'رسم عقرب الدقائق
DrawWidth = 1: Me.Line (x, y)-(x + (1500 * Sin(Second(Now) * 3.1415 / 30)), y - (1500 * Cos(Second(Now) * 3.1415 / 30))), vbRed 'رسم عقرب الثواني
End Sub

سابعاً : معرفة الوقت المنقضي على تشغيل الجهاز :
يعتمد هذا الأمر على دالة API اسمها GetTickCount ، ولذلك نعرف استخدام هذا التابع API في موديول Module كما يلي :

Declare Function GetTickCount Lib "kernel32" () As Long


ومن ثم نقرأ قيمة API ، فمثلاً نكتب في زر الأمر :


Dim Minutes As Long
Dim Hours As Long
Dim My_Time As Long

My_Time = GetTickCount
Hours = ((lngCount / 1000) / 60) / 60
Minutes = ((lngCount / 1000) / 60) Mod 60

MsgBox Hours & ":" & Minutes


ثامناً : أداة Calendar .
لاضافتها قم بالضغط على Ctrl + T ومن ثم اختيار Microsoft Calendar Control 10.0 أو أي اصدار آخر .
ومن ثم قم برسمها على الفورم ، وستجد بها العديد من الخيارات وأهمها ( هذه الخيارات أغلبها في Custem ) .
* Value : لتحديد التاريخ المطلوب ومنه يمكن ضبطها بوضع الأمر التالي :


Calendar1.Value = DateTime.Calendar

* First Day : لتحديد اليوم الأول من الأسبوع .
* Day Length - Month Length : لتحديد طريقة عرض اليوم والشهر .
* Grid Call Efect : لاختيار طريقة من ثلاث طرق للعرض باختلاف التحديد .
ستجد أيضاً العديد من الخيارات لاظهارها واخفائها تحت بند Show .
ومن ثم في Font ستجد ثلاثة أنواع : خط ( اليوم من الأسبوع - الأرقام الخاصة بأيام الشهر - العنوان ) .
وفي Color ستجد لون ( الخلفية - اليوم من الأسبوع - الأيام من الشهر - شيء ما لا أعرفه - العنوان ) .
أما عن الأوامر التي يمكن استخدامها فمنها:
NextDay - NextMonth - NextWeek - NextYear ( اليوم - الأسبوع - الشهر - السنة ) التالية .
وعكسها : PreviousDay - PreviousMonth - PreviousWeek - PreviousYear

تاسعا : عمل مؤقت ليدق جرس عند مدة معينة :
الامر ليس صعباً ، فكل ما في الأمر هو وضع Timer واختبار الوقت بالشكل التالي :


If Text1.Text = DateTime.Time Then Ring


حيث أن Text1 تحتوي على الوقت المطلوب ، و Ring هو حدث ليدق جرس أو لتظهر رسالة .

عاشراً : تغيير وقت الكومبيوتر :
اكتب الوقت الذي تريده في Text1 مثلاً ثم اكتب الأمر التالي فقط :

DateTime.Time = text1.Text

الحادي عشر : عمل ستوب ووتش :
الأمر بسيط جداً ... ضع أربع مربعات نص Text1,Text2,Text3,Text4 ثم ضع الأمر التالي في Timer بعد ضبط خاصية Intrval = 100 :


Text4 = Text4 + 1
If Text4 = 9 Then
Text3 = Text3 + 1
Text4 = 0
End If
If Text3 = 59 Then
Text2 = Text2 + 1
Text3 = 0
End If
If Text2 = 59 Then
Text1 = Text1 + 1
Text2 = 0
End If

وفي زر Stop اكتب :

Timer1.Enabled


وفي زر 00:00 اكتب :

Text1.Text = 0 : Text2.Text = 0 : Text3.Text = 0 : Text4.Text = 0

* تذكر أنك تستطيع أن تكتب أكثر من سطر في نفس السطر عن طريق تفريق الأسطر بواسطة نقطتين فوق بعضها : .

الثاني عشر : عمل عداد تنازلي :
اكتب في Genral ، أو في Module ، أو قم بأي طريقة بتعريف متغير عام ، أو حتى قم بتداول المتغير بين الاجراءات والدوال .


Dim My_Time

وضع Timer وغير interval إلى 1000 وخاصية Enabled = False .
ضع Text1 للثواني Text2 للدقائق Text3 للساعات ، وفي زر الأمر ضع الامر التالي :


My_Time = Text1 + ( Text2 * 60 ) + ( Text3 * 60 *60 )
Timer1.Enabled = True

وفي التايمر ضع الأمر التالي :


My_Time = My_Time - 1
If My Time <= 0 Then
Timer1.Enabled = False
Ring
End If

حيث Ring حدث تقوم أنت بوضعه حسبما تريد .
وعند زر Stop اكتب :


Timer1.Enabled = False

الثالث عشر : اضافة يوم - شهر - تاريخ ( إلى تاريخ معين ) - وكذلك الوقت .


نستخدم في ذلك الدالة DateValue ويمكننا أن نكتب قبلها DateTime. أولا لا كما نريد ... ومثال لاضافة يوم .


MsgBox DateTime.DateValue(Now + 2)

الرابع عشر : جمع التواريخ وطرحها واضافة أيام وشهور إليها :
الصيغة العامة لأمر اضافة أيام هي ما يلي :


Text1.Text = DateAdd ( "اضافة إلى","العدد","اضافة")


اضافة ( إما D للايام أو M للشهور أو YYY للأيام )
فمثلاً لاضافة يومين إلى التاريخ الحالي :


Text1.Text = DateAdd ("D",2,Now)


وهكذا ...

أما لطرح تاريخين فمثلاً نكتب الأمر التالي


Msgbox DateDiff("M","12/11/2001","11/08/2003)

حيث M ليخرج الناتج بالشهور كما سبق

الخامس عشر : معرفة الشهر من السنة :
نستخدم الدالة MonthName بالشكل التالي


Msgbox MonthName(4)

وسيكون الناتج حسب النظام المعتمد من Vba

thegust2000
07-04-2006, 07:19 AM
بسم الله الرحمن الرحيم .

المقدمة :
هناك العديد من طرق التعامل مع قواعد البيانات ، ففيما تتربع التقنية الحديثة Ado.net على طرق التعامل مع قواعد البيانات في اصدارات .Net FrameWork فإن هناك مثيلاً لها في الفيجوال بيسك وهو الاصدارة الاقدم Ado ، فيما توجد طرق أخرى مثل RDO و DAO وهي الطريقة محور درسنا اليوم ، وهي واحدة من اقدم الطرق ، ولم تطلها يد التطوير التي طالت ADO على سبيل المثال لتخرج منها DAO.net .

ويشرح هذا الدرس كيفية التعامل مع هذه التقنية من خلال قاعدة بيانات بسيطة جداً ، والدرس مقسم إلى أربعة اقسام :
يتضمن القسم الأول محتويات قاعدة البيانات ( راجع دروس قسم الاكسيس لمزيد من التفصيل ) ، ومن ثم انشاء الواجهة الاساسية بالفيجوال بيسك ( راجع دروس الفيجوال بيسك للمبتدئين لمزيد من التفصيل ) وكيفية الربط مع قاعدة البيانات وانشاء قاعدة بيانات وقت التنفيذ Run Time .
أما القسم الثاني فيحتوي على كيفية التعامل مع قواعد البيانات والأوامر الاساسية للحفظ والاضافة والتعديل وغيرها .
أما الدرس الثالث فهو مختص بعرض البيانات الموجودة في درسنا على أداة MSFlexGrid ، وبعض العمليات عليها .
ويختص الدرس الأخير بعمل عملية بحث مبسطة بدلالة الاسم ، أو رقم الهاتف . مع اتمام التعامل مع MSFlexGrid .

الدرس :
في بداية الدرس سوف نقوم سريعاً بتصميم قاعدة بيانات ، وشكل الفورم الرئيسي قبل البدء في تطبيق عناصر الدرس .

في البداية قم بانشاء قاعدة بيانات تحتوي على الحقول التالية :
Nu : من النوع رقم Number ، وهو مثلاً رقم الموظف في الشركة .
Fn : من النوع ( نص Text ) وهو خاص باسم الشخص .
Te : وهو خاص برقم الهاتف ، وهو من النوع رقم Number ، وهذا الحقل أيضاً من المفضل وضعه على هيئة نص Text إلا أننا سنسخدمه على شكل رقم .

ومن ثم قم بانشاء Form وضع فيه الأدوات التالية :
* Text1,Text2,Text3 لعرض معلومات كل شخص .
* Command من 1 إلى 4 ( الأول - السابق - التالي - الأخير ) .
* Command من 5 إلى 8 ( تعديل سجل ، سجل جديد - انهاء بلا حفظ - حفظ ) . مع مراعاة أن يكون التمكين Enabled لكل من زري ( حفظ - بلا حفظ ) هو False .
* Command من 9 إلى 12 ( حذف - خروج - عرض في جدول - عدد السجلات ) .

وقم بانشاء Module ... اضغط على الفورم بزر الماوس الأيمن ، اختر Add ومن ثم Module .

والآن سننتقل لمرحلة التعامل مع قاعدة البيانات .

لبدء التعامل مع DAO لا بد من اضافة المكتبة الخاصة بالداو إلى المشروع الذي قمنا بانشاءه ، لذا من قائمة Project اختر Refrence واختر المكتبة :
Microsoft Dao 3.6 Object Library
أو أي اصدار اقدم ، إلا أن 3.6 هو الاصدار المفضل .

والآن ، تقدم لنا DAO كائنات مختلفة للتعامل مع قواعد البيانات ، فهي توفر لنا Workspace لبدء العمل مع قاعدة البيانات مع الكائن Database والمختص بالتعامل مع ملف قاعدة البيانات ، RecordSet للتعامل مع الجداول ، TableDef للقيام بانشاء جداول وقت التنفيذ - أحد تطبيقاته - .

والآن سنتعرف على Sub main() ؟
يوفر لنا الفيجوال بيسك امكانية بدء المشروع بواسطة هذه الاجراء والذي يتم تعريفه في Module ، ولذلك نقوم في هذا الاجراء بعمل المهام التي نحتاجها قبل البدء في تنفيذ الكود .

من قائمة Project اختر Project Properties ، ومن ثم اختر Sub main من القائمة Startup .

والآن سوف بتعريف عدد من المتغيرات Public وذلك بالشكل التالي :

[شفرة]

Public D1 As Database
Public T1 As Recordset
Public T2 As Recordset

Public folder As String

[/شفرة]

* المتغيرات Public هي أحد أنواع الوصول للمتغيرات حيث يتم مشاهدة المتغيرات على مستوى المشروع .

المتغير الأول خاص بقاعدة البيانات ، بينما متغيرات خاصان بالجداول ، وأخيراً متغير نصي String نخزن فيه مسار البرنامج الحالي .
والآن سوف نقوم ببرمجة الاجراء main ، وسوف يحتوي على المهام التالي مرتبة :
* معرفة مسار البرنامج .
* إذا لم تكن قاعدة البيانات موجودة فإنه يقوم باستدعاء اجراء انشاء قاعدة بيانات جديدة .
* بعد وجود قاعدة البيانات الجديدة أو الموجودة اصلاً ، القيام بازالة خاصية القراءة فقط من على الملف .
* الاتصال بقاعدة البيانات .
* اظهار الفورم الرئيسي للبرنامج .
وهذا هو الكود ، وبين كل مهمة ومهمة أخرى هناك سطر .

[شفرة]

Private Sub main()
folder = App.Path
If Right(folder, 1) <> "\" Then folder = folder & "\"

If Dir(folder & "mm.mdb") = "" Then
CreateMyDatabase folder & "mm.mdb"
End If

SetAttr folder & "mm.mdb", vbNormal

Set D1 = DBEngine.Workspaces(0).OpenDatabase(folder & "mm.mdb")

Form1.Show
End Sub

[/شفرة]

والآن سوف نقوم ببرمجة الاجراء الذي يقوم بعمل قاعدة البيانات في حالة عدم وجودها ، وهو مقسم على قسمين .
- انشاء ملف قاعدة البيانات .
- بعد انشاء الملف ، انشاء الجداول والحقول داخلها .

سنسمي المهمة الأولى CreateMyDatabase وسوف تقوم بالخطوات التالية مرتبة :
* تعريف متغير خاص لقاعدة البيانات .
* انشاء قاعدة البيانات - لاحظ تشابه الطريقة مع طريقة فتح قاعدة البيانات .
* اغلاق قاعدة البيانات .
* استدعاء الاجراء الثاني - انشاء الجداول والحقول داخلها - .
* افراغ المتغيرات Varibles حتى لا تحجز مكاناً من الذاكرة .

مجدداً هذا هو الكود :

[شفرة]

Sub CreateMyDatabase(DB_Name As String)
Dim dbsNew As Database

Set dbsNew = DBEngine.Workspaces(0).CreateDatabase(DB_Name, dbLangGeneral, dbEncrypt)

dbsNew.Close

CreateMyTableS DB_Name


Set dbsNew = Nothing
Set wrkDefault = Nothing
End Sub

[/شفرة]

المهمة الأخيرة في هذا الدرس ، هي انشاء الجداول داخل قاعدة البيانات ، وسوف تمر بالخطوات التالية .
* تعريف TableDef لانشاء جدول من خلاله . وكذلك متغير من نوع ملف قاعدة بيانات .
* فتح قاعدة البيانات التي انشأناها للتو .
* تعريف TableDef على أنه منشأ للجداول داخل قاعدة البيانات ( ربطه بقاعدة البيانات ) .
* البدء في اضافة الحقول .
* اتمام عملية اضافة الجدول .

وهذا هو الكود :

[شفرة]
Sub CreateMyTableS(DBName)
Dim dbsMyData As Database
Dim tdfNew1 As TableDef

Set dbsMyData = OpenDatabase(DBName)

With dbsMyData
Set tdfNew1 = dbsMyData.CreateTableDef("TB")

With tdfNew1
.Fields.Append .CreateField("nu", dbInteger)
.Fields.Append .CreateField("fn", dbText)
.Fields.Append .CreateField("te", dbDouble)
End With

dbsMyData.TableDefs.Append tdfNew1
End With
End Sub

[/شفرة]

thegust2000
07-04-2006, 07:21 AM
بسم الله الرحمن الرحيم .

المقدمة :
في الدرس السابق تعلمنا طرق انشاء وربط قاعدة البيانات .
وسوف نستمر بإذن الله خلال هذا الدرس في اكمال التعامل مع قواعد البيانات Access من خلال DAO

الدرس :
بعد ان قمنا بربط قاعدة البيانات في الدرس السابق ، وصلنا إلى السطر Form1.Show والذي سوف يظهر الفورم الأول باطلاق الحدث Event المسمى ب Load وأحداث أخرى . إلا أن الحدث Load هو انسب الأحداث لكتابة اسطر أوامرنا بالنسبة لهذا التطبيق .
في هذا الحدث سوف نقوم بـ :

* ربط الجدول الأول بقاعدة البيانات .
* التأكد من عدد السجلات الموجودة ، فإذا كان هناك سجلات فإننا سنطلب الإجراء ShowData ، وإلا فإننا سوف نطلب الاجراء ShowNoData :

Private Sub Form_Load()
Set T1 = D1.OpenRecordset("tb", dbOpenTable)

If T1.RecordCount < 1 Then
Call shownodata
Else
Call showdata
End If
End Sub

والآن سوف نقوم بكتابة اسطر كل من حدثي ، ShowData ، و ShowNoData ، فكل ما في الإجراء Sub الأول هو قراءة القيم الحالية للسجلات ووضعها في أماكنها بالشكل التالي :

Private Sub showdata()
Text1.Text = T1!nu
Text2.Text = T1!Fn
Text3.Text = T1!Te
End Sub

فيما سيضع الإجراء الثاني قيم فارغة "" في الأماكن الخاصة بالعرض .

Private Sub shownodata()
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
End Sub

أوامر التنقل بين السجلات .
تشترك جميع هذه الأوامر الأربعة في صيغة عامة ، فأولاً التأكد من وجود سجلات ، ومن ثم التأكد من أنني لست في حالة تعديل أو اضافة وذلك من خلال معرفة حالة زر أمر ( حفظ ) ومن ثم التأكد من أنني لست في البداية ( لأمر السابق ) وأنني لست في النهاية ( لأمر التالي ) ، ومن ثم تنفيذ الأمر ( MoveNext , MoveLast , MovePrevious , MoveFirst ) وأخيراً استدعاء ShowData .
وهذه هي الأوامر للاجراءات الأربعة :

Private Sub Command1_Click()
If T1.RecordCount < 1 Then Exit Sub

If Command8.Enabled = True Then
s = MsgBox("أنت الآن في حالة اضافة أو تعديل ، هل تريد الغاءها ؟", vbYesNo + 524288 + 1048576, "مثال")
End If

If s = vbNo Then Exit Sub

T1.MoveFirst

Command7.Enabled = False
Command8.Enabled = False

Call showdata
End Sub


Private Sub Command2_Click()
If T1.RecordCount < 1 Then Exit Sub

If Command8.Enabled = True Then
s = MsgBox("أنت الآن في حالة اضافة أو تعديل ، هل تريد الغاءها ؟", vbYesNo + 524288 + 1048576, "مثال")
End If

If s = vbNo Then Exit Sub

T1.MovePrevious

If T1.BOF Then T1.MoveFirst

Command7.Enabled = False
Command8.Enabled = False

Call showdata
End Sub

Private Sub Command3_Click()
If T1.RecordCount < 1 Then Exit Sub

If Command8.Enabled = True Then
s = MsgBox("أنت الآن في حالة اضافة أو تعديل ، هل تريد الغاءها ؟", vbYesNo + 524288 + 1048576, "مثال")
End If

If s = vbNo Then Exit Sub

T1.MoveNext

If T1.EOF Then T1.MoveLast

Command7.Enabled = False
Command8.Enabled = False

Call showdata
End Sub

Private Sub Command4_Click()
If T1.RecordCount < 1 Then Exit Sub

If Command8.Enabled = True Then
s = MsgBox("أنت الآن في حالة اضافة أو تعديل ، هل تريد الغاءها ؟", vbYesNo + 524288 + 1048576, "مثال")
End If

If s = vbNo Then Exit Sub

T1.MoveLast

Command7.Enabled = False
Command8.Enabled = False

Call showdata
End Sub

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

If Command8.Enabled = True Then
s = MsgBox("أنت الآن في حالة اضافة أو تعديل ، هل تريد الغاءها ؟", vbYesNo + 524288 + 1048576, "مثال")
End If

If s = vbNo Then Exit Sub

T1.AddNew

Command7.Enabled = True
Command8.Enabled = True


Call shownodata


وبالنسبة لأمر التعديل فسوف يزيد نقطة واحدة فقط ، وهي التأكد من وجود سجلات أصلاً لتعديلها ، وأننا لن نقوم بافراغ مربعات النص TextBoxes ، مع مراعاة استخدام الأمر Edit بدلاً من AddNew :

If T1.RecordCount < 1 Then Exit Sub

If Command8.Enabled = True Then
s = MsgBox("أنت الآن في حالة اضافة أو تعديل ، هل تريد الغاءها ؟", vbYesNo + 524288 + 1048576, "مثال")
End If

If s = vbNo Then Exit Sub

T1.Edit

Command7.Enabled = True
Command8.Enabled = True

في الحفظ ، سوف نستخدم الأمر Update لتحديث التغييرات سواء كانت بالاضافة والتعديل ، مع الغاء تمكين Enabled لزري الحفظ - انهاء بلا حفظ .
وأما في انهاء بلا حفظ فسوف نستخدم الأمر CancelUpdate .
هناك اختلاف آخر وهو أننا نستخدم الدالة Val مع القيم الرقمية للتأكد من أن المستخدم قام بادخال أرقام وليس حروف مثلاً .
وهذه هي أوامر هذين الاجراءين :

Private Sub Command7_Click()
T1.CancelUpdate

Call showdata

Command7.Enabled = False
Command8.Enabled = False
End Sub

Private Sub Command8_Click()
T1!nu = Val(Text1.Text)
T1!Fn = Text2.Text
T1!Te = Val(Text3.Text)

T1.Update

Command7.Enabled = False
Command8.Enabled = False
End Sub

*** ملاحظة هامة : من الخطأ فتح قاعدة البيانات للاضافة AddNew أو للتعديل Edit وتنفيذ أمر الحفظ Update في حدث آخر مما يجعل قاعدة البيانات في حالة انتظار تطول أو تقصر ، مما قد يتسبب بمشاكل في حالة انقطاع التيار الكهربي أو اعادة تشغيل الجهاز على سبيل المثال ، والصحيح أن تتم الاضافة والحفظ وكذلك مع التعديل في اجراء واحد ، وإنما ما قمت به هو للتسهيل فقط .
نقطة أخرى ، وهو أن الغالب أن باقي الأزرار تتعطل Enabled = False ما عدا زري الحفظ حتى تنتهي عملية الاضافة .

عرض عدد السجلات .
نستخدم لهذا الغرض الدالة RecordCount والتي تعود بعدد السجلات الحالية .
وذلك بالشكل التالي :

nom = T1.RecordCount
MsgBox "عدد السجلات الحالي هو : " & nom, vbInformation, "مثال"

الحذف :
كما هي العادة سوف نتأكد أولاً بأننا لسنا في وضع اضافة أو تعديل ، وذلك بعد التأكد من وجود سجلات أصلاً .
في الخطوة التالية سوف نعرض على المستخدم رسالة تحذيرية من اتمام العملية ، وفيما إذا اصر على اتمام العملية فإننا سوف نقوم باستخدام الدالة Delete لحذف السجل ، ومن ثم الانتقال للسجل التالي حتى لا نبقى في سجل فارغ . أو اظهار عدم وجود سجلات في حالة كان السجل المحذوف هو السجل الأخير .

Private Sub Command9_Click()
If T1.RecordCount = 0 Then Exit Sub

If Command8.Enabled = True Then
s = MsgBox("أنت الآن في حالة اضافة أو تعديل ، هل تريد الغاءها ؟", vbYesNo + 524288 + 1048576, "مثال")
End If

If s = vbNo Then Exit Sub

Dim ase
aas = 1 + 16 + 256
ase = MsgBox("هل تريد بالتأكيد حذف السجل الحالي ؟؟؟", aas + 524288 + 1048576, "مثال")

If ase = vbNo Then Exit Sub


T1.Delete
If T1.RecordCount <> 0 Then

T1.MoveNext

If T1.EOF Then T1.MoveLast

Call showdata
Else
Call shownodata
End If
End Sub

thegust2000
07-04-2006, 07:23 AM
بسم الله الرحمن الرحيم .

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


الدرس :
في هذا الدرس سوف نتعامل مع أحد أشهر أنواع الجداول لعرض البيانات وهو MSFlexGrid .
للوصول اليه اضغط Ctrl+T واختر Microsoft FlexGrid Control 6.0 (SP3)

والآن إلى أهم خصائص properties وطرق methods هذه الأداة :


Clear : مسح كامل بيانات الجدول .

Cols : عدد الأعمدة الاجمالي في الجدول ، في مثالنا هو 3 ( الرقم - الاسم - الهاتف ) .
Rows : عدد الصفوف ، وهو في مثالنا ( عدد السجلات ) + 1 الخاص بالصف الرئيسي .

Fixed Col : عدد الاعمدة الثابته ، وتعرض هذه الخاصية الأعمدة بصورة دائمة مهما كان عرض الجدول .
Fixed Rows : نفس الخاصية السابقة ولكن بالنسبة للصفوف .

Row : الصف الحالي ، وذلك لتحديد الطرف الأول للخلية Cell .
Col : العمود الحالي ، وذلك لتحديد الطرف الثاني للخلية Cell .
ومن تقاطع قيمتيهما نستطيع اجراء أغلب العمليات الرئيسية .

Text : النص ، وهو النص المعروض في الخلية التي يقف عندها المؤشر ( تقاطع خاصيتي Row ، Col ) .
Text matrix(r,c) : لوضع - قراءة نص في مكان غير المكان الذي يقف عنده مؤشر ( Col , row ) نستخدم هذه الطريقة ، ونرسل للدالة صف وعمود الخلية Cell المطلوبة .

Col Aligment(c) : محاذاة العمود الذي يتم ارسال قيمته .
Col Width(c) : عرض العمود المحدد بقيمة c .
Row Height(r) ارتفاع الصف المحدد بقيمة r .

Back Color : لون خلفية الجدول .
Back Color Fixed : لون خلفية العناصر الثابتة .
Cell Back Color و Cell Fore Color : لون خلفية الخلية Cell والخط بداخلها على الترتيب .

Sort : تحدد طريقة ترتيب بيانات العمود الحالي ، وتأخذ قيم من 0 وحتى 9 .
0 : بدون ترتيب .
1،2 ترتيب تصاعدي وتنازلي على الترتيب .
3و4 : ترتيب تصاعدي وتنازلي بدلالة الارقام .
5و6 : ترتيب تصاعدي وتنازلي بالحروف دون النظر إلى حالة الحرف A=a .
7و8 : ترتيب تصاعدي وتنازلي بالحروف مع النظر إلى حالة الحرف A<>a .
9 ترتيب مخصص .

أول خطوة هي عمل اتصال بين قاعدة البيانات المؤقتة T2 والجدول :

Set T2 = D1.OpenRecordset("tb", dbOpenTable)

سوف نقوم الآن بعمل اجراء باسم fill_Table مهمته رسم الجدول ووضع بيانات T2 في داخله .


Private Sub fill_Table()

End Sub

ونستدعيه من خلال زر الأمر السابق بكتابة fill_Table .

في هذا الاجراء ومهمتنا الأولى قبل ادخال البيانات هي تصميم الشكل العام للجدول ، فإذا اردنا الكتابة في مربع 0 و 0 مثلاً ، فإننا نقوم بالتالي :

MSFlexGrid1.Row = 0
MSFlexGrid1.Col = 0

MSFlexGrid1.Text = "القيمة"

وكذلك مع أي صف في أي عمود ، بشرط أن يكون هذا العمود موجوداً أصلاً .

في بداية تشكيل الجدول ، فبعد مسح الجدول بالكامل ، سوف نجعل عدد الصفوف = 1 وهو صف العنوان فقط ، وعدد الأعمدة 3 ( الرقم - الاسم - الهاتف ) :

MSFlexGrid1.Clear
MSFlexGrid1.Cols = 3
MSFlexGrid1.Rows = 1

ومن ثم ننتقل بين الأعمدة في الصف الأول لوضع رؤوس الجداول :

MSFlexGrid1.Row = 0
MSFlexGrid1.Col = 0
MSFlexGrid1.Text = "الرقم"

MSFlexGrid1.Col = 1
MSFlexGrid1.Text = "الاسم"

MSFlexGrid1.Col = 2
MSFlexGrid1.Text = "الهاتف"

والآن جاء دور العمل مع قاعدة البيانات ، لا تنس أننا سوف نتعامل الآن مع T2 لأننا سوف نتنقل بينها دون أن نؤثر على العرض الرئيسي للبرنامج .
الخطوة الأولى هي معرفة عدد السجلات ، وهو عدد الصفوف في الجدول + 1 ( من أجل صف العنوان ) .

If T2.RecordCount < 1 Then Exit Sub

T2.MoveLast
T2.MoveFirst
N = T2.RecordCount

MSFlexGrid1.Rows = N + 1


والآن سوف نقوم بالدوران على كل سجلات قاعدة البيانات ، ومع كل سجل سوف ننقل إلى الصف الخاص به ، ومن ثم نتنقل بين الأعمدة الثلاثة لوضع كل بيان في موضعه الصحيح ، وأخيراً ننتقل إلى السجل التالي .

For i = 1 To N
MSFlexGrid1.Row = i
MSFlexGrid1.Col = 0
MSFlexGrid1.Text = T2!nu

MSFlexGrid1.Col = 1
MSFlexGrid1.Text = T2!Fn

MSFlexGrid1.Col = 2
MSFlexGrid1.Text = T2!Te

T2.MoveNext

Next i

أخيراً سوف نقوم بتعديل عرض العمودين الأول والثاني ليستطيعا استيعاب مزيد من البيانات :


MSFlexGrid1.ColWidth(0) = 500
MSFlexGrid1.ColWidth(1) = 1500


تابع للجدول MSFlexGrid .

بالنسبة لأحداث Events الجدول MSFlexGrid فأغلبها مثل الأدوات العادية مثل الحدث Click و DblClick ، ولعرض محتوى الخلية عند الضغط عليها مرتين بالماوس نكتب :

Private Sub MSFlexGrid1_DblClick()
MsgBox MSFlexGrid1.Text
End Sub

وهناك بعض الأحداث الجديدة مثل EnterCell ، وينطلق هذا الحدث في كل مرة تضبط فيها خاصيتي Col , Row ليشكل تقاطعهما خلية جديدة سواء أكان ذلك من خلال الماس أو من خلال أوامر الكود ، ومقابلة الحدث LeaveCell وهو يحدث عندما تترك خلية .

أحداث أخرى مثل GetFocus و lostFocus تنطلق عندما يصل التركيز ( التحديد ) إلى الاداة أي بمعنى ان تصبح الأداة نشطة سواء من خلال استخدام مفتاح Tap أو من خلال اختيار الأداة بالماوس . أيضاً حدث RowColChange عند تغيير الصف أو العمود ، و SelChange عند تغيير التحديد . Scroll عند استخدام ال Scroll للتنقل بين صفوف الجدول أو اعمدته .

هناك أحداث Drag وهي مشتركة بين اغلب الادوات وهي الخاصة بعمليات سحب الأدوات أو السحب عليها ، أحداث الماوس Mouse أيضاً مشتركة وهي الخاصة بمرور الماوس أو الضغط - الرفع بأزراره المختلفة .

** مثال : كيفية تلوين صف بكامله في الجدول :
لعمل ذلك نستخدم الخاصية Cellbackcolor ، فمثلاً لو اردنا تحديد الصف رقم 2 باللون الأحمر ، فإننا نكتب الأمر التالي :

MSFlexGrid1.Row = 2
For i = 0 To 2
MSFlexGrid1.Col = i
MSFlexGrid1.CellBackColor = QBColor(12)
Next i

وفي زر الامر الخاص بالتلوين ، سوف نقوم بقراءة رقم الصف المطلوب من خلال Input Box ، ونتأكد من أن الرقم لا يتجاوز الحد الأقصى من الصفوف ، ومن ثم نكتب الأوامر السابقة ، وبذلك يصبح الكود الاجمالي بالشكل التالي :

Dim x As Integer
x = Val(InputBox("ادخل رقماً يتراوح بين 0 و " & MSFlexGrid1.Rows - 1, "تحديد باللون الأحمر"))
If x < 0 Or x > (MSFlexGrid1.Rows - 1) Then
MsgBox "قيمة صف خاطئ !!!"
Exit Sub
End If

MSFlexGrid1.Row = x
For i = 0 To 2
MSFlexGrid1.Col = i
MSFlexGrid1.CellBackColor = QBColor(12)
Next i

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

thegust2000
07-04-2006, 07:26 AM
بسم الله الرحمن الرحيم .

المقدمة :
في الدروس السابقة تعلمنا كيفية فتح قاعدة البيانات والتعامل معها ، العرض في الجدول MSFlexGrid ، والآن سوف نقوم بالبحث من خلال احدى جمل الاستعلام ، من المفضل مراجعة دروس TSQL في الموسوعة إذا لم تكن قد تعرفت على جملة Select من جمل الاستعلام قبل البدء بقراءة هذا الدرس .

الدرس :

تذكير سريع بجملة Select .

من أشهر جمل الاستعلامات هي الجملة التي تستخدم الكلمة المفتاحية Select . وصيغتها القياسية هي :


select field(s) form table(s) where conditon


حيث أن Fields تعني الحقول التي تظهر نتيجتها في البحث ، وقد تكون اسماء حقول مثل name,tele أو قد تكون * لعرض الكل ، وقد تكون نواتج عملية حسابية مثل Max(number) أو Count(*) .
أما Tables فهي اسماء الجداول ، والشروط فهي مثل name='ahmed' و age>5 ، مع استخدام معاملات اخرى مثل between و Like ، وبارميترات Parmeters مختلفة مثل ? و - وغيرها .
وأخيراً اذكرك بأنه عند التعامل مع النصوص فإنه لا بد من وضع '' حول الاسم ، ومع التواريخ يتم وضع ## حول التاريخ وهما النوعان الأكثر استخداماً ، أما الارقام فلا تحتاج إلى اي شيء .

والآن إلى بداية الدرس .
سوف نضيف أولاً الجزء الخاص بشاشة البحث ، سوف يكون بالشكل التالي :

البحث عن الأشخاص الذين لديهم ( ComboBox1 ) ( ComboBox2 ) ( searchText )

* إذا لم تظهر الجملة السابقة مرتبة فهذا راجع إلى اتجاه الكتابة .


حيث سيحتوي ComboBox1 على ( الرقم - الاسم - الهاتف ) أما الثاني فيحتوي على ( = - > - < ) ، وتوضع كلمة البحث في ال searchText .
ومن ثم يوضع زر أمر بعرض نتائج البحث في الجدول .

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

Combo1.AddItem "الرقم"
Combo1.AddItem "الاسم"
Combo1.AddItem "الهاتف"
Combo1.ListIndex = 0
Combo2.AddItem "="
Combo2.AddItem ">"
Combo2.AddItem "<"
Combo2.ListIndex = 0

ولا بد من التحكم في القائمة الثانية ، حيث لا يمكن التحكم بها إلا عند اختيار الرقم ، أما الاسم والهاتف فلا يمكن البحث ب < أو > في مثالنا هذا - يمكن استخدامها ولكن ليس في مثل هذا المثال - . ويتم ذلك من خلال الحدث Click للاداة Combo1 :

Private Sub Combo1_Click()
If Combo1.ListIndex <> 0 Then
Combo2.Enabled = False
Else
Combo2.Enabled = True
End If
End Sub

في بداية زر الامر سوف نتأكد من أنه ادخل كلمة للبحث عنها :

If searchText.Text = "" Then
MsgBox "نص البحث فارغ"
Exit Sub
End If

لاحقاً سوف نشكل جملة الاستعلام ، وذلك بالشكل التالي :

Dim fldname As String
Dim op As String
Dim lst As String

If Combo1.ListIndex = 0 Then
fldname = "nu"
op = Combo2.Text
lst = ""
ElseIf Combo1.ListIndex = 1 Then
fldname = "fn"
op = "='"
lst = "'"
Else
fldname = "te"
op = "="
lst = ""
End If

Dim sql As String
sql = "select * from tb where " & fldname & op & searchText.Text & lst

حيث نخزن في fldname الحقل الذي نبحث عنه ، op معامل البحث ، واخيراً lst تحدد إذا ما كنا سوف نضيف ' من أجل النصوص .
والآن جاء دور تنفيذ جملة الاستعلام على قاعدة البيانات D1 ومن خلال الجدول الاضافي T2 :

Set T2 = D1.OpenRecordset(sql, dbOpenDynaset)

وأخيراً سوف نقوم بملء الجدول من خلال استدعاء Fill_Table .

fill_Table

خاتمة :
بنهاية هذا الدرس نكون قد تعلمنا إحدى جمل الاستعلام وهي جملة Select ، لا زلت افضل ان تتم مراجعة دروس الاستعلام في الموسوعة .
وبقي أن اذكرك بإن جمل الاستعلام لا تعمل جميعها على هذه الطريقة من الاتصال بقاعدة البيانات بنفس الطريقة ، جرب مثلاً استخدام جمل مثل جمل Delete وستظهر لك رسالة خطأ .
Invalid Operation


في هذا السلسلة البسيطة من الدروس تعرفنا على اساسيات التعامل مع Dao من خلال فيجوال بيسك Visual Basic مع قواعد بيانات Access .


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

thegust2000
07-04-2006, 07:35 AM
مقدمة:
هذا الدرس سوف يشرح كيفية بناء قاعدة بيانات باستخدام فيجول بيسك 6.

الافتراضات:

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



بداية:
سوف نعمل قاعدة بيانات تحتوي على الجدول معلومات الطالب سوف نسميه ( طالب)

جدول معلومات الطالب:
سوف يحتوي الجدول على المعلومات التالية

· الاسم (نص وطوله 40 حرف)

· العمر (رقم)

· رقم الطالب و نوعه رقم ذو خاصية الزيادة الاتماتيكية ( Autonumbert) المفتاح

· صورة الطالب (من نوع صور). نعم سوف نوضح كيفية حفظ صور لقاعدة البيانات. اليس للطالب حق في وضع صورته J

الخطوات:

ابدأ فيجول بيسك واختر برنامج قياسي في نوع المشروع:

http://www.c4arab.com/images/lessons/programming/visualbasic/image001.png
ضع على الفورم زر وغير اسمه الى btnCreate كما في الشكل ادناه

http://www.c4arab.com/images/lessons/programming/visualbasic/image003.png
سوف نحتاج الى اضافة بعض المراجع الى المشروع لذلك اختر قائمة project و من ثم References

http://www.c4arab.com/images/lessons/programming/visualbasic/image005.png
وبما اننا سوف نعمل قاعدة بيانات خاصة باكسس فسوف نستعمل DAO

لذلك أضف الكود التالي الى بداية الكود في الفورم

Dim wspDefault As Workspace ' We are going to creat MDB file so we will use DAO

Dim dbs As DAO.Database '

Dim tdf As DAO.TableDef


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

لذا اضغط بالزر الايمن على التول بوكس واختر Components كما في الشكل التالي
http://www.c4arab.com/images/lessons/programming/visualbasic/image007.png
ومن ثم فعل المكتية الخاصة به كما في الشكل التالي

http://www.c4arab.com/images/lessons/programming/visualbasic/image009.png
الخطوة التاليه هي الضغط على مفتاح Shift+F7 لعرض الفورم ومن ثم سحب الايقونة الى الفورم . الايقونة موضحة بالشكل التالي

http://www.c4arab.com/images/lessons/programming/visualbasic/image011.png
الخطوة التالية هي اضافة الكود الذي سوف يعرض نافذة حفظ اسم الملف الى الوظيفة fnGetNewDBName

Function fnGetNewDBName() As String

strDBName = ""

CommonDialog1.CancelError = True

On Error GoTo ErrHandler2

With CommonDialog1



On Error GoTo ErrHandler2



.DialogTitle = "الرجاء اختيار اسم للقاعدة البيانات"

' make sure we ask before we overwrite

' سوف نستعمل امتداد خاص بنا بدلا من امتداد اكسس

.Filter = "G. W Alfadhly Files (*.GWF)|*.FWG"

.Flags = .Flags + cdlOFNCreatePrompt + cdlOFNOverwritePrompt

' show the save as

.ShowSave



' get the file name

If Err.Number <> cdlCancel Then

strDBName = .FileName

End If



' make sure it is not empty

If Trim(strDBName) <> "" Then

fnGetNewDBName = Trim(strDBName)

Else

fnGetNewDBName = ""

End If

End With

Exit Function

ErrHandler2:

fnGetNewDBName = ""

End Function

وظيفة يناء الملف او ورشة العمل

أضف الكود التالي الى وظيفة fnCreateNewDB
Function fnCreateNewDB()

Dim strFileName As String

' احصل على اسم قاعدة البيانات

strFileName = fnGetNewDBName()

'تأكد من ان المستخدم لم يدخل اسما موجودا واسأل اذا كان يريد ان يمسح القديم.

' Ask for name of Databas

If Dir(strFileName) <> "" Then Kill strFileName

‘ورشة العمل

Set wspDefault = DBEngine.Workspaces(0)

' كلمة السر.

strPassword = ""

' ask for pasword

strPassword = InputBox("Please Enter password for this workspace", "Password")

'if the password was provided

If (Trim(strPassword) <> "") Then

‘ اعمل قاعدة بيانات مشفرة

Set dbs = wspDefault.CreateDatabase(strDBName, _

dbLangArabic & ";pwd=" & strPassword, dbEncrypt)

Else

‘ اعمل قاعدة بيانات غير مشفرة

Set dbs = wspDefault.CreateDatabase(strFileName, _

dbLangArabic, dbEncrypt)

End If

End Function



بناء جدول الطالب

Function fnCreateTableStudent() As Boolean

‘اسم الجدول

Set tdf = dbs.CreateTableDef("الطالب")

‘ للاستخدام في عمل المفتاح

Dim idx As DAO.Index

‘للاستخدام لعمل الحقول

Dim fldIndex As DAO.Field

With tdf

' Create fields and append them to the new TableDef

' object. This must be done before appending the

' TableDef object to the TableDefs collection of the

' new database

‘ رقم الطالب

.Fields.Append .CreateField("الرقم", dbLong)

' Modify this field's option to be auto incremented

.Fields("الرقم").Attributes = .Fields("الرقم").Attributes + dbAutoIncrField

‘ اسم الطالب

.Fields.Append .CreateField("الاسم", dbText, 40)

' ‘العمر

.Fields.Append .CreateField("العمر", dbLong)

' الطلعة البهية للطالب

.Fields.Append .CreateField("الصورة", dbLongBinary)

Set idx = .CreateIndex("QnCatID")

End With

' Create the index field

Set fldIndex = idx.CreateField("الرقم", dbLong)

' اجعله المفتاح

idx.Primary = True

idx.Unique = True

' اضفه للمؤشر

idx.Fields.Append fldIndex

tdf.Indexes.Append idx

' أضفه للجدول.

dbs.TableDefs.Append tdf

'حدث قاعدة البييانات.

dbs.TableDefs.*******

fnCreateTableStudent = True

End Function

وذلك هو كل شيئ في بناء قاعدة البيانات

thegust2000
07-04-2006, 07:45 AM
في الموضوع السابق تعرضنا لطريقة عمل قاعدة بيانات باستخدام DAO. في هذا المقال سوف نستعمل قاعدة البيانات التي صنعناها لاضافة معلومات عن الطالب ولكن هذه المرة باستخدام ADO.

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

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

من ناحية اخرى هذا المثال ينطبق على جميع ملفات الثنائية مثل البرامج والخ. مما قد يستطيع القارئ استعماله في امور ليست في الحسبان الآن.

في مثالي هذا سوف استعمل ADO وفيجول بيسك 6 للقراءة والكتابة في قاعدة البيانات.


في هذا المثال سوف اضيف المعلومات التالية الى قاعدة بيانات.

· الاسم (نص وطوله 40 حرف) – سوف تكون القيمة في هذا المثال محددة باسم غازي ال وادي. يمكنك بالطبع اضافة اطار حوار يقوم بواسطته المستخدم ادخال اسم جديد ولكن هذا امر بسيط سوف اتركه لك كواجب منزلي (تلميحة استعمل InputBox )

· العمر (رقم) سوف نستعمل رقم 34

· المفتاح رقم الطالب و نوعه رقم ذو خاصية الزيادة الاتوماتيكية (Autonumbert) . هذا الرقم لن يحتاج ادخال لانه اوتوماتيكي

· صورة الطالب (من نوع صور). سوف استعمل صورة من ملف اسمه "c:\test.gif"

الخطوة الاولى:
افتح مشروع قياسي جديد كما في الصورة الاتية:

http://www.c4arab.com/images/lessons/programming/visualbasic/image001.png
سوف نحتاج الى اضافة بعض المراجع الى المشروع لذلك اختر قائمة project و من ثم

References
http://www.c4arab.com/images/lessons/programming/visualbasic/image023.jpg
ضع على الفورم زر وغير اسمه الى btnAddRecord كما في الشكل ادناه

http://www.c4arab.com/images/lessons/programming/visualbasic/image024.jpg


لكي نضيف صف جديد لقاعدة البيانات فسوف تحتاج الى الخطوات التالية.
فتح قاعدة البيانات

صنع كائن من نوع RECORDSET للكتابة

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


فتح قاعدة البيانات:

بالطبع يمكننا ان نسمح للمستخدم بان يفتش عن الملف كما عملنا في المقال االمعنون " كبف تبني قاعدة بيانات اكسس بفيجول بيسك 6 باستخدام DAO " ولكن سوف اتحاشى تكرار الكود وسوف احدد مسار ملفي الذي قمت بعمله باستخدام االمقال السابق بالاسم "c:\myDb.GWF"

اذا اردت ان تمكن المستخدم من البحث عن الملف , ارجو ان تراجع المقال السابق في وظيفة fnGetNewDBName مع استعمال دالة .showOpen بدلا من ShowSave وازالة ال Flag





افتح مصدر الفورم واضف النص التالي

'The Connection object establishes a link to a database.

'You always use a Connection object either implicitly or explicitly

'when you work with a database. When you explicitly create one,

'you can efficiently manage one or more connections and reassign the roles

'that they serve in an application. By implicitly creating one you can shorten your code.

'however, Each new object that you create with an implicit connection consumes more resources.

Public cnnTestDb As Connection





'A recordset is a programmatic construct for working with records.

'You can base your records on a table or a view in the current project

'or on another file, an SQL statement, or a command that returns rows.

Public rsStudent As Recordset





Function fnOpenDB(ByVal strName As String) As Boolean

' in the case of a error return false

On Error GoTo ErrHandler

Set cnnTestDb = New Connection



cnnTestDb.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _

"Data Source=" & strName





'Create recordset reference and set its properties.

Set rsStudent = New ADODB.Recordset



'adOpenKeyset enables recordset maintenance functions such as adding, changing,

'and deleting records, and it permits bidirectional navigation around a

'database without relying on bookmarks.

'However unlike adOpenDynamic , we don't have ready made way of viewing

' changes made by other users

rsStudent.CursorType = adOpenKeyset



' Locktype controls how users can manipulate a recordset.

'adLockOptimistic Locks a record only when a user chooses to commit edits back to the database

rsStudent.LockType = adLockOptimistic



rsStudent.Open "&Ccedil;&aacute;&Oslash;&Ccedil;&aacute;&Egrave;", cnnTestDb, , , adCmdTable



fnOpenDB = True

Exit Function



ErrHandler: ' show the error here

MsgBox Err.Description

' failed to open

fnOpenDB = False



End Function

الان وقد فتحنا قاعدة البيانات و صنعنا كائنا لللكتابة الى هذه القاعدة سوف نضيف وظيفة لاضافة اسم الطالب عمره و صورته الرقمية .

Function fnAddStudentInfo() As Boolean

On Error GoTo ErrHandler

Dim bytBLOB() As Byte

Dim strImagePath As String

strImagePath = "c:\test.gif"

Dim intNum As Integer

With rsStudent

.AddNew

.Fields("الاسم").Value = "غازي ال وادي"

.Fields("العمر") = 34

'Use FreeFile to supply a file number that is not already in use

intNum = FreeFile



Open strImagePath For Binary As #intNum

'realocate the number of bytes aalocated based on the file length

ReDim bytBLOB(FileLen(strImagePath))

'Read the data and close the file

Get #intNum, , bytBLOB



Close #1 ' since it is the first one we opened

' Now add the blob to the dataabase

.Fields("الصورة").AppendChunk bytBLOB



End With

fnAddStudentInfo = True

Exit Function



ErrHandler:

MsgBox Err.Description

' failed to open

rsStudent.CancelUpdate

fnAddStudentInfo = False



End Function

اخيرا سوف نربط الوظائف جميعها عند الضغط على الزر "اضف صفا"



في واجهة التصميم انقر الزر الوحيد الذي اضفناه في الفورم واضف الشيفرة التالية
Private Sub btnAddRecord_Click()

If Me.fnOpenDB("C:\testDB.GWF") Then

If Me.fnAddStudentInfo() Then

If Me.fnAddStudentInfo() Then



MsgBox "تم اضافة الصف"



End If

End If



Me.cnnTestDb.Close

Else

MsgBox "Failed to open database"

End If

End Sub

هذا هو كل شيئ في هذا المقال. وقد اردت ان اترك كيفية عرض الصورة من قاعدة البيانات الى مقال آخر ولكن تحسبا لموانع قد تعيق صدور ذلك التمرين اليك عزيزي القارئ اخنصار للمقال القادم:

اضف للفورم في هذا المقال زر جديد و كائن من نوع "Image" (ليس picture)

اضف الشيفرة التالية المصدر عند نقر اللزر الجديد

Private Sub Command1_Click()



If Me.fnOpenDB("C:\testDB.GWF") Then

Set Me.Image1.DataSource = rsStudent

rsStudent.MoveFirst

Me.Image1.DataField = "الصورة"

Me.Image1.*******





End If



End Sub

thegust2000
07-04-2006, 07:46 AM
كيفية إدراج نص في Microsoft Word عن طريق الفيجوال بيسك

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

فتح برنامج فيجوال بيسك واختيار Standard Exe .
احضار المكتبة الخاصة بتطبيق مايكروسوفت ورد : من قائمة project &szlig; نختار reference &szlig; ونبحث عن Microsoft word 10.0 object library &szlig; ثم نضغط OK.
سنضيف Command لشاشة البرنامج وقمت بتسميته Cmdok ستتم هنا عمليات البرمجة الرئيسية وبداية لا تحتاج الى أكثر من ذلك اذا كان برنامجك بسيط ويعمل على عملية ادراج النصوص فقط.
في القسم العام للبرنامج سنعرف المتغير wrdapp من نوع Word.Application عن طريق الأمر التالي :
Dim wrdapp As Word.Application

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

سنقوم بإضافة الكود التالي عن الحدث Clikc للزر الذي قمنا بإنشائه سابقا ً :
Private Sub Cmdok_Click()

Set wrdapp = New Word.Application
With wrdapp
.Documents.Add
.ActiveDocument.Content.Font.Bold = True
.ActiveDocument.Paragraphs.Alignment = wdAlignParagraphLeft
.ActiveDocument.Content.Font.Color = wdColorRose
.ActiveDocument.Content.Font.Italic = True
.ActiveDocument.Content.Font.Name = "Monotype Corsiva"
.ActiveDocument.Content.Font.Size = 22
.ActiveDocument.Content.Text = "Hi This How Insert Text In Microsoft Word" & Chr(13)
.ActiveDocument.Content.InsertAfter Text:="GOOD BYE"
.Visible = True
End With
End Sub



شرح الكود

· الجملة رقم (1) وهي مهمة في عملية اسناد مرجع مايكروسوفت ورد للمتغير wrdapp وتم استخدام new ليقوم بفتح برنامج مايكروسوفت ورد.

· الجملة رقم (2) وهي جملة With الشائعة الإستخدام لتسهيل عمليات البرمجة وعدم تكرار كتابة wrdapp.

· الجملة رقم (3) لإضافة مستند جديد لبرنامج مايكروسوفت ورد .

· الجمل من (4) وحتى (5) وهي خصائص النص المراد ادراجة, وتستخدم ActiveDocument لاحداث التغيرات المطلوبة على المستند الفعال حالياً.

· جملة (4) لإعطاء النمط العريض للنص المدرج .

· جملة (5) لجعل محاذاة النص جهة اليسار.

· جملة (6) تغير لون الخط للون الوردي.

· جملة (7) النمط المائل.

· جملة (8) اسناد نوع الخط .

· جملة (9) حجم الخط . م

· ملاحظة : للإحتفاظ بنفس الاعدادت (نوع الخط , حجمه , لونه , نمطه ) الأصلية للنص يتم الإستغناء عن واحد او كل الخصائص السابقة .

· الجملة رقم (10) وهي الجملة التي يتم من خلالها إدراج النص المطلوب عن طريق الخاصية text التابعة لمحتوى المستند. وتسند للخاصية text متغير أو قيمة من نوع string.

· الجملة رقم (11) ادراج نص جديد ويلاحظ هنا استخدام الخاصية InsertAfter عوضا عن text وتم ذلك لإعلام البرنامج بالإحتفاظ بالجملة السابقة وادراج الجملة الجديدة بعدها .

· الجملة (12) لاظهار مايكروسوفت ورد ولن تتم رؤية عملية الادراج من غير هذة الجملة .

· الجملة (13) اغلاق الجملة with.

thegust2000
07-04-2006, 08:49 AM
مقدمه

في بداية الأمر خرج أناس عرفوا بإسم المهندسين والمصممين والعلماء اللذين قاموا بتصميم وهيكلة جهاز الحاسوب وقد نتج عن ذلك جهاز ضخم إحتوى على 5 طوابق تقريباً من النوع الكبير . وكانت فكرة إنشاء جهاز حاسب آلي قد نتجت إثر ضخامة المعلومات وإزالة طريقة الكتابة على الورق وإزالة الوقت الكبير للعمليات الحسابية الأربعة .
- IBM كانت من الشركات الرائدة والسباقة في هذا المجال بحيث كانت تصمم جهاز حاسب آلي و تضع فيه نظام تشغيل صغير Operating System ( O.S ) والتي أدت فيما بعد إلى تطور مصطلح نظام التشغيل O.S والحاجة إلى تطويره .
- ومعنى نظام التشغيل : هو النظام الذي يستخدم أجهزة الهاردوير الموجودة لدى الحاسوب .
- في ذلك الوقت ظهر طالبين من إحدى الجامعات الأمريكية اللذان كانا في مستوى سنة ثانية من تطوير وتصميم نظام تشغيل خاص بهما والذي أسفر فيما بعد عن ثورة معلوماتية ضخمة وهما الطالبان بلقتس وصاحبه وكان هندي الأصل .
- عندما نظرت شركة IBM إلى النظام الذي صُمم بواسطة هذين الطالبين تبنت نظامهما بالكامل وعملت على تشجيعهما والذي أدى إلى أن تركا الدراسة وفتحا شراكة مع شركة IBM .
- كان النظام يدعى DOS – 8 Bit وكلمة DOS جاءت من الجملة المختصرة Disk Operating System ومعناها قرص نظام التشغيل . أما القسم الثاني من النظام فهو كناية ودلالة على عدد الخانات المستعملة لكل جملة Instructor وهي أوامر النظام ونلاحظ هنا أن عددها 8 أي أننا عندما نضغط على لوحة المفاتيح من خلال النظام فإن الحاسوب يقوم بفهمها على أساس 8 أرقام ثنائية ( 1 , 0 ) . وكما نعرف فإن الحاسوب لا يمكنه التعامل مع الحروف وإنما بواسطة الأرقام الثنائية Binary فمثلاً لإدخال حرف A فإن الحاسوب يفهمها ( ******** ) والنجمة معناها إما 1 أو 0 .
- من خلال هذا النظام ظهرت لغة الأسمبلي الشهيرة والمعقدة ومعناها لغة التجميع .
- بواسطة لغة الأسمبلي كان العمل صعباً وكانت الجمل طويلة وعدد سطورها طويلة حيث أن المبرمج كان يتعامل مع الذاكرة مباشرة من خلال وضع وجمع وحذف .. إلخ قيمتين مخزنتين في الذاكرة ، لذلك فقد كان يتوجب على المبرمج مثلاً لطباعة كلمة أن يكتب 5 أو 6 سطور لتنفيذ ذلك . و نتيجة لذلك كان لابد من إيجاء طريقة جديدة لتوفير الوقت والتقليل من حجم البرنامج فقاموا بإبتكار طريقة جديدة وهي طريقة الدوال Function حيث قاموا بوضع أكثر من Instruction بدالة واحدة فقط ومن هنا نشأ مفهوم المكتبات التي تضم أكثر من دالة وتطورت البرمجة فعرفت بإسم Structured Programming ومعناها البرمجة التركيبية . نتيجة لذلك طُورت عدة لغات مثل COBOL ولغة C الشهيرة و FORTRON .
- بعدد تلك اللغات وبسبب الحاجة إلى إضافة كلمات فقد تم إضافة وتوسعة النظام لكي يصبح DOS – 16 Bit .
- كانت شركة أبيل ماكنتوش قد عملت على تطوير نظام عجيب وكان فريد من نوعه فقد كان يستخدم الصور للدلالة على الأعمال فظهر شكل الملف وشكل المجلد ... إلخ وذلك بدل الشاشة السوداء التي كانت معروفة في ذلك الوقت والمسماة Console وبذلك النظام تم معرفة الـ Interface ومعناها الواجهة والتي كانت User-Friendly حيث كان التفاعل مع المستخدم تفاعلاً مباشراً من خلال الرسومات .
- أخذت شركة SUN الفكرة من نظام ماكنتوش والتي كانت تمتلك النظام المفتوح Open Source المسمى يونيكس نسبة إلى صانعه وقامت بتشكيل نظام جديد عُرف بإسم لينكس .
- ظهرت في هذه اللحظة التسابق لإنتاج نظام تشغيل كامل من واسطة كبريات الشركات مثل Microsoft وشركة Sun وشركة Apple Macintosh و باقي الشركات الكبرى .
- وأيضاً في هذه الأثناء وبينما كان هناك تقدم وتطور من قِبل شركات Sun وشركة Apple Macintosh كانت شركة Microsoft تعيش ركود نسبي لأنها كانت تعتمد نظام الـ Console في تلك الأثناء .
- شعرت شركة مايكروسوفت بعجزها وبتنحيها عن السوق فقامت بطرح تطبيق Application وليس نظام تشغيل يعتمد الواجهة الرسومية والذي عرف بنظام Windows 3.X .
- ظهرت الحاجة لتوحيد نظام البرمجة لدى المبرمجين لكي يكون الكود ديناميكي وسلس وله قواعد وشروط ولكي لا يخرج كل مصمم بأفكار بعيدة عن الهدف المقصود فظهر مفهوم الـ Object Oriented Programming والمعروف بالرمز ( OOP ) وأدت إلى ظهور العديد من اللغات ومن الأمثلة عليها C++ , Small Talk , … .
- بواسطة البرمجة الموجهة بالأهداف أنتجت شركة مايكروسوفت شبه نظام وسموه Windows 95 وسبب أنه كان شبه نظام أنه كان يعتمد على نظام الـ DOS في أداءه وعمله .
- وظهرت الحاجة إلى إخراج جيل من البرمجيات المتكاملة من خلال شركة مايكروسوفت والتي سميت فيما بعد بـ Microsoft Office .
- وبعد سنتين تقريباً طرحت شركة مايكروسوفت نظام تشغيل وسمته Windows 97 ولكنه فشل فشلاً سريعاً فقد طرح وخلال شهرين فقط تم سحبه من الأسواق لرداءته .
- ولكنها سرعان ما قدمت أول نظام تشغيل مستقل بواجهة رسومية والذي عرف بإسم Windows 98 ومن هنا ظهرت الحاجة لإنشاء برمجيات متكاملة على طريقة الـ Enterprise التي تعني وجود جميع الحلول في مجموعة واحدة .
- قامت شركة مايكروسوفت بالتفكير بفكرة ذكية لجذب ولإجبار جميع العملاء على بإستخدام نظامها التشغيلي فقد قامت بطرح معالج لبعض اللغات مثل لغة الـ C ولغة الـ BASIC ولإجبار المبرمجين على إستخدامه فقد قامت بالتسهيل على المبرمجين وبالمجان فقدمت API المستخدمة من قِبل النظام والمختصرة من جملة Application Program Interface والتي تعني واجهة البرامج التطبيقية . فسهلت على المبرمج فمثلاً إذا أراد المبرمج كتابة كود لإظهار نافذة فقط فإنه سيبقي وقت طويل جداً وسيكتب كود طويل جداً ، فقامت مايكروسوفت بطرح المكتبات لهذه الغاية بحيث ينتج نافذة كما في نظام التشغيل بوقت وكلفة قليلين جداً . وبذلك جذبت العديد من المبرمجين ومن العملاء إليها بواسطة هذه الخطة . وبالطبع فإن البرنامج الناتج من هذه العملية لن يشتغل سوى على نظام التشغيل Windows .
- قام المبرمجين بكتابة البرامج المختلفة بواسطة نظام API لأنه كان سلس وسهل الإستعمال ونتيجة لذلك فقد زادت مبيعات شركة مايكروسوفت أضعافاً مضاعفة والتي وصلت سنوياً إلى 3.5 مليار دولار سنوياً .
- في هذه الأثناء قامت شركة SUN بطرح لغة جديدة من إنتاجها والتي عرفت بإسم جافا JAVA لملاحقة شركة مايكروسوفت وبذلك تكون هذه الشركة قد قطعت شوطاً كبيراً بهذا المجال حيث قامت بتجزيء هذه اللغة إلى ثلاثة أقسام وهي : J2SE , J2EE , J2ME .
- ظهرت مكتبتان هنا من إنتاج الشركتان وهما :
SDK : من شركة مايكروسوفت وهي إختصار لجملة Software Developer Kit .
JDK : من شركة SUN وهي إختصار لجملة JAVA Developer Kit .
- لكن يوجد جانب لم تعيهما تلك الشركتان وهو قواعد البيانات Database والتي أصبحت حالياً الجانب المهم والأكبر في إستخدام الحاسب الآلي فقد كانت شركة Oracle الرائدة في هذا المجال والسباقة إليه . وظهرت شركات أخرى مثل شركة Fox Pro التي أيضاً كانت من الشركات الكبيرة في هذا المجال .
- تنبهت شركة مايكروسوفت باكراً إلى خطورة هذا الجانب فإشترت ملكية شركة Fox Pro وضمتها إلى أملاكها وقامت لاحقاً بإنشاء المكتبة الخاصة للـ Database التي عرفت بإسم SQL .
- و بإستخدام قواعد البيانات أنتجت شركة مايكروسوفت لغات جديدة مثل Visual C++ , Visual Basic , Visual Fox Pro وضمتها إلى قائمتها البرمجية .
- و بإستخدام تكنولوجيا الإنترنت فقد قامت شركة مايكروسوفت بطرح لغة خاصة لمعالجة صفحات الإنترنت والي سُميت فيما بعد بالإسم InterDev وهي عبارة عن صفحات إنترنت نشطة ذات الإمتداد المعروف ASP .
- كانت شركة SUN تعمل على تحديث وتطوير لغتها ( JAVA ) أول بأول من حيث قواعد البيانات و التعامل مع الإنترنت .
- وطبعاً جاءت هنا فكرة الـ Script والتي تعني جزء من كود لغات الإنترنت في صفحة HTML .
- بسبب الطمع والجشع الذي كان عند شركة مايكروسوفت فقد قامت بالخطوة القاتلة وهي أنها أنشأت لغة جديدة وسمتها بإسم Visual J++ , ولكنها لم تسلم بتلك الفعلة فقد قامت شركة SUN برفع دعوة قضائية على شركة مايكروسوفت ولأنها صاحبة اللغة فقد خسرت شركة مايكروسوفت تلك القضية وتم تغريمها مبالغ طائلة وصلت إلى 3 مليار دولار أمريكي ومُنعت من إستعمالها والتطوير عليها لذلك السبب .
- يمكن تلخيص الإصدارات للغات البرمجة في تلك الفترة لشركة مايكروسوفت بالجدول التالي تجدونه في المرفق )

- ظهرت مشاكل عديدة في لغات شركة مايكروسوفت فمثلاً وجود أوامر في لغة السي ++ وعدم وجودها في الفيجوال بيسك وكذلك فقد كان من الصعب تشغيل برنامج على الفيجوال بينما هو مكتوب بلغة السي ++ , في هذه الأثناء كانت شركة SUN تسير على الطريق الصحيح وتعمل على تطوير لغتها أولاً بأول . ومن المشاكل الأخرى لمايكروسوفت أن مبرمج اللغة الواحدة لا يستطيع أن يتعامل أكثر من نسخة من برامج قواعد البيانات فمثلاً كل مبرمج واحد يستطيع التعامل مع لغة واحدة لا يسعة إستعمال غير مكتبة واحدة فقط من المكتبات التالية DAO , ADO , ODBC ... الخ ، وكل مكتبة متخصصة بلغة واحدة لا يستطيع المبرمج إستعمالها في لغة أخرى وفي هذا تقسيم المبرمجين إلى أقسام عديدة وكل مبرمج له مجال يختلف عن مجال زميله في المهنة ، بينما كانت شركة SUN تمشي بدون أي مشاكل فهناك لغة واحدة فقط وهي الجافا وهناك مكتبة واحدة وموحدة فقط لقواعد البيانات وهي JDBC .
- نظرت شركة مايكروسوفت بنظرة عميقة للموضوع وأسفر عن ذلك خطة جديدة مع عام 2000 وهي إخراج لغات موحدة لها نفس مكتبات التشغيل ولها إطار واحد فقط Frame Ware وأدت إلى ظهور لغات جديدة عرفت بمجموعة الدوت نيت . NET فقدمت لغات جديدة مثل VC# وضمتها في مجموعة Visual Studio 7 . NET وضمت :
1 – Visual C # ( 2000 )
2 – Visual C ++ ( 2002 )
3 – Visual Basic (2002)
4 – Visual J# ( 2003 )
في هذه النسخة قاموا بضم لغة الـ J# ولعلك تتساءل كيف ذلك ؟؟ والمحاكمة ؟؟
هنا قامت شركة مايكروسوفت بتصميم تلك اللغة من الصفر وقاموا بتطويرها لتحاكي لغة الجافا

كل اللغات السابقة كانت قادرة وبكفاءة التعامل مع الـ XML , ADO وبإستطاعة المبرمج تصميم وصناعة البرامج في المجالات التالية :
Windows Application , Web Application , Mobile Application , Smart Device …
كان هذا في النسخة لعام 2000

thegust2000
07-04-2006, 08:52 AM
على فكرة برنامج الدوت نت يحتوى على ست 6 أسطوانات لتثبيته وهم السي دي الأول والثاني والثالث والباقين هم مكتبه ام أس دي أن msdn

المهم أذا كنت مثبت الفيجوال دوت نت على جهازك شغل الدوت نت

شغل الدوت نت لكي ترى هذه الصورة

http://nortonc.jeeran.com/Images/deve_1.JPG

طعبا هذا صورة الدوت نت ولكن الصورة مصغرة لكي نرى كل شيء أتفقنا ! (:

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

سوف ترى فيه المشروع الذي علمته ولذى ما عليك فعله هو الضغط على أسم المشروع الذي عملت عليه طبعا

هذا الواجهه تساعدنا كثيرا من العناء في البرمجة واي مشروع تعمل عليه سوف تراه من خلال هذه اللسته

المهم الأن نريد أن نرى ما فيه داخل الدوت نت

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

File >>> New >>>> Project

كما في الصورة


http://nortonc.jeeran.com/Images/deve_2.JPG


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

يقدم خدمات للمبرمجين رائعه

المهم راح تشوف نفس هذه الصورة التاليه

http://nortonc.jeeran.com/Images/deve_3.JPG

طبعا كما قلت لكم لدينا عدة لغات تستطيع البرمجة بواسطتهم وهم كالتالي :

1 - Visual Basic Projects
2- Visual C# Projects
3- Visual J# Projects
4- Visual C++ Projects

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

1- Setup and Deployment Project


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


http://nortonc.jeeran.com/Images/deve_4.JPG

وسوف نرى هنا معلومات ! وهي تخص أسم المشروع وكذلك مكان الحفظ



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


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

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

أذا هيا لنبدأ

حدد لغة السي شارب Visual C# Projects لكي تظهر لك أنواع المشاريع التي سوف نعمل بها في جهه اليمين

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

http://nortonc.jeeran.com/Images/deve_5.JPG


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

thegust2000
07-04-2006, 08:54 AM
الجزا الثاني من سلسلة تعلم السي الشارب

هذا الدرس سيكون المدخل الأول لتعلم C#، حيث سنتعلم فيه كتابة أول برنامج ( برنامج بسيط للغاية) الغرض منه هو وضع أقدامنا على بداية الطريق..

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



قد يدور في ذهنك الآن، كيف وأين أكتب برامج C# ؟!



سؤال منطقي، بكل سهولة يمكننا كتابة برامج C# باستخدام برنامج المفكرة وحفظها بالامتداد .cs وقد ذكرنا في الدرس السابق أن .NETFRAMEWORK يحتوي على محرك لتنفيذ برامج .NET بالإضافة إلى مكتبة برامج .NET، فإذاً كل ما نحتاج إليه لتنفيذ برامج C# هي .NETFRAMEWORK وستجدها في موقع مايكروسوفت www.microsoft.com




ولكن شركة مايكروسوفت طرحت أداة تطوير جديدة تسمى Visual Studio.NET و اختصارها VS.NET وهي عبارة عن بيئة تطوير متكاملة IDE تحتوي على التالي:



محرر نصوص، لكتابة برامج .NET
ترجمة وتنفيذ برامج .NET
يمكنك من تصميم الواجهات والنماذج بسهولة .
يتمتع بخاصية ترقيم أسطر لبرنامجك.
يمكنك تصفح الإنترنت من خلال برنامج انترنت اكسبلورر الموجود ضمن بيئة VS.NET.
بالإضافة إلى أن واجهته مصورة و سهلة الاستخدام.


لذلك فمن الأفضل لنا استخدام VS.NET لكتابة وتنفيذ برامجنا.


هذه نظرة سريعة على الواجهة المرئية لبرنامج VS.NET، لنكتب أول برنامج لنا! في محرر النصوص، امسح الجزء المضلل في الشكل التالي


http://www.c4arab.com/images/lesson...csharp/IDE6.JPG

ثم اكتب السطر التالي بدل منه :

http://www.c4arab.com/images/lesson...csharp/IDE7.JPG

السطر السابق يؤدي إلى طباعة الجملة الموجودة بين علامتي التنصيص "" على شاشة الدوس السوداء


لنشاهد النتيجة علينا تنفيذ الكود أولاً، من شريط القوائم الموجود أعلى محرر النصوص اختر Debug | Start without debugging (أو اضغط على المفتاحين (ctrl+F5 كما في الشكل:

http://www.c4arab.com/images/lesson...csharp/IDE8.JPG

لكن اكتب


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

http://www.c4arab.com/images/lesson...csharp/IDE9.JPG

اضغط على أي مفتاح لإخفاء هذه الشاشة.



هل تلاحظ أي تغير في نافذة المخرجات؟ بالطبع! فأثناء تنفيذ البرنامج، ظهرت على هذه النافذة أن البرنامج قد نفذ بنجاح ولا يوجد أخطاء. كما في الشكل التالي:

http://www.c4arab.com/images/lesson...sharp/IDE10.JPG


أنظر ما سيحدث في حال كتابة أخطاء في الكود السابق، كعدم كتابة علامة الفاصلة المنقوطة في آخر السطر السابق

http://www.c4arab.com/images/lesson...sharp/IDE14.JPG

سيظهر الخطأ والسطر الذي يوجد به هذا الخطاء، ولن تظهر النتيجة على الشاشة السوداء حتى يتم تعديل هذا الخطأ


إذا أردت معرفة الملفات التي يتضمنها هذا المشروع، فمن شريط الأدوات الموجود أعلى المحرر، اختر الرمز http://www.c4arab.com/images/lesson...sharp/IDE11.JPG وستفتح لك نافذة Solution Explorer يمين محرر النصوص، سترى في هذه النافذة أربع ملفات References و App.ico و assemplyInfo.cs و class1.cs. ما يهمنا هو class1.cs حيث أنه الملف الذي اضفنا له سطر C# السابق. وهو يحمل الإمتداد .cs وهو امتداد جميع ملفات البرامج المكتوبة بلغة C#. كما في الشكل:


http://www.c4arab.com/images/lesson...sharp/IDE12.JPG

عند اختيار أي ملف من هذه الملفات قم بالنقر على الرمز في شريط الأدوات، وسيفتح لك نافذة الخصائص Properties وستظهر خصائص هذا الملف كالاسم والمسار الذي يوجد به هذا الملف. كما في الشكل:

http://www.c4arab.com/images/lesson...sharp/IDE13.JPG


حسناً، كل ما قمنا به حتى الآن هو التعرف على بيئة التطوير VS.NET و كتابة أول برنامج لنا مستفيدين من المميزات السهلة التي توفرها هذه البيئة.


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



وقبل أن أتركك تعبث في واجهة VS.NET، أود أن أضيف معلومات مبسطة حول الكيفية التي تمت بها تنفيذ برنامجنا السابق.



§ في البداية يوجد لدينا ملف به كود مكتوب بأحد لغات .NET وهو C# في هذه الحالة.

http://www.c4arab.com/images/lesson...sharp/IDE18.JPG


بعد ذلك تتم ترجمة الكود إلى لغة وسيطة ليست من لغات ذات المستوى الأعلى ولا من اللغات ذات المستوى الأدنى، وتسمى هذه اللغة MSIL وهي اختصار لـ Microsoft Intermediate Language حيث يصبح هذا الكود غير معتمد على جهاز معين ولا نظام تشغيل معين.


http://www.c4arab.com/images/lesson...sharp/IDE17.JPG

ولذلك فمن مميزات تطبيقات .NET أنها غير معتمده على نظام تشغيل أو جهاز معين! فقط نستخدم JIT Compiler مناسب لنظام التشغيل والجهاز لدي ومن ثم يمكنني تشغيل أي تطبيق من تطبيقات .NET!

وبذلك يمكنني استدعاء برنامج مكتوب بلغة Visual Basic.NET من برنامج مكتوب بلغة C# أو العكس، وذلك لأن هذه البرامج قد تم ترجمتها إلى اللغة الوسيطة MSIL. وهذه من مميزات تقنية .NET

UAE Soul
07-04-2006, 08:54 AM
الله يعطيك العافية ويسهل عليك

موضوع كنت بحاجة له :)
ان شالله يستمر

مشكورين

thegust2000
07-04-2006, 08:56 AM
اخواني هذه دروس مصور من مايكرسوفت تعلمك السي شارب جدا رائعه
ارجو الجميع يستفيد منها

هنا وصلة الدروس (http://msdn.microsoft.com/vstudio/express/visualcsharp/learning/)
وهنا بعض الكتب لسي شارب

كتاب 1 (http://podgoretsky.com/ftp/Docs/CSharp/CSharpWebDevGuide.pdf)
اضغط هنا 2 (http://rapidshare.de/files/1047490/Sams.Microsoft.Visual.C.Sharp.Dot.NET.2003.Unleash ed.Dec.2004.eBook-LiB.zip.html)

thegust2000
07-04-2006, 09:12 AM
الله يعطيك العافية ويسهل عليك

موضوع كنت بحاجة له :)
ان شالله يستمر

مشكورين


شكرا لك على التشجيع والتحفيز يا اخى

thegust2000
07-04-2006, 09:14 AM
http://www.hannoo.co.uk/Share/eBooks/[AddisonWesley][developing.applications.with.vs.net].zip
http://www.hannoo.co.uk/Share/eBooks/[AddisonWesley][essential.dotnet].rar
http://www.hannoo.co.uk/Share/eBooks/[AddisonWesley][Real.World.XML.Web.Services].rar
http://www.hannoo.co.uk/Share/eBooks/[AddisonWesley][Understanding.NET.A.Tutorial.and.Analysis].rar
http://www.hannoo.co.uk/Share/eBooks/[APress][A.Programmer's.Guide.to.ADO.NET.in.C#].rar
http://www.hannoo.co.uk/Share/eBooks/[APress][A.Programmer's.Introduction.to.C#].rar
http://www.hannoo.co.uk/Share/eBooks/[APress][COM.and.NET.Interoperability].rar
http://www.hannoo.co.uk/Share/eBooks/[APress][Real.World.ASP.NET-Building.a.Content.Management.System].zip
http://www.hannoo.co.uk/Share/eBooks/[Coriolis][VS.NET.The.NET.Framework.Black.Book].rar
http://www.hannoo.co.uk/Share/eBooks/[IDG][XML.Bible].zip
http://www.hannoo.co.uk/Share/eBooks/[Manning][windows.forms.programming.with.c#].rar
http://www.hannoo.co.uk/Share/eBooks/[MS][Building.Secure.ASP.NET.Applications].rar
http://www.hannoo.co.uk/Share/eBooks/[MS][Building.Web.Solutions.with.ASP.NET.and.ADO.NET].rar
http://www.hannoo.co.uk/Share/eBooks/[MS][Building.XML.Web.Services.for.Microsoft.NET.Platfo rm].rar
http://www.hannoo.co.uk/Share/eBooks/[Manning][MS.NET.for.programmers].rar
http://www.hannoo.co.uk/Share/eBooks/[MS][Coding.Techniques.for.VB%20.NET].rar
http://www.hannoo.co.uk/Share/eBooks/[MS][DEV.XML.WEB.SERVICES.USING.ASPNET.DELIVERY.GUIDE].rar
http://www.hannoo.co.uk/Share/eBooks/[MS][Introducing.Microsoft.NET.2nd.Edition].rar
http://www.hannoo.co.uk/Share/eBooks/[MS][Inside.Microsoft.NET.IL.Assembler].rar
http://www.hannoo.co.uk/Share/eBooks/[MS][Developing.WebApp.with.VBNET.and.VC#.NET].zip
http://www.hannoo.co.uk/Share/eBooks/[MS][Introduction.to.MS.ASP.NET].rar
http://www.hannoo.co.uk/Share/eBooks/[MS][Introduction.to.MS.VB.NET].rar
http://www.hannoo.co.uk/Share/eBooks/[MS][Microsoft.ADO.NET].rar
http://www.hannoo.co.uk/Share/eBooks/[MS][MSDN Training.C#].rar
http://www.hannoo.co.uk/Share/eBooks/[Digital][Internet.Security].rar
http://www.hannoo.co.uk/Share/eBooks/[Sams][Teach.Yourself.TCP.IP.In.24Hours.3rd.Edition].rar
http://www.hannoo.co.uk/Share/eBooks/[MS][Microsoft.IIS.6.0.Administrators.Pocket.Consultant].rar

o.mohammed
07-04-2006, 09:14 AM
اخي العزيز
اشكرك على ردك وجزاك الله خيرا
وباذن الله سوف اقوم بكتابه اساسيات الفيجوال بيسك 2005 وما الجديد فيه
واضيفها في هذا الموضوع لكي يكون شاملا باذن الله
هذا ان لم يكن لديك مانع
واشكرك على حسن ردك
واخي سلوان
لغه البرمجه Visual Basic 2005 هي ضمن عائله الدوت نيت .NET ويمكنك تسميتها كما شئت !!!!!!!
Visual basic 2005 او Visual basic 2005 .NET

o.mohammed
07-04-2006, 09:23 AM
واحب ان ابدا برابط لبرنامج
Visual Studio .NET 2005 Team Suit Edition
وهي افضل نسخه لبرنامج Visual Studio 2005

http://www.absba.org/vb/showthread.php?t=292562&highlight=Team+Suite

thegust2000
07-04-2006, 09:33 AM
شكرا لسرعه استجابتك ولكن الايوجد رابط مباشر
وما مساحه البرنامج

o.mohammed
07-04-2006, 11:53 AM
اخي العزيز
كل المعلومات عن البرنامج متوفره في الموضوع الي حطيت الرابط له
والى الان لا يوجد رابط مباشر له