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

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


thegust2000
07-04-2006, 07: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, 07:02 AM
بسم الله الرحمن الرحيم

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

الدرس الأول



الدرس الأول

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



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

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



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

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

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

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



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

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

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

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

الدرس الثانى



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




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

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



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

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



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

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



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

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






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

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

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

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

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

الدرس الثالث





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




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

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





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

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



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

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

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

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

الدرس الرابع



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





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

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

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

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

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

الدرس الخامس



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

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

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

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



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

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



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

الدرس السادس





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

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



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

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

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

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

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

الدرس السابع



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

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

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

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

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

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

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




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

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

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





ملحوظة هامة :

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

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






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

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

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

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



مقدمة



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

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

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

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

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

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

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

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

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

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

thegust2000
07-04-2006, 07: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, 07: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, 07: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, 08: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, 08:10 AM
قبل ان اقرا موضوعك بتمعن
واخشى ما اخشى ان يسبقني
جماعة :D :D :D

UP

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

thegust2000
07-04-2006, 08: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, 08:20 AM
قبل ان اقرا موضوعك بتمعن
واخشى ما اخشى ان يسبقني
جماعة :D :D :D

UP

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




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

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

thegust2000
07-04-2006, 08: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, 08: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, 08:37 AM
شكرا لك اخي صاحب الموضوع
و اخي عمر محمد(o.mohammed)
هل لغة فيجوال بيسك 2005 هية فيجوال بيسك 2005 .net
ام غيرها؟

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


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

thegust2000
07-04-2006, 08: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, 08: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, 09: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, 09: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, 09: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, 09: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, 09: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 وسوف تقوم بالخطوات التالية مرتبة :
* تعريف متغير خاص لقاعدة البيانات .
* انشاء قاعدة البيانات - لاحظ تشابه الطريقة مع طريقة فتح قاعدة البيانات .
* اغلاق قاعدة البيانات .
* استدعاء الاجراء الثا