docs:gambas_tutorial

البرمجة بإستخدام جامباس gambas

‫شكر وتقدير

أحب أن أتقدم بالشكر الجزيل للأستاذ تركي العسيري لتصريحه لي بنقل محتوى كتابه Visual Basic للجميع - نحو برمجة كائنية التوجه OOP أيضا لأستاذي مؤيد السعدي مطور أعجوبة على تفضله بالسماح لي بكتابة هذا الكتاب ضمن وثائق أعجوبة

‫المقدمة‬

تصنف جامباس ضمن البيئات المعتمدة على لغة بيسك كما فيجوال بيسك و Qbasic و Kbasic و VB6 فالأساسيات واحدة وتختلف هذه اللغات عن بعضها كلما تعمقت فيها.

بدأت جامباس بالظهور على يد الفرنسي Benoît Minisini عام 1999 وهي مجانية ومفتوحة المصدر متاحة تحت ترخيص GPL

الجزء الأول: الأساسيات‬

الفصل الأول: تعرّف على Gambas

بيئة التطوير المتكاملة IDE

‬‬ يوفر لك جامباس أدوات في قمة الروعة مجتمعة تحـت مُسمى بيئة التطوير المتكاملة‬ Integrated Development Environment‬ تُختصـر IDE. توفّر لك كل ما تحتاجه‬ لتصميم نوافذ وكتابة أكواد برامجك. بل تقدم لك خدمات أكثر من‬ ذلك، كخدمة التنقيح Debugging ,إدارة ملفـات مشـروعك، تحرير القوائم، تعديل‬ وإنشاء قواعد البيانات … الخ .‬

‫نوافذ بيئة التطوير المتكاملة

النافذة الرئيسية

قوائم بيئة التطوير المتكاملة

أشرطة الأدوات

*قائمة File (ملف)

وتحتوي على التالي :

مشروع جديد (New project)

فتح مشروع (Open project)

فُتِح حديثا (Open recent) وهي المشاريع التي تم العمل عليها مؤخرا

فتح مثال (Open Example) لفتح الأمثلة المرفقة بالبيئة

حفظ المشروع (Save project)

حفظ المشروع باسم (Save project as)

*قائمة Project (المشروع)

*قائمة Debug (التنقيح)

*قائمة View (عرض)

*قائمة Tools (أدوات)

* قائمة ؟ (المساعدة)

كتابة برنامجك الأول

‫الخطوة الأولى: فكرة البرنامج

الخطوة الثانية: إنشاء المشروع

الخطوة الثالثة: تصميم الواجهة

الخطوة الرابعة: كتابة التعليمات

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

الخطوة السادسة: الترجمة

الفصل الثاني: لغة البرمجة GAMBAS

المتغيرات والثوابت

‫ ‫المتغيرات والثوابت هي أساس أي لغة برمجة. إن استيعاب أنواع المتغيرات مـن‬ المسائل الضرورية التي تمكنك من اختيار الأنواع المناسبة للمتغيرات سواء‬ لإرسالها إلى الدوال أو لإجراء العمليات الحسابية عليها. بودّي التحدث عن مبدئي‬ قابلية الرؤية وعمر الحياة قبل الخوض في تفاصيل المتغيرات.‬

قابلية الرؤية وعمر الحياة

‫ ‫قابلية الرؤية وعمر الحياة من بين المبـادئ الضـرورية فـي جميـع لغـات البرمجـة، و Gambas‬ يعتبر لغة برمجة حقيقية تدعم هذان المبدئان. ‬ قابلية الرؤية ‪– Visibility‬أو المدى ‪ -Scope‬للمتغير تمثل قدرة البرنامج على الوصول‬ إلى المتغير واستخدامه، فالمتغير ‪ X‬الموجود في الكود التالي لا يمكن الوصول إليـه‬ خارج الإجراء MySub1

Sub MySub1()
         Dim X As Integer
         X‬‬ = 20
End Sub
Sub MySub2()‬‬
         Print X
         ´لا يمثل متغير x السابق
‫‪End Sub

أما عمر الحياة (Life Time) للمتغير فهي تمثل الفترة التي يظل فيها المتغير محتفظا بقيمته، فالمتغير (X) الموجود في الكود السابق، سينتهي ويزال تلقائيا من الذاكرة بمجرد الخروج من الاجراء Sub MySub‬‬1 ولكي تفهم الأسلوب الذي يتبعه Gambas لتطبيق مبدأ قابلية الرؤية وعمر المتغيرات، عليك معرفة أنواع المتغيرات مـن منظور الرؤية وعمر الحياة:

  • المتغيرات المحلية الديناميكية:

المتغيرات المحلية الديناميكية Dynamic Local Variables‬ هي متغيرات تولد مع‬ السطر الذي تعلن عنها فيه داخل الإجراء وتموت بعد نهاية الإجراء مباشرة ويتم‬ تحرير المساحة التي حجزتها هذه المتغيرات في الذاكرة، وبالنسـبة لقابلية الرؤية‬ فلن تستطيع الوصول إلى هذه المتغيرات إلاّ في نفس الإجراء الذي صرح فيه‬ المتغير. تستخدم الكلمة المحجوزة ‪Dim‬ للتصريح بالمتغير مع كتابة اسمه ونوعه:

Dim sName As String‬‬
Dim iAge As Integer‬‬
‫

عليـك الالتزام بالتصريح كما فـي الصيغة السابقة، فلا يمكنك تعريف المتغير مباشرة دون الالتزام بعملية التصريح بإسناد قيمة ابتدائية له:

sName = ”أعجوبة“ 
iAge‬‬ = 99
  • المتغيرات المحلية الثابتة:‬

قابلية الرؤية للمتغيرات المحلية الثابتة Static Local Variables هي مثل قابلية الرؤية للمتغيرات المحلية الديناميكية أي لن تتمكن من الوصـول إليها إلا من داخل الإجراء المصرح فيه، وبالنسبة لعمر حياة المتغير الثابت فهو يبقى محتفظا بقيمته حتى نهاية البرنامج إذا كان فـي ملف برمجـة Module أو حتـى يمـوت الكائن التابع له. لتصريح متغير ثابت اسـتخدم الكلمـة المحجـوزة ‪ Staticعوضا عن ‪:Dim‬‬

Static bStaticVariable As Boolean

‫تستطيع جعل جميع المتغيرات التابعة للإجراءثابتة بوضع نفس الكلمة المحجوزة عند بداية الإجراء:‬

	 Static Sub Counter‬‬‫	    ()
	 جميع المتغيرات التالية ستاتيكية ‘
	 Dim iCounter As Integer‬‬
	 ‪Dim iCounter2 As Integer‬‬
	 باقي الكود
	 End Sub‬‬

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

	 Sub PrintData‬‬()
	 	Static bIsPrinting As Boolean	 
          If bIsPrinting Then	 
	Exit Sub	 
	Else	 
	bIsPrinting = True	 
	End If	 
	...	 
	End Sub	 
	Sub Counter()	 
	Static iCounter As Integer	 
	iCounter = iCounter + 1	
              End Sub  

‫أخيرا، الكلمة المحجوزة ‪ Static‬لا تطبـق إلا على المتغيرات المحلية فلا تحاول استخدامها على متغيرات عامة أو على مستوى الوحدة فهي بطبيعتها ثابتة.

‫المتغيرات على مستوى الوحدة:‬ أقصد بالوحـدة البرمجيـة Module المتمثلة في ملف برمجة Module أو نافذة نموذج Form‬ أو فئة Class الخ من الوحدات المكوّنة للمشروع. يمكنك تصريح متغير على مستوى الوحـدة في منطقة الإعلانات العامة للوحدة أي خارج الإجراءات.

قابلية الرؤية لهذا النوع مـن المتغيـرات يكـون عـاماً لجميـع أكواد الوحـدة فـي حالة استخدام الكلمة المحجوزة ‪ Dim‬او ‪:Private

Dim sName As String‬‬
	‪Dim iAge As IntegerSub SetData()
	sName‬‬ = ”أعجوبة“
	iAge=99 ‬‬
	‪End Sub‬‬
	Sub PrintData‬‬()
	Print sName‬‬
	‪Print iAge‬‬
	‪End Sub‬‬

‫أما إذا كنت تريد تعريف متغيرات عامة قابلة للوصول من جميع أنحاء المشروع،فالكلمة المحجوزة Public‬ تفي بالغرض:‬

	في ملف برمجة Module‬‬
	Public iNumberOfUsers As Integer‬‬
	في نافذة نموذج 1‪‘ Form‬‬
	Public sCurrentUser As String‬‬
	في نافذة النموذج 2‪‘ Form‬‬
	Private Sub Form_Load‬‬(‪)
	If iNumberOfUsers <= 0 Then‬‬
       ‫‪Exit Sub‬‬
   ‫‪Else‬‬
       ‫‪Me.Caption = Form1.sCurrentUser‬‬
   ‫‪End If‬‬
   ‫‪End Sub‬‬

أما عمر الحياة لهذا النوع من المتغيرات فيكون مرافق لعمر حياة الكائن التابع له والمصرح فيه –كعمر حياة المتغيرات الثابتة، وبالنسبة للمتغيرات العامة المصرحة في ملفات البرمجة ‪ ،Module‬فستظل محتفظة بقيمتها حتى نهاية تنفيذ البرنامج.‬

المتغيرات

‫‫نستطيع ان نعرف المتغيرات بمنظورين، بالمنظور الرياضي يعرف المتغير على انه مجهول س يحتوي على قيمة معينة، اما بالمنظور البرمجي –وهو الاهم- يعرف المتغير على انه قيمة تحفظ في ذاكرة الجهاز. وتختلف المساحة المحجوزة لحفظ هذه القيمة باختلاف نوع المتغير، فمتغيرمن النوع Byte‬ لا يستهلك سوى بايت واحد من ذاكرة الحاسب، في حين أن متغير من نوع String قد يحجز مساحة تصل‬ الى 2 جيجابايت.‬

‫وفيما يلي عرض لجميع انواع المتغيرات المدعومة من قبل Gambas :

المتغيرات من النوع Byte

يستطيع هذا النوع الاحتفاظ باي قيمة صحيحة ضمن المجال العددي [0، 552] وهو اصغر انواع المتغيرات اذ لا يحتجز سوى 1 بايت. بداية المتغيرات من نوع ‪ Byte‬كانت منذ الاصدار الرابع وكانت معظم استخداماتها في نسخة ‪ 16bit‬مـن الاصدار VB4 اذ كانت المصفوفة من النوع ‪ Byte‬ تستخدم كثيرا عند الاتصال باجراءات ‪ API‬التي تتعامل مع الحروف، اما مع الاصدارات الاحدث فلن تتمكن من الاستفادة وتطبيق الطرق القديمة على المتغيرات من النوع ‪ ،Byte‬لان الترميز المتبع UNICOE يستهلك مساحة 2 بايت للحرف الواحد وليس 1 بايت كترميز ASCII‬ باختصـار، لا تضع في ذهنك أي قضايا حرفية ‪ Strings‬عند استخدامك للمتغيرات من النوع Byte ‬فيمكن قصر استخدامك لها على الاعداد الصغيرة او البيانات الثنائية مع المتغيرات من نوع Byte . ‬‬

المتغيرات من النوع Integer‬‬

‫اسند أي قيمة عددية صحيحة في المجال [-867,23، 767,23] للمتغيرات من النوع Integer فهي تحجز مساحة 2 بايت. وعند الحديث عن اجراءات API الخاصة ‫بالحروف، فالمصفوفة من النوع Integer هي الانسب للترميز UNICODE بعيدا عن ‫اجراءات API‬ الحرفية، تفيدك المتغيرات من هذا النوع عند التعامل مع الاعداد ‫الصحيحة، الا انني احبذ استخدام المتغيرات من النوع Long لقدرتها على احتواء ‫قيم اكبر بكثير من المتغيرات من النوع Integer كما انها النوع القياسي لاغلب ‫اجراءات API اما في حالة المصفوفات الكبيرة، فانني افضل استخدام المتغيرات من النوع Integer‬ لتوفير 50% من مساحة الذاكرة.

المتغيرات من النوع Long

المتغيرات من نوع Long‬ تستطيع حمل قيم عددية صحيحة في المجال [-846,384,741,2، 746,384,741,2] فهي تحجز مساحة قدرها 4 بايت للمتغير الواحد، وكما ذكرت في الفقرة السابقة اني احبذ استخدامها عوضا عن المتغيرات من النوع ،Integer‬فهي تحمل قيم كبيرة جدا مقللة الخوف من ظهور خطأ وقت التنفيذ ،Overflow‬فلو كتبت كود يقرأ حجم ملف معين وكنت من المدمنين للنوع ‪ ،Integer‬فستصاب بخيبة امل كبيرة عندما تتعامل مع الملفات التي تزيد احجامها عن 767,23:

  Dim iFileSize As Integer
   iFileSize = FileLen (“C:\MyFile.DAT”) سيظهر خطأ اذا زاد حجم الملف عن 676,23 بايت

المتغيرات من النوع Boolean‬

المتغيرات من النوع Boolean‬ هي نفس المتغيرات من النوع Integer‬ ولكن القيم التي تمكنك من اسنادها اليها تكون اما 0 False‬ او 1 True‬ حجم المتغيرات من النوع Boolean‬ هو 1 بايت، المتغيرات من النوع Boolean‬تسهل عليك عملية قراءة وفهم الاكواد.‬

المتغيرات من النوع Single

‫مجال القيم التي يمكن للمتغيرات من النوع Single احتوائها هو الاعداد الموجبة‬ من 1.401298e-54‬ الى 3.402823e38 ‬او الاعداد السالبة من 3.402823e38- الى‬ 1.401298e-45- وتستهلك مساحة 4 بايت.‬ ربما يفضل معظم مبرمجي Gambas ‬النوع Single‬ على النوع ‪Double‬‬ لاعتقادهم ان الأول اسرع في التنفيذ من الثاني، هذا الاعتقاد صحيح في النوع‬ القديم من المعالجات والتي لا تحتوي على مساعد رياضي ‪، Math Coprocessor‬‬ اما اغلب المعالجات الجديد تحتوي على المساعد الرياضي وهو خاص بالعمليات‬ الحسابية للاعداد ذات الفاصلة العائمة Floating Point‬ مما يجعل السرعة متقاربة‬ جدا بين النوعين Single و Double لذلك ينصح باستخدام النوع Double عوضا عن‬ النوع Single حتى تتقي شر الخطأ OverFlow ودقة اعلى للاعداد لكبر مجال القيم‬ الممكنة بها. من ناحية اخرى، قد تكون المتغيرات من النوع Single‬ اسرع بكثير من‬ المتغيرات من النوع Double‬ عند التعامل مع الخصائص او الطرق التي تحتك مع‬ الاحداثيات بشكل ملحوظ كـ ‪CurrentX ،Circle ،Line ،ScaleWidth ،ScaleHeight‬‬ …. الخ فهذه الاحداثيات تستخدم النوع Single واستخدام النوع Double‬ معها ابطأ‬ لان Gambas ‬يضطر الى تحويل متغيرات النوع السابق الى Single .

المتغيرات من النوع Double

‫مجال القيم التي يمكن للمتغيرات من النوع ‪ Double‬احتوائها هو الاعداد الموجبة‬ من 423-‪ 4.9406564581247e‬الى 803‪ 1.79769313486232e‬ او الاعداد السالبة‬ من 423-‪ -4.9406564581247e‬ الى 803-1.79769313486232e وتستهلك مساحة 8 بايت.‬ معظم دوال Gambas‬ الخاصة بالاعداد تعود بقيمة من النوع ‪ Double‬لذلك هو‬ النوع المفضل دائما، الا ان عيبه الوحيد هو في المساحة الكبير التي يحتجزها، وقد‬ ‫يظهر هذا العيب جليا في المصفوفات الكبيرة من النوع Double‬‬

المتغيرات من النوع Date

هذا النوع من المتغيرات يحمل قيم تاريخية تبدأ من ١ يناير ١٠٠ إلى ٣١ ديسمبر ٩٩٩٩ ويشمل نفس المتغير وقت يبدأ من الساعة ٠٠:٠٠:٠٠ ص وحتى الساعة ٢٣:٥٩:٥٩ م وتستهلك مساحة ٨ بايت .

المتغيرات من النوع String

الثوابت

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

تركيبات Enum

تركيبات من النوع UDT

المصفوفات

المجموعات

الإجراءات والدالات

الإرسال بالمرجع أو بالقيمة

إرسال أنواع أخرى

تخصيص المتغيرات المرسلة

التحكم في سير البرنامج

التفرّع باستخدام IF

التفرّع باستخدام Select

الحلقات التكرارية

تحسين الكفاءة

P-Code و Native Code‬‬

إعدادات Advanced Optimization

الفصل الثالث: النماذج والأدوات

الخصائص المشتركة

خاصية الاسم Name

خصائص الموقع والحجم

خصائص الاحتضان

خاصية الخط Font

خصائص اللون

خصائص الجدولة

خصائص مؤشر الفأرة

خاصية المقبض hWnd

خصائص أخرى

الطرق المشتركة

الطريقة Move

الطريقة SetFocus

الطريقة ZOrder

الطريقة Refresh

الأحداث المشتركة

أحداث الفأرة

أحداث التركيز

أحداث لوحة المفاتيح

حدث التغيير Change

نافذة النموذج

خصائص النموذج

طرق النموذج

أحداث النموذج

القوائم Menus

الأدوات الداخلية

أداة العنوان Label

أداة النص TextBox

زر الأوامر Command Button

أداة الاختيار CheckBox

زر الاختيار OptionButton

أداة القائمة ListBox

أداة القائمة المنسدلة ComboBox

أداة الصورة PictureBox

أداة الصورة Image

أشرطة التمرير ScrollBars

أدوات الملفات

أدوات أخرى

الفصل الرابع: مكتبات VB‬ و VBA

التعامل مع الأعداد

المعاملات الرياضية

الدالات الرياضية

تنسيق الأعداد

دوال أخرى

‫التعامل مع الحروف

المعاملات الحرفية

البحث والاستبدال

تنسيق الحروف

دوال أخرى

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

دوال الوقت والتاريخ

تنسيق الوقت والتاريخ

التعامل مع الملفات والمجلدات

التعامل مع الملفات

التعامل مع المجلدات

البحث عن الملفات والمجلدات

تحرير الملفات

كائنات أخرى

كائن البرنامج App

كائن الحافظة Clipboard

كائن الشاشة Screen

كائن الطابعة Printer

اكتشاف الأخطاء

فكرة عامة

الكائن Err

الفصل الخامس: البرمجة كائنية التوجه OOP

مقدمة إلى OOP

لماذا ‪OOP‬؟

سِمات OOP

بناء أول فئة مبسّطة

بناء الفئات

بناء الخصائص

بناء الطرق

بناء الأحداث

مثال تطبيقي

استخدام الكائنات

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

ماهي حقيقة الكائن ؟

صورة الكائن بالذاكرة

الربط Binding

ولادة وموت الكائن

إرسال الكائن بالمرجع أو القيمة

الفصل السادس: تعدد الواجهات والوراثة

تعدد الواجهات Polymorphism

تطبيق عملي

الوراثة Inheritance

محاكاة الوراثة بـ Gambas

علاقة "يحتوي على"

التفويض Delegation

وراثة الواجهات

التصنيف الفرعي Subclassing

الأهرام الكائنية

العلاقات بين الفئات

فئات المجموعات Collection Classes

الجزء الثاني: برمجة قواعد البيانات‬

الفصل السابع: مدخلك إلى قواعد البيانات

تقنيات الوصول إلى البيانات

التعامل مع قواعد البيانات

لغة الاستعلام SQL

الفصل الثامن: الأدوات والتقارير

أداة DataGrid

أداة FlexGrid

الأداتين DataCombo‬ و DataList

مصمم التقارير

نقاش

SAFAD, 2009/11/01 10:36

صراحة لم أفهم شيئ من هذا الشرح ولو كان للغة ruby أو Python فهي أحسن

عبدالله الصبي, 2009/11/05 10:35

وما الذي لم تفهمه ؟

أما قولك أنه لو كان لروبي أو بايثون فكل ميسر لما هو له

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

ehabsas, 2009/11/05 21:19
 صراحة لم أفهم شيئ من هذا الشرح ولو كان للغة ruby أو Python فهي أحسن 

أخى الكريم على حد علمى كل لغة لها إمكانيات خارقة فى مجال معين قد لا تكون مفيدة بالنسبة لمستواك ( أنت أعلى أو أقل ) ولكنها بالطبع يمكن ان تكون مفيدة جدا لغيرك ناهيك عن سهولة مثل هذه اللغات ( أقصد عائلة بيسك ) غير أن هذه اللغة بالذات قد تكون حل بديل للمنتقلين من منصات ويندوز والذين يجيدون لغات مشابهة !! أرجو ان تأخذ كلامى بروح رياضية ;-)

بالتوفيق أخى عبدالله أرجو أن تتم عملك ( جعله الله فى ميزان حسناتك ) فالطريق إلى إنهاء الكتاب طويل ! تقبل مرورى:-)

عبدالله الصبي, 2009/11/05 22:23

أخي إيهاب وإياك وكل مسلم

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

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

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

شكرا لمرورك العطر

مدحت احمد رشاد, 2010/07/16 14:13

السلام عليكم كنت عايز اعرف هل المشروع مستمر حتى لو كن على الاصداره gambas 1لاتوجد مشكله المهم يكون فى شرح واحنا هن عدله على حسب الاصداره

مؤيد السعدي, 2010/07/17 10:46

يمكنك مراسلتي للحصول على الصلاحيات

exotic0101, 2012/10/14 07:09

اخي انا مهتم جداً بكامباز ولقد احببته من اول نظرة علماً كنت استخدم VB6 وانا الان بحاجة الى كتب بالعربي عن كامباز لو سمحت

حميد عبد الله, 2012/12/07 18:42

هلا اتممت الترجمة لان لدي افكار كثيرة ولكن احتاج لشرح عربي لـ gambas

عباس محمد, 2015/10/25 19:15

هل تتعامل مع جميع قواعد البيانات ام لها قاعدة خاصة بها اقصد تحديدا هل تتعامل مع قواعد ms مما لاشك انها البديل الافضل ل vb,net ولكن ليس لها اي ذكر للاسف لان عائلة الميكروسوفت تغزو السوق وعقول الناس وكانة لا يوجد غيرها .

أدخل تعليقك:
 
آخر تعديل:: 23 نيسان 2015 الساعة 00:19 (تحرير خارجي)