воскресенье, 27 мая 2012 г.

Формы, Forms и Form в OpenOffice Base

С формами в OpenOffice Base произошла некоторая путаница. Я не ошибся в названии. Дело в том, что в процессе эволюции программного обеспечения оказалось, что Формы, Forms и Form - это немного не одно и то же. И Form - это не только Form. Поясню подробнее.

Когда Вы открываете базу данных OpenOffice Base в режиме редактирования, то видите в левой части экрана четыре закладки. В русифицированной версии это будет звучать как
  • Таблицы
  • Запросы
  • Формы
  • Отчеты
В этом смысле Форма является некоторым самостоятельным приложением, которое запускается в отдельном окне Windows. Замечу еще, что на самом деле это окно в котором запускается экземпляр OpenOffice Writer (ну и ну!)


Каждая Форма имеет коллекцию Forms объектов Form. Вначале эта коллекция пустая. Несмотря на это вы можете открывать и закрывать Форму. И даже выводить в ней текстовую информацию. И только при добавлении нового элемента управления (например кнопки Button) система создаст объект Form с именем Standard, если Вы до этого времени не создали такой объект сами.

Создавать новые формы удобнее всего из Навигатора форм, который вызывается из Главного меню View|Noolbar|Form Navigation. Объекты Form создаются или на верхнем уровне в коллекции Forms или подчиненные другому объекту Form. Это никак не отражается на внешнем виде Формы. Подчинение касается данных отображаемых в форме.

Тут надо отметить одну аномалию объект Form. Этот объект является в первую очередь объектом, связанным с таблицей базы данных или запросом SQL. Можно думать о Form как об объекте ResultSet (так оно и есть на самом деле). С другой стороны, Form является контейнером для элементов управления подобно FORM в документе HTML (и это тоже правда).

Теперь займемся программированием на OO Basic.

Откройте только что созданную Форму в режиме редактирования (правая кнопка мыши|Edit). Создайте в ней новый объект Form с именем Standatd или другим Вам понравившимся. Добавьте в этот объект элемент управления Button.

Для придания функциональности напишем макрос (скрипт) на языке OO Basic. Для этого не закрывая редактируемую Форму откроем из Главного меню Tools|Macros|Organize macros|OpenOffice.com Basic.

В раскрывшемся окне нужно выбрать место положения Вашего макроса/скрипта. В данном случае выберем расположение внутри текущей Формы (ее название можно увидеть в раскрывшемся окне).

Наконец, выбрав имя библиотеки и модуля (можно оставить по умолчанию) введем текст процедуры

Sub Button_Click(oEvent)

  oForm = ThisComponent.Drawpage.Forms.getByName("Standard")
  Xray oForm
  oForm1 = oEvent.Source.getModel().getParent()
  Xray oForm1
  
  If oForm.Name = oForm1.Name Then
    MsgBox "Is equel"
  End If

End Sub

В данной процедуре получен один и тот же объект Form двумя способами - из глобального контекста и из объекта события для кнопки Button. Код слишком очевиден, чтобы дополнительно разбирать его. Следует хорошо запомнить эти способы, они нам еще пригодятся.

Обратите внимание на вызов процедуры Xray. Для вызова этой процедуры требуется плагин/расширение, установку которого мы рассмотрели раннее. После успешной установки в окне редактора макросов/скриптов появится новая неактивная панель Xray Storm. Кликнув по панели мышью запустим процедуру окончательной установки (автозагрузки) плагина/расширения  систему. После чего строка

  Xray oForm

вызовет отладочное окно,  котором можно подробно рассматривать свойства методы и интерфейсы исследуемого объекта. Может случится, что Вам сразу не удалось установить Xray. Тогда нужно удалить/закомментировать вызовы этой процедуры и воспользоваться средствами встроенного отладчика (breakpoint, step, watch)

Теперь осталось связать процедуру с событием нажатия кнопки. Никакие соглашения об именованиях тут не действуют. В дизайнере Формы над кнопкой Button правая кнопка мыши|Control в появившемся окне выбираем закладку Events и событие When initiating, где даем привязку к процедуре Button_Click. В результате соформирутся ссылка похожая на

vnd.sun.star.script:Standard.Module1.Button_Click?language=Basic&location=document

Если скрипт не запускается, следует проверить не отключен ли он в результате слишком высокого уровня безопасности  
Главное меню|Tools||Options|OpenOffice.org|Security|Mcro Security

В данном сообщении объект Form был рассмотрен прежде всего как контейнер для элементов управления. Как объект данных ResultSet рассмотрим в следующем сообщении. Пока.



Комментариев нет: