Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИиП.pdf
Скачиваний:
747
Добавлен:
11.05.2015
Размер:
13.6 Mб
Скачать

99

Как только объект диалог Dlg проинициализировался, Вы можете использовать метод Execute для отображения диалога. Диалоги такие, как этот описываются как модальные,

потому что они не разрешают никакого другого действия программы, пока они не закрыты. В то время как этот диалог открыт, программа остается в запросе Execute.

Метод dispose в конце кода освобождает ресурсы, используемые диалогом однажды при завершении программы.

Для закрытия диалога можно воспользоваться функцией Dlg.EndExecute().

8.4. Реализация диалога с кнопкой

Например, попробуем создать событие, которое происходит при нажатии кнопки на Диалоге и закрывает Диалог, для этого откроем форму конструктора нашего диалога, выберем кнопку, щелкнем правой кнопкой мыши и выберем Свойства, появится окно, представленное ниже.

Рисунок 50 - Свойства объекта кнопка

Это все свойства объекта управления Кнопка. Можно изменить какое-либо свойство, например, визуально видимый текст на слово Выход, при этом имя самого объекта CommandButton1.

Для того, чтобы при нажатии на кнопку выполнялись какие-то действия необходимо связать с процедурой обработкой события, какую-то вашу процедуру. Для этого необходимо создать макрос в окне редактирования макросов, например,

Sub Macro5() Dlg.EndExecute() End Sub

Затем в окне свойств, выбрать вкладку События.

100

Рисунок 51 - События объекта кнопка

Выбрать нужное событие, в данном случае Выполнить действие. Затем связать назначенное действие с Макросом, макрос выбрать из списка ваши макросов.

Рисунок 52 - Назначение события для кнопки

Общий вид программы будет выглядеть следующим образом: Dim Dlg As Object

Sub MAcro4 basicLibraries.loadLibrary("Tools")

Dlg = loadDialog("Standard", "Dialog1")

101

Dlg.execute() end sub

Sub Macro5 Dlg.EndExecute() end sub

Переменная Dlg вынесена за пределы обеих процедур и является глобальной, чтобы обе процедуры могли ею пользоваться, после того как сработает макрос 4, переменная dlg будет ссылаться на созданный диалог, и потому при срабатывании события и вызове макроса 5, данный диалог будет закрыт.

Для получения доступа к объекту можно воспользоваться функцией getControl, в качестве аргумента указывая имя объекта.

Dim Ctl As Object

Ctl = Dlg.getControl("MyButton") Ctl.Label = "Новая надпись"

Если не хочется заводить еще одну переменную можно задавать свойства объекта таким образом:

Dlg.getControl("TextField1").Text = "строка по умолчанию ". TextField1 — объект для ввода строки текста.

Весь макрос: Sub Mаcro4

basicLibraries.loadLibrary("Tools")

Dlg = loadDialog("Standard", "Dialog1") Dlg.getControl("TextField1").Text = "Hello World " Dlg.execute()

end sub

8.5. Модель объекта

Модель объектов управления UNO представляет собой реализацию паттерна проектирования Модель-Вид-Контроллер, когда реализация визуального представления объекта отделена от данных и управления этим объектом, это позволяет при проектировании легко изменять визуальный вид объекта, не затрагивая его внутреннее модельное представление или данные, которые связаны с данным объектом (чтобы бизнес логика приложения минимально зависела от визуализации и взаимодействия и наоборот). Обычно используется для создания приложений, где присутствует интерфейс взаимодействия пользователя с некой системой. Например, можно изменить принцип реакции на изменение данных в системе или способы изменения этих данных, используя совершенно другие виды интерфейса, при этом нет необходимости как-либо затрагиваться модельный уровень.

Разделение между видимыми элементами программы (Вид) и данными или документами позади них (Модель) происходит во многих местах в OpenOffice.org API. В дополнение к методам и свойствам элементов управления, и диалог и объекты элементов управления имеют подчиненный объект Model. Этот объект позволяет Вам получить непосредственный доступ к содержимому диалога или элемента управления.

В диалогах, различие между данными и описанием не всегда столь же ясно как в других областях LibreOffice API. Элементы API доступны и через Вид и через Модель.

Свойство Model обеспечивает программно-управляемый доступ к модели диалога и объектам элементов управления.

Dim cmdNext As Object

cmdNext = Dlg.getControl("cmdNext") cmdNext.Model.Enabled = False

Этот пример отключает кнопку cmdNext в диалоге Dlg при помощи объекта модели

102

cmdNext.

Имя и заголовок Каждый элемент управления имеет свое собственное имя, которое может быть

запрошено с использованием следующего свойства модели:

• Model.Name (String) – имя элемента управления.

Вы можете определить заголовок, который появляется в заголовке диалога через следующее

свойство модели:

Model.Title (String) – заголовок диалога (применяется только к диалогам). Положение и Размер Вы можете запросить размер и положение элемента управления, используя следующие

свойства объекта модель:

Model.Height (long) – высота элемента управления (в единицах ma);

Model.Width (long) – ширина элемента управления (в единицах ma);

Model.PositionX (long) – координата X элемента управления, измеренная от левого внутреннего края диалога (в единицах ma);

Model.PositionY (long) – координата Y элемента управления, измеренная от верхнего внутреннего края диалога (в единицах ma).

Чтобы гарантировать независимость от платформы для внешнего вида диалогов,

LibreOffice использует внутренную единицу Map AppFont (ma) для определения положения и размера в пределах диалогов. Единица ma определена как одна восьмая средней высоты символа системного шрифта, определенного операционной системой и одной четверти его ширины. При использовании единицы ma, OpenOffice.org гарантирует, что диалог выглядит одинаково на различных системах при различных параметрах настройки системы.

Если Вы хотите изменить размер или положение элементов управления во время выполнения, определите полный размер диалога и регулируйте значения для элементов управления в соответствующем отношении частей.

Пример использование Model: сделать объект недоступным. Dlg.getControl("TextField1").Model.Enabled = false

8.6. Изучение Форм и элементов управления

Формы в отличие от диалога создаются непосредственно в документах LibreOffice, то есть на листах Calc или документах Writer. При этом пользователю для управления доступны все возможности открытого документа, тогда как в случает диалога пока он не закроется, для пользователя эти возможности не доступны.

Изучим отдельно каждый из элементов управления на примере работы с LibreOffice Calc, для этого откроем рабочий лист Calc и выберем Вид-Панели Инструментов-Элементы управления. Значок Линейка на элементах управления позволяет переходить из режима конструктора, когда можно задавать свойства объекта и в режим исполнения, когда объект реагирует на внешние события. Щелкнем на объекте Button(Кнопка) и вытащим его на лист calc, для этого нужно щелкнуть на поле листа и начать растягивание объекта. В режиме конструктора выберем правой кнопкой мыши во всплывающем меню Элемент управления, назовем как-нибудь кнопку и зададим нужные нам свойства и перейдем к вкладке события. Повторим действия как при создании события кнопки диалога. Создадим макрос и назначим его в качестве события.

Теперь необходимо во вновь созданный макрос записать следующую последовательность действий для изменения свойств листов Calc.

Ниже написанный макрос может некорректно работать для различных версий LibreOffice, потому второй способ предлагает сначала создать стиль, а затем использовать данный стиль для изменения свойств диапазона ячеек.

103

Sub Macro6

Dim Doc,Sheet,Range as Object Dim n as integer

'получаем ссылку на текущий открытый документ Doc = StarDesktop.CurrentComponent

'получаем число листов в документе n = Doc.Sheets.Count

'объект для задания свойств линий границ

Dim aLineBorder as new com.sun.star.table.BorderLine 'объект для задания свойств границ

Dim Border as new com.sun.star.table.TableBorder 'цвет линии

aLineBorder.Color = 0 'внутренняя тощина линии aLineBorder.InnerLineWidth = 0 'внешняя толщина линии aLineBorder.OuterLineWidth = 50 aLineBorder.LineDistance = 0

'установка что все линии рамок видимы Border.IsTopLineValid = true Border.IsBottomLineValid = true Border.IsLeftLineValid = true Border.IsRightLineValid = true Border.IsHorizontalLineValid = true Border.IsVerticalLineValid = true

'задание свойств верхней, нижней, правой и левой линии, внутренней вертикальной и горизонтальной

Border.TopLine = aLineBorder Border.BottomLine = aLineBorder Border.LeftLine = aLineBorder Border.RightLine = aLineBorder Border.HorizontalLine = aLineBorder Border.VerticalLine = aLineBorder 'цикл по листам

for i=0 to n-1

'получаем лист под номером i Sheet = Doc.Sheets(i)

'берем диапазон ячеек

Range = Sheet.getCellRangeByName("A1:Z100") 'задаем свойство прозрачности фона Range.IsCellBackgroundTransparent = true 'задаем цвет ячеек листа

Range.CellBackColor = RGB(i*50,(i+2)*50,i*20) 'задаем свойства границ

Range.TableBorder = Border 'Выравнивание по горизонтали влево

Range.HoriJustify = com.sun.star.table.CellHoriJustify.LEFT 'Выравнивание по вертикали по верху

Range.VertJustify = com.sun.star.table.CellVertJustify.TOP 'расположение текста по буквам сверху вниз, символы горизонтальные Range.Orientation = com.sun.star.table.CellOrientation.STACKED

next i

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]