Объявление одномерного массива и задание его начальных значений, при   //этом размер массива автоматически будет равен 4. 12 страница



Помимо большого набора программ, характерных для интегрированной Среды,- текстового и графического редактора, базы данных и т.п., Windows поддерживает обширный программный интерфейс, что позволяет создавать свои собственные программы для работы в среде Windows. Изучение этого программного интерфейса важно уже и потому, что этот интерфейс стал стандартом и поддерживается многими производителями вычислительной техники и программного обеспечения.

Одной из версий Windows является Windows XP. Буквы ХР в названии операционной системы Windows являются частью английского слова eXPerience, которое переводится как жизненный опыт, знания.

В настоящее время Windows - самая распространенная операционная система для персональных компьютеров. Среди достоинств, определяющих популярность Windows, можно выделить удобный, интуитивно понятный, графический интерфейс, параллельную работу множества программ и автоматическую настройку нового оборудования.

Под общим названием Windows объединяются несколько операционных систем, которые хотя и похожи друг на друга, но обладают различными возможностями и предназначены для разных целей. Все системы семейства Windows построены на одних и тех же принципах, и программы, написанные для Windows, работают во всех этих системах.

 

 

8 Изучение Форм и визуальных элементов управления в OpenOffice или LibreOffice.

Для дополнительной помощи при выполнении лабораторной можно обращаться по адресу: http://help.libreoffice.org/Basic/Basic_Help/ru.

8.1. Изучение msgbox

Для создания простого диалогового окна с сообщением и несколькими кнопками, можно воспользоваться функцией msgbox, которая имеет следующие парметры:

MsgBox Текст As String [,Тип As Integer [,Заголовок As String]]

или

MsgBox (Текст As String [,Тип As Integer [,Заголовок As String]])

Квадратные скобочки указывают на необязательные параметры.

Текст. Строковое выражение, отображаемое как сообщение в диалоговом окне. Переносы строк можно вставить с помощью Chr$(13).

Заголовок. Строковое выражение, отображаемое в заголовке диалогового окна. Если параметр пропущен, в строке заголовка отображается имя соответствующего приложения.

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

0 . Показать только кнопку "ОК".

1 . Показать кнопки "ОК" и "Отмена".

2 : Показать кнопки "Прервать", "Повторить" и "Пропустить".

3 . Показать кнопки "Да", "Нет" и "Отмена".

4 . Показать кнопки "Да" и "Нет".

5 . Показать кнопки "Повторить" и "Отмена".

16 . Добавить в диалоговое окно значок "Стоп", будет отображаться иконка.

32 . Добавить в диалоговое окно значок "Вопрос".

48 . Добавить в диалоговое окно значок "Восклицательный знак".

64 . Добавить в диалоговое окно значок "Сведения".

128 . Первая кнопка в диалоговом окне как кнопка по умолчанию.

256 . Вторая кнопка в диалоговом окне как кнопка по умолчанию.

512 . Третья кнопка в диалоговом окне как кнопка по умолчанию.

После 16 коды представляют собой битовые маски, например, 5+16 будет означать наличие кнопок «Повторить», «Отмена» и значка-иконки «Стоп», 1+64 — будет наличие кнопки «OK» и значка-иконки «Сведения».

Пример

Для создание макроса воспользуйтесь Сервис-Макросы-Управление Макросами-LibreOffice Basic, выберете модуль, стандартный или текущего файла, (лучше текущего файла, чтобы была привязка к конкретному файлу), выберете процедуру Main или создайте новую процедуру в окне редактора — например записав имя процедуры

Sub Main1

msgbox "Наша строка сообщения", 1+16, "Наше название окна"

End Sub

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

Функция msgbox может возвращать значение показывающее какая из кнопок была нажата.

Sub Macro3

dim val as integer

val = msgbox ("Наша строка сообщения", 3+16, "Наше название окна")

msgbox val

end Sub

Например, при нажатии кнопки OK — будет возвращено значение 1, то есть переменной val будет присвоено значение 1, кнопка отменить значение 2, кнопка Отмена — 3, кнопка Повторить — 4, кнопка Пропустить — 5, Кнопка Да — 6, Кнопка Нет — 7.

Задание. Напишите макрос, который будет на вопрос перезапустить Макрос запускать сам макрос, при ответе Нет, выходить из макроса. Использовать IF и рекурсивный вызов. Например, Macro3(). Сделать небольшой Wizard, который позволяет устанавливать какие-то свойства текста, путем последовательного вызова msgbox. Например, Wizard — Увеличить текст на пункт, поднять яркость текста, при достижении яркости 255, сбрасывать на ноль, можно использовать Ок, Повторить, Пропустить.

8.2. Создание Диалогового окна со строкой ввода.

Инструкция InputBox является удобным методом ввода текста через диалоговое окно. Подтвердите ввод, нажав кнопку "ОК" или клавишу ВВОД. Результат передается как возвращаемое значение функции. Если это диалоговое окно закрыть с помощью кнопки "Отмена", InputBox возвращает строку нулевой длины ("").

InputBox (Сообщение As String[, Заголовок As String[, По_умолчанию As String[, позиция_X As Integer, позиция_Y As Integer]]]])

Сообщение. Строковое выражение, отображаемое как сообщение в диалоговом окне.

Заголовок. Строковое выражение, отображаемое в заголовке диалогового окна.

По_умолчанию. Строковое выражение, по умолчанию отображаемое в текстовом поле, если нет других выводимых данных.

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

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

Если значения позиция_X и позиция_Y не указаны, диалоговое окно размещается в середине экрана.

dim val as String

val = inputbox ("Наша строка сообщения", "Наше название окна", "Значение для ввода по умолчанию")

msgbox val

Задание. Используя данную функцию заполнить последовательно ячейки в таблице Calc по столбцу или по строке. Первый inputbox вводит число заполняемых ячеек, предусмотрите, чтобы при нажатии кнопка отмена, можно было прервать цикл ввода. Использовать цикл While.

Создание собственного диалогового окна.

Отличие диалогового окна от Формы, в том, что пока Диалоговое окно активно и работа с ним не завершена иные функции и окна LibreOffice не доступны.

8.3. Создание диалога

Создайте новый диалог, выполнив Сервис - Макросы - Управление диалогами...Можно создать новый диалог нажав на кнопку «Новый диалог» или выбрать Dialog и нажать Правка.

На рисунке представлено окно диалога и некоторые элементы управления уже перенесенные с панели элементов управления на форму диалога. Для того, чтобы это сделать необходимо вывести панель Элементов, можно воспользоваться Меню Вид-Панели Инструментов — Элементы Управления, затем щелкнув правой кнопкой мыши на нужном элементе перейти на форму Диалога и растянуть элемент на форме.

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

basicLibraries.loadLibrary("Tools")

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

Dlg.execute()

Глобальная функция загрузки окон доступна только из модуля LibreOffice «Мои макросы», если созданный диалог прикреплен к конкретному файлу и соответственно макрос, вызывающий его, лучше воспользоваться вторым методом.

Данный метод представлеяет собой загрузку библиотеки диалогов данного файла и затем создания Диалога в соответствии с типом диалога и последующего запуска на выполнение.

DialogLibraries.LoadLibrary("Standard")

Dlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1a)

Dlg.Execute()

Dlg.Dispose()

 

CreateUnoDialog создает объект по имени Dlg, который ссылается на связанный диалог. Прежде, чем Вы можете создать диалог, Вы должны гарантировать, что библиотека, которую он использует (в этом примере, библиотека Standard) загружена. В противном случае метод LoadLibrary выполняет эту задачу.

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

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

В то время как этот диалог открыт, программа остается в запросе Execute.

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

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

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

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

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

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

Sub Macro5()

Dlg.EndExecute()

End Sub

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

 

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

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

Dim Dlg As Object

Sub MAcro4

basicLibraries.loadLibrary("Tools")

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

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 при помощи объекта модели

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, потому второй способ предлагает сначала создать стиль, а затем использовать данный стиль для изменения свойств диапазона ячеек.

 

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


Дата добавления: 2019-01-14; просмотров: 277; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!