سنوضَح في هذا المقال كيفية إضافة عناصر التحكم بمربع الحوار Dialog في ليبر أوفيس كالك LibreOffice Calc والتعامل مع عناصر التحكم المختلفة في نموذج باستخدام الماكرو Macro.
هذا المقال جزء من سلسلة مقالات حول إنشاء ماكرو في ليبر أوفيس كالك، فهرس السلسلة:
- مدخل إلى كتابة ماكرو Macro في ليبر أوفيس كالك LibreOffice Calc.
- معالجة محتويات خلايا ليبر أوفيس كالك باستخدام الماكرو.
- معالجة مجال من الخلايا باستخدام الماكرو في ليبر أوفيس كالك.
- استخدام عناصر التحكم بالنماذج ونافذة فتح الملفات من خلال الماكرو في ليبر أوفيس.
- التعامل مع عناصر التحكم بمربع الحوار ومعالجة النماذج باستخدام الماكرو في ليبر أوفيس كالك.
- أتمتة حفظ أوراق ليبر أوفيس كالك بتنسيق PDF باستعمال الماكرو.
التعامل مع عناصر التحكم بمربع الحوار باستخدام الماكرو
سنوضّح كيفية إنشاء مربع حوار Dialog في ليبر أوفيس LibreOffice وإضافة عناصر تحكم متنوعة إليه مثل مربع النص TextBox وقراءة قيم عناصر التحكم باستخدام الماكرو.
إضافة مربع حوار
يمكنك إضافة مربع حوار في ليبر أوفيس كالك من قائمة أدوات Tools ثم ماكرو Macros ثم تنظيم المربعات الحوارية Organize Dialogs.
إنشاء مربع حوار من القائمة
ستفتح بعد ذلك نافذة منظم الماكروهات الأساسية Basic Macro Organizer الموضَحة أدناه. انقر على زر جديد New في تبويب "الحواريات Dialogs".
إنشاء مربع حوار جديد
سمِّ مربع الحوار في نافذة حواري جديد New Dialog المنبثقة. استخدم الاسم الافتراضي Dialog1، ثم اضغط موافق OK.
مربع حوار جديد
يمكنك رؤية مربع الحوار Dialog1 ضمن حواراتي My Dialogs ثم Standard ثم Dialog1.
إضافة عنصر التحكم بمربع نص TextBox
انقر على تحرير Edit مع تحديد Dialog1 في نافذة منظم الماكروهات الأساسية.
تحرير مربع الحوار
سيفتح محرّر مربع الحوار، ثم يجب إضافة بعض عناصر التحكم، حيث سنضيف مربع نص وزر.
تُوضَع عناصر التحكم في الجزء السفلي من الشاشة. حدد عنصر تحكم واسحب الفأرة إلى داخل مربع الحوار لوضع عنصر التحكم المطلوب ضمنه. إذا كنت غير قادر على رؤية مربع الأدوات أسفل الشاشة، فانتقل إلى قائمة عرض View ثم أشرطة الأدوات Toolbars ثم مربع الأدوات Toolbox.
يجب أن يبدو مربع الحوار كما يلي:
يمكنك ضبط خصائص كل عنصر تحكم من خلال تحديده، ثم يمكنك مشاهدة نافذة الخصائص المفتوحة في الجانب السفلي الأيمن من المحرّر، حيث تُستخدَم قيمة "الاسم name" في تبويب "عام General" لتحديد الكائنات ضمن الماكرو. اسم مربع النص الافتراضي هو TextField1، بينما اسم الزر الافتراضي هو CommandButton1.
أصبح مربع الحوار جاهزًا، إذًا لنكتب الماكرو.
شيفرة الماكرو
سنعرض كيفية فتح مربع الحوار باستخدام ماكرو ليبر أوفيس كالك، وقراءة محتويات مربع النص ومحتوى خلية من الورقة 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.
تشغيل الماكرو
يمكنك العمل بهذه الطريقة مع مربعات الحوار وعناصر التحكم باستخدام الماكرو في ليبر أوفيس / أوبن أوفيس.
شيفرة الماكرو الكاملة
انسخ والصق الشيفرة التالية في محرّر الماكرو في ليبر أوفيس:
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.
مربع الأدوات في ليبر أوفيس
حدّد عناصر التحكم بعد إضافتها واسحبها ضمن النموذج حسب الحاجة. كما يمكن الوصول إلى القيم أو الخيارات المحددة في عناصر التحكم هذه ووضعها في خلايا كالك.
مربع الاختيار 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()
لتنفيذ النموذج. حدّد بعض الخيارات من المكونات الموجودة في النموذج وانقر على الزر وانتقل إلى ليبر أوفيس كالك المفتوح، ثم يمكنك أن ترى أن القيم قد قُرأت ووُضِعت في خلايا كالك.
النموذج مع تحديد القيم
الخرج
شيفرة الماكرو الكاملة
انسخ والصق الشيفرة التالية في محرّر الماكرو في ليبر أوفيس:
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.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.