Урухомлення діалогу та завершення його роботи.

Для тих, хто мав справу зі створенням діалогових вікон у середовищі Microsoft Office спосіб запуску діалогів OOo Basic видається складним незвичним. Справа в тому, навіть команда запуску макроса у редакторі має назву “Run Sub/UserForm”, тобто запуск діалогового вікна на виконання є чимось само собою зрозумілим. Ця “перевага” VBA, звичайно, зручна на етапі проектування, програмування та налагодження проектів, але в готовому до використанні проекті, очевидно, вікна діалогу все одно повинні викликатися програмно з коду макросів.

В OOo Basic таких “надзручностей” не пердбачено – все за правалами об’єктно-орієнтованого програмування: на основі створеного візуального шаблону (класу) діалога потрібно згенерувати його екземпляр (об’єкт), а потім його “оживити” (запустити на виконання). Першу дію забезпечує оголошення нового об’єкта та функція CreateUnoDialog яка за заданим шаблоном діалога породжує і повертає діалог-об’єкт, другу — метод execute об’єкта Dialog. Найпростіша процедура виклику діалогу з іменем Dialog1 із бібліотеки Standard може виглядати так:
Dim MyDlg As Object
Sub RunDialog
MyDlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
MyDlg.execute()
End Sub

тут MyDlg — ім’я (Name) створеного діалога-об’єкта за яким до нього можна звертатися із коду макросів.

порожній діалогЯкщо діалог Dialog1 у бібліотеці Standard був лише створений без розміщення на ньому елементів керування, то процедура буде виводити на екран порожню форму діалогового вікна.

Якщо ж на діалозі у вікні редагування були розміщені елементи керування, то буде виводитися вікно з цими елементами, проте вони не будуть виконувати жодних дій, доки їм не призначено макросів — обробників подій.

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

Шаблон діалогу містить смугу заголовку із кнопкою закриття вікна, тому закрити активний діалог, у більшості випадків, доволі просто і на перший погляд немає потреби у написанні для цього спеціального макроса. Проте, наприклад, при переході до наступного діалогу попередній діалог доводиться закривати програмно. Для цього викликають метод endExecute діалога-об’єкта:
Sub EndDialog
MyDlg.endExecute()
End Sub

Процедура завершує роботу діалога MyDlg створеного і урухомленого процедурою RunDialog. Для того, щоб процедура EndDialog мала доступ до діалога його, як об’єкт, оголошено на рівні модуля за межами процедури RunDialog.