اذهب إلى المحتوى

سنوضَح في هذا المقال كيفية إضافة عناصر التحكم بمربع الحوار Dialog في ليبر أوفيس كالك LibreOffice Calc والتعامل مع عناصر التحكم المختلفة في نموذج باستخدام الماكرو Macro.

هذا المقال جزء من سلسلة مقالات حول إنشاء ماكرو في ليبر أوفيس كالك، فهرس السلسلة:

التعامل مع عناصر التحكم بمربع الحوار باستخدام الماكرو

سنوضّح كيفية إنشاء مربع حوار Dialog في ليبر أوفيس LibreOffice وإضافة عناصر تحكم متنوعة إليه مثل مربع النص TextBox وقراءة قيم عناصر التحكم باستخدام الماكرو.

إضافة مربع حوار

يمكنك إضافة مربع حوار في ليبر أوفيس كالك من قائمة أدوات Tools ثم ماكرو Macros ثم تنظيم المربعات الحوارية Organize Dialogs.

01_CreateDialogFromMenu.png

إنشاء مربع حوار من القائمة

ستفتح بعد ذلك نافذة منظم الماكروهات الأساسية Basic Macro Organizer الموضَحة أدناه. انقر على زر جديد New في تبويب "الحواريات Dialogs".

02_Create-a-New-Dialog.png

إنشاء مربع حوار جديد

سمِّ مربع الحوار في نافذة حواري جديد New Dialog المنبثقة. استخدم الاسم الافتراضي Dialog1، ثم اضغط موافق OK.

03_NewDialog.png

مربع حوار جديد

يمكنك رؤية مربع الحوار Dialog1 ضمن حواراتي My Dialogs ثم Standard ثم Dialog1.

إضافة عنصر التحكم بمربع نص TextBox

انقر على تحرير Edit مع تحديد Dialog1 في نافذة منظم الماكروهات الأساسية.

04_EditDialog.png

تحرير مربع الحوار

سيفتح محرّر مربع الحوار، ثم يجب إضافة بعض عناصر التحكم، حيث سنضيف مربع نص وزر.

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

يجب أن يبدو مربع الحوار كما يلي:

05_TheDialog.png

يمكنك ضبط خصائص كل عنصر تحكم من خلال تحديده، ثم يمكنك مشاهدة نافذة الخصائص المفتوحة في الجانب السفلي الأيمن من المحرّر، حيث تُستخدَم قيمة "الاسم name" في تبويب "عام General" لتحديد الكائنات ضمن الماكرو. اسم مربع النص الافتراضي هو TextField1، بينما اسم الزر الافتراضي هو CommandButton1.

06_DialogWithProperties.png

أصبح مربع الحوار جاهزًا، إذًا لنكتب الماكرو.

شيفرة الماكرو

سنعرض كيفية فتح مربع الحوار باستخدام ماكرو ليبر أوفيس كالك، وقراءة محتويات مربع النص ومحتوى خلية من الورقة 1، ثم سنعرض محتوى مربع النص ومحتويات الخلية في مربع رسالة بعد النقر على الزر.

انتقل إلى محرّر الماكرو (انقر على تبويب Module1) وأنشئ دالتين على النحو التالي:

Dim oDialog1 As Object

Sub StartDialog1()
    ' Code for initiating and showing the dialog
End Sub

Sub readDialog1()
    ' Read the content 
End Sub

عرّف كائن oDialog1 على أنه نوع كائن خارج نطاق الدوال، لأننا نحتاج إلى الوصول إلى مربع الحوار Dialog في دالة مختلفة.

سنحمّل مكتبة الأدوات Tools في الدالة StartDialog1()‎. تُنفَّذ المكتبات كواجهات UNO وليس كخدمات UNO وفقًا لتصميم ليبر أوفيس وأوبن أوفيس الحالي، ولا تُحمَّل جميع المكتبات الأساسية عند بدء تشغيل ليبر أوفيس / أوبن أوفيس لتوفير الوقت. إذا أنشأت مكتبتك الخاصة مثل Library1، فيجب تحميل المكتبة صراحةً لتحديد الدوال التي يعرّفها المستخدم، حيث يمكنك استخدام الخصائص المبنية مسبقًا BasicLibraries.LoadLibrary لتحميل أيّ مكتبة.

سنستخدم مكتبة ليبر أوفيس / أوبن أوفيس المُعرَّفة مسبقًا "Tools" مع الشيفرة الآتية، حيث ستحمِّل الخاصية LoadLibrary مكتبة الأدوات "Tools" ثم سنعرض مربع الحوار المُنشَأ باستخدام الدالة LoadDialog()‎ والدالة Execute()‎.

Sub StartDialog1()
    BasicLibraries.LoadLibrary("Tools")
    oDialog1 = LoadDialog("Standard", "Dialog1")
    oDialog1.Execute()
End Sub

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

   DialogLibraries.LoadLibrary("Standard")
   oDialog = CreateUnoDialog(DialogLibraries.Standard.Dialog1)

سنقرأ الآن محتوى مربع نص TextBox ومحتوى الخلية الأولى من الورقة 1 في كالك أي الخلية A1. للحصول على عنصر تحكم. استخدم الدالة (اسم عنصر التحكم) GetControl الخاصة بكائن مربع الحوار، ثم يمكنك استخدام الخاصيات المتاحة المتعددة، مثل استخدام خاصية النص Text()‎ الخاصة بعنصر التحكم لإدخال نص في مربع نص Textbox.

Sub readDialog1()
    Dim cell_val
    oT1 = oDialog1.GetControl("TextField1")
    cell_val = ThisComponent.Sheets(0).getCellByPosition(0,0)
    msgbox cell_val.String & chr(13) & "Value from controls: "  & oT1.Text
End Sub

يجب إسناد الدالة readDialog1()‎ إلى حدث النقر على الزر قبل تشغيل الماكرو من خلال الرجوع إلى محرّر مربع الحوار وتحديد الزر، ثم حدّد تبويب الأحداث Events في نافذة الخاصيات. أسنِد الدالة readDialog1()‎ من خلال النقر على زر "تنفيذ إجراء Execute Action" واختيار الماكرو.

تشغيل الماكرو

ضع أيّ نص في الخلية A1 في ورقة كالك وضع النص "Hello World". افتح محرّر الماكرو وشغّل الدالة StartDialog1()‎ بحيث يُنفَّذ مربع الحوار، ثم ضع نصًا في مربع النص وانقر على الزر. يجب أن تشاهد النص الموجود في مربع النص من مربع الحوار وكذلك النص الموجود في الخلية A1 من الورقة 1.

07_RunningTheMacro.png

تشغيل الماكرو

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

شيفرة الماكرو الكاملة

انسخ والصق الشيفرة التالية في محرّر الماكرو في ليبر أوفيس:

Dim oDialog1 As Object

Sub StartDialog1()
    BasicLibraries.LoadLibrary("Tools")
    oDialog1 = LoadDialog("Standard", "Dialog1")
    oDialog1.Execute()
End Sub

Sub readDialog1()
    Dim cell_val
    oT1 = oDialog1.GetControl("TextField1")
    cell_val = ThisComponent.Sheets(0).getCellByPosition(0,0)
    msgbox cell_val.String & chr(13) & "Value from controls: "  & oT1.Text
End Sub

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

سنشرح فيما يلي كيفية الوصول إلى قيم عناصر تحكم حقل التسمية Label وخانة الاختيار Check Box وزر الخيار Option Box ومربع التحرير والسرد Combo Box ومربع القائمة List Box، وكيفية التعرف على القيم التي يحدّدها المستخدم في عناصر التحكم هذه.

افتح برنامج ليبر أوفيس وأنشئ مربع حوار، ثم أضِف حقل تسمية وثلاث خانات اختيار وزرَّي خيار ومربع قائمة واحد ومربع تحرير وسرد واحد وزر. يمكن إضافة كل عناصر التحكم هذه من مربع الأدوات ToolBox، حيث يمكنك الوصول إليه من قائمة عرض View ثم أشرطة الأدوات Toolbars ثم مربع الأدوات ToolBox.

08_ToolboxInLibreOffice.png

مربع الأدوات في ليبر أوفيس

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

09_DesignedForm.png

مربع الاختيار Checkbox

مربعات الاختيار هي وسيلة ليختار المستخدم من بين خيارات متعددة. يمكن معرفة ما إذا كان مربع الاختيار محددًا أم لا من خلال استخدام الدالة getState. إذا كان مربع الاختيار محدَّدًا، فستعيد الدالة القيمة 1، وإلّا فستعيد القيمة 0. يمكنك تغيير النص المعروض بجانب كل خانة اختيار أثناء التصميم باستخدام حقل "التسمية Label" في تبويب عام من نافذة الخصائص.

    chkBox1 = oDialog1.GetControl("CheckBox1")
    chkBox2 = oDialog1.GetControl("CheckBox2")
    chkBox3 = oDialog1.GetControl("CheckBox3")

    if chkBox1.State = 1 then
        oCell = ThisComponent.Sheets(0).getCellByPosition(1,1) 
        oCell.String = "Debian"
    end if

    if chkBox2.State = 1 then
        oCell = ThisComponent.Sheets(0).getCellByPosition(1,2) 
        oCell.String = "Ubuntu"
    end if

    if chkBox3.State = 1 then
        oCell = ThisComponent.Sheets(0).getCellByPosition(1,3) 
        oCell.String = "elementary"
    end if

مربع القائمة List Box ومربع التحرير والسرد Combo box

يمنح مربع القائمة List Box ومربع التحرير والسرد Combo Box المستخدم القدرة على الاختيار من قائمة العناصر، ولكن الفرق الوحيد بينهما هو طريقة عرض العناصر، حيث يحتوي مربع التحرير والسرد على قائمة منسدلة بينما يحتوي مربع القائمة على قائمة بالعناصر المعروضة.

استخدم الدالة getSelectedItem()‎ للحصول على تحديد مربع القائمة، واستخدم الدالة SelectedText()‎ للحصول على العنصر المحدد من مربع التحرير والسرد.

استخدم الدالة addItem(,)‎ أثناء تحميل النموذج لأول مرة لملء مربع القائمة ومربع التحرير السرد مسبقًا.

   lstBox1 = oDialog1.GetControl("ListBox1")
    if lstBox1.getItemCount = 0 then
        lstBox1.addItem("Mango",1)
        lstBox1.addItem("Apple",2)
        lstBox1.addItem("Orange",3)
    end if

    cmbBox1 = oDialog1.GetControl("ComboBox1")
    if cmbBox1.getItemCount = 0 then
        cmbBox1.addItem("500",1)
        cmbBox1.addItem("1000",2)
        cmbBox1.addItem("10000",3)
    end if

    oCell = ThisComponent.Sheets(0).getCellByPosition(1,5) 
    oCell.String = lstBox1.getSelectedItem()                

    oCell = ThisComponent.Sheets(0).getCellByPosition(1,6) 
    oCell.String = cmbBox1.SelectedText()   

زر الخيار Option Box

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

تعيد الخاصية State()‎ الخاصة بزر الخيار القيمة True إذا كان الخيار محدَّدًا، وإلا فإنها تعيد القيمة False.

    if optBtn1.State = True then
        oCell = ThisComponent.Sheets(0).getCellByPosition(1,7) 
        oCell.String = "No"
    end if

    if optBtn2.State = True then
        oCell = ThisComponent.Sheets(0).getCellByPosition(1,8) 
        oCell.String = "Yes"
    end if

تشغيل شيفرة الماكرو

سنعرض القيم التي اختارها المستخدم في نموذج كالك بعد اكتمال تصميمه، ثم نشغّل الدالة StartDialog1()‎ لتنفيذ النموذج. حدّد بعض الخيارات من المكونات الموجودة في النموذج وانقر على الزر وانتقل إلى ليبر أوفيس كالك المفتوح، ثم يمكنك أن ترى أن القيم قد قُرأت ووُضِعت في خلايا كالك.

10_FormWithValuesSelected.png

النموذج مع تحديد القيم

11_Output.png

الخرج

شيفرة الماكرو الكاملة

انسخ والصق الشيفرة التالية في محرّر الماكرو في ليبر أوفيس:

Dim oDialog1 As Object

Sub StartDialog1()
    BasicLibraries.LoadLibrary("Tools")
    oDialog1 = LoadDialog("Standard", "Dialog1")

    lstBox1 = oDialog1.GetControl("ListBox1")
    if lstBox1.getItemCount = 0 then
        lstBox1.addItem("Mango",1)
        lstBox1.addItem("Apple",2)
        lstBox1.addItem("Orange",3)
    end if

    cmbBox1 = oDialog1.GetControl("ComboBox1")
    if cmbBox1.getItemCount = 0 then
        cmbBox1.addItem("500",1)
        cmbBox1.addItem("1000",2)
        cmbBox1.addItem("10000",3)
    end if

    oDialog1.Execute()

End Sub

Sub readDialog1()
    Dim oCell
    chkBox1 = oDialog1.GetControl("CheckBox1")
    chkBox2 = oDialog1.GetControl("CheckBox2")
    chkBox3 = oDialog1.GetControl("CheckBox3")

    optBtn1 = oDialog1.GetControl("OptionButton1")
    optBtn2 = oDialog1.GetControl("OptionButton2")

    lstBox1 = oDialog1.GetControl("ListBox1")

    cmbBox1 = oDialog1.GetControl("ComboBox1")

    if chkBox1.State = 1 then
        oCell = ThisComponent.Sheets(0).getCellByPosition(1,1) 
        oCell.String = "Debian"
    end if

    if chkBox2.State = 1 then
        oCell = ThisComponent.Sheets(0).getCellByPosition(1,2) 
        oCell.String = "Ubuntu"
    end if

    if chkBox3.State = 1 then
        oCell = ThisComponent.Sheets(0).getCellByPosition(1,3) 
        oCell.String = "elementary"
    end if

    oCell = ThisComponent.Sheets(0).getCellByPosition(1,5) 
    oCell.String = lstBox1.getSelectedItem()                

    oCell = ThisComponent.Sheets(0).getCellByPosition(1,6) 
    oCell.String = cmbBox1.SelectedText()           

    if optBtn1.State = True then
        oCell = ThisComponent.Sheets(0).getCellByPosition(1,7) 
        oCell.String = "No"
    end if

    if optBtn2.State = True then
        oCell = ThisComponent.Sheets(0).getCellByPosition(1,8) 
        oCell.String = "Yes"
    end if

End Sub

ترجمة -وبتصرُّف- للمقالين Working with Dialog Controls in LibreOffice Calc using Macro – Part 1 و Form Processing with LibreOffice Calc Macro – Part 2 لصاحبهما Arindam.

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...