استخدام عناصر التحكم في الديفلوبر
ان استخدام أدوات OCX من خلال Visual Basic أمر في غاية السهولة
يكفي أن تدرج هذه الأداة في شريط الأدوات من خلال مربع الحوار Components
وبعد ذلك - بما يسرته هذه اللغة - تبدأ باستخدام خصائص وأحداث هذه الأداة
يمكن ضبط الخصائص مثل اللون والخط والحجم والموضع و... في وقت التصميم Design Time أو في وقت التنفيذ Run Time على اختلاف فبعض الخصائص يمكن ضبطها في وقت التصميم والتنفيذ وبعضها في وقت التصميم فقط .
ولكل أداة يتم ادراجها توجد أحداث معينة مثل حدث التغير Change و ضغط زر الماوس Mouse Click
يتم استثمار هذه الأحداث بوضع الكود المناسب داخلها .
هذا الأمر في Visual Basic و لكن في Oracle Developer الأمر ليس بهذه السهولة وهو ما يؤدي بالبعض الى أخذ نظرة ليست جيدة عن ال developer وأكثر من يشتغلون بال developer لا يجيدون استخدام OCX مما يلجأ بهم الى استخدام أساليب لأخرى لتحقيق أمور كهذه .
يعني مثلاَ في تطبيق معين اذا أراد البعض مسح الصور من ال scanner فانه قد يستخدم أي برنامج مسح أو ينشأ برنامج بال Visual Basic يقوم بمسح الصور وتخزينها في مجلد معين وبعد ذلك يحمل هذه الصور الى التطبيق المنشأ بال Developer
ما الذي يهمنا عند استخدام أي أداة ؟
يهمنا فقط شيئين : ضبط الخصائص و استخدام الأحداث
الخصائص عبارة عن قيم قد تكون رقم مثل الطول Height والعرض Width
وقد تكون قيم محددة Enumerations مثل appearance : 1-3d و 2-flat
وقد تكون قيم أخرى(مركبة)
كيف نستخدم Ocx Controls من خلال Developer
لشرح ذلك دعونا نأخذ مثال نطبق عليه الخطوات وليكن Progress Bar
ملا حظة :
:كي نستخدم أي أداة يجب تسجيل هذه الأداة في النظام من خلال الأمر
WinDirsystem32 regsvr32.exe xxx.ocx
لالغاء تسجبل أي أداة نستخدم الأمر :
WinDirsystem32 regsvr32.exe xxx.ocx /u
الخطوات :
1- انشئ ) Block Manaully ) اختر اسماً للبلوك وليكن huttami وأختر اسماً لل canvasوليكن كذلك huttami
2- من الشريط Tool Palette (شريط الأدوات) اختر الأداة OLE وارسمها على ال canvas
3- نعرض خصائص OLE ونحدد الخاصية OLE Class
ملاحظة يأتي ال Bar Progress ضمن الملف COMCTL32.OCX
4- بعد ذلك نقوم بجلب Import)) خصائص وأحداث هذه الأداة من خلال :
من القائمة Program نختار Import OLE Library Interface
نحدد الفئة التي حددناها سابقاً
ونختار ال Event Package لجلب الأحداث
و ال Method Package لجلب الخصائص كما هو مبين :
بعد القيام بهذه الخطوة سوف يقوم ال Developer باضافة ال Packages التالية :
- ComctlLib_CONSTANTS
يحتوي على ثوابت وتركيبات (Type , struct) الأدوات الموجودة في COMCTL32.OCX
- COMCTL_IprogressBar
يحتوي على خصائص الأداة Progress Bar
وتكون هذه الخصائص على هيئة اجراءات ((Procedures ودوال ((Functions
تستخدم الاجراءات لتحديد الخصائص
والدوال لاسترجاع (قراءة ) هذه الخصائص
مثلاً لو كان اسم الأداة Pbar1 فلضبط خاصية القيمة Value
Pbar1.value =200 (Visual Basic)
COMCTL_IprogressBar.Value(:item('Huttami.Pbar1').INTERFACE,200) (Developer 2000)
حيث
Item هي دالة يتم استدعاؤها
Huttami هي اسم البلوك
Pbar1 هو اسم الأداة
لقراءة خاصية معينة مثلاً القيمة
(Visual Basic)
Dim vl as long
Vl=Pbar1.value
(Developer 2000)
Declare
Vl Number;
Begin
Vl= COMCTL_IprogressBar.Value(:item('Huttami.Pbar1').INTERFACE)
End;
وهكذا جميع الخصائص
زيادة ايضاح :
لعرض مربع الحوار الخاص بالأداة
COMCTL_IprogressBar.AboutBox (:item('Huttami.Pbar1').INTERFACE)
هناك خصائص كما قلنا تكون قيمها معدودة (Enumerations)
مثل خاصية المظهر (Appearance)
كما ذكرت سابقاً ال Package ComctlLib_CONSTANTS : يحتوي على جميع هذه الثوابت فلخاصية المظهر الثوابت كما في ال Package هي :
SUBTYPE AppearanceConstants IS Number;
ccFlat Constant Number := 0;
cc3D Constant Number := 1;
فلضبط خاصية المظهر على (Flat) يمكن ذلك بطريقتين
COMCTL_IProgressBar.Appearance(:item('Huttami.Pbar1').INTERFACE,0)
طبعاً القيمة 0 لم نضعها اعتباطاً ولكن كما هو واضح من الثوابت
أو
COMCTL_IProgressBar.Appearance(:item('Huttami.Pbar1').INTERFACE, ComctlLib_CONSTANTS.AppearanceConstants.ccflat)
- COMCTL_ProgCtrl_EVENTS
يحتوي على الأحداث التي نود أن نستثمرها لهذه الأداة مثل
MouseMove , Click , OLEStartDrag
مثلاً نريد عرض رسالة كلما نقرنا (Click) على الأداة Pbar1
نفتح ال Package (COMCTL_ProgCtrl_EVENTS)
نلاحظ أن الحدث Click موجود داخل ال Package كما يلي :
PROCEDURE /* Click */ EVENT4294966696(interface OleOb) ;
ما يهمنا هنا هو معرفة القيمة التي يعطيها الديفلوبر للحدث Click و هو ‘EVENT4294966696’
وبنفس الطريقة الحدث MouseDown يعطيه الديفلوبر القيمة ‘EVENT4294966691’
طيب بعدما عرفنا القيم التي يعطيها الديفلوبر للحدث
نذهب الى عنصر التحكم Pbar1 ونضيف Trigger (ON-DISPATCH-EVENT)
ونكتب داخله الكود التالي :
.
.
if :system.custom_item_event='EVENT4294966696' then
Message ('click');
.
.
اكتب اللي بدك اياه
ElsIf :system.custom_item_event='EVENT4294966691' Then
Message('Mouse Down')
.
اكتب اللي بدك اياه
end if;
ملاحظة Devloper2000(forms5) يقوم باضافة ال Trigger (ON-DISPATCH-EVENT)
تلقائياً
في النهاية أتمنى أن أكون قد أوصلت الفكرة كا ملة من حيث ادراج عناصر التحكم وضبط الخصائص واستخدام الأحداث وهذا هو كل ما في الأمر
الفرق واضح في الفيجوال بيسك الأمر سهل جداً وفي الديفلوبر معقد ومع ذلك أنا من المتحمسين (المتعصبين) للديفلوبر و ان كنت أجيد البرمجة بالفيجوال بيسك
باذن الله سوف أقوم بوضع مثال لاحقاً
لاتنسونا من صالح الدعاء
حمود الحطامي
صنعاء - اليمن
الماسنجر