Деякі властивості та методи елементів керування.

Щодо використання властивостей та методів елементів керування, то в літературі з програмування на OOo Basic, зазвичай, можна зустріти доволі заплутану розповідь про сервіси та інтерфейси, які підтримує той чи інший елемент. Далі наводиться майже повний список властивостей та методів кожного із згаданих сервісів та інтерфейсів. Такий підхід відлякує не тільки початківців, а навіть досвідчених VBA-програмістів. Насправді, для створення макросів, як допоміжного інструментарію користувача OpenOffice (LibreOffice), достатньо вікон діалогу з простою функціональністю, в яких:

  • більшість властивостей, зокрема, ті, що відповідають за візуальну модель елемента керування, задаються на етапі проектування діалога і не потребують програмного втручання з коду макроса;
  • коди макросів звертаються лише до однієї — двох властивостей (чи відповдних їм методів) елемента керування з метою отримання введених користувачем даних.

При програмному звертанні до елементів керування слід враховувати ще одну особливість OpenOffice.org Basic — певний компроміс між приципами об’єктно-орієнтованого програмування та простотою написання коду макросів. З оного боку, в OOo Basic підтримується принцип інкапсуляції, згідно якого читання чи запис властивості може здійснюватися лише відповідними методами об’єкта. Назви усіх методів, що дозволяють отримати значення властивості починаються з префікса get, а методи, що присвоюють значення властивості – з префікса set. З ішного боку, в OOo Basic дозволяється пряме звертання до властивостей об’єкта з використанням оператора присвоєння, притаманне для VBA. Так, наприклад, інструкції
MyDlg.GetControl(“CommandButton1″).setLabel(“StarBasic”)
та
MyDlg.GetControl(“CommandButton1″).Label = “StarBasic”
виконуватимуть одну і ту ж дію — встановлення напису “StarBasic” на кнопку CommandButton1, розташовану на урухомленому діалозі MyDlg.

Наведений вище приклад демонструє програмне звертання до властивості “Напис” елемента керування Кнопка, яка, зазвичай, встановлюється статично, на етапі проектування діалога, і тому продемонстровані інструкції в макросах зустрічаються не так вже й часто. Частіше зустрічається програмне звертання до таких властивостей:

Text – текст записаний в елементі керування. Підтримується об’єктами TextField (Текстове поле) та його різновидами – Числове поле, Поле дати, тощо, Label (Підпис), ComboBox (Поле зі списком), FileControl (Вибір файлу). Допускає як прямий доступ через оператор присвоєння, так і з використанням методів getText() та setText(), наприклад:


MyDlg.getControl(“Label1″).setText(MyDlg.getControl(“FileControl1″).getText())
MsgBox “Файл: ” & MyDlg.getControl(“Label1″).Text

State – результат користувачем вибору перемикачів та прапорців. Може набувати значень 0 (не встановлений) і 1 (встановлений) а також 2 (не визначено), за умови дозволу трьох станів. Підтримується об’єктами CheckBox (Прапорець) та OptionButton (Перемикач). Допускає як прямий доступ через оператор присвоєння, так і з використанням методів getState() та setState(), наприклад:

h = MyDlg.GetControl(“CheckBox1″).GetState()
If h = 1 Then
MsgBox “Дозволено”
Else
MsgBox “Заборонено”
End If

Enabled – властивість, що дозволяє/забороняє користувачеві змінювати елемент керування, набуває значень True або False. Підтримується більшістю елементів керування. Властивість належить до моделі елемента керування, тому для її зміни необхідне звертання до відповідного сервісу з використанням методу GetModel, наприклад, наступна інструкція забороняє ввід тексту у текстове поле TextField1:

MyDlg.GetControl(“TextField1″).GetModel.Enabled = False

Кожен з елементів керування має свій набір властивостей та методів, обумовлений його конструкцією та призначенням. Наприклад, списки ComboBox та ListBox мають спільні методи addItem, addItems, removeItems для додавання та вилучення елементів списку. І в той час, як вибраний елемент зі списку ComboBox можна отримати з допомогою властивості Text, для визначення вибраного елемента списку ListBox доводиться застосовувати методи getSelectedItem та getSelectedItems. Наприклад

For Each i in MyDlg.getControl(“ListBox1″).getSelectedItems()
MsgBox i
Next i

Використання методів для заповнення списків часто можна обійти за рахунок заповнення списку на етапі проектування. Для цього у вікні властивостей елемента ComboBox чи ListBox заповнюють поле “Елементи списку”, завершуючи набір кожного елемента натисканням клавіш Shift+Enter. Зрозуміло, що згаданих тут властивостей та методів достатньо лише для створення нескладних діалогів, проте їх може бути цілком достатньо для візуалізації роботи макросів в межах потреб більшості користувачів OpenOffice (LibreOffice).