Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
срв.doc
Скачиваний:
32
Добавлен:
26.04.2019
Размер:
1.71 Mб
Скачать

10. Назначение vba-скриптов Genesis32. Классы доступа к элементам экранной формы. Основные этапы создания vba-скрипта.

Написание сценариев на языке VBA

Genesis32 поддерживает VBA. На языке VBA можно написать сценарии, которые повышают функциональность проекта. Вызов редактора VBA осуществляется путем выполнения команды Сервис/Макрос/Редактор VBA. Тогда на экране появляется окно редактора VBA. Основными элементами этого окна являются окно проекта и окно ввода кода. Окно проекта содержит список форм и модулей, входящих в текущий открытый проект.

В GraphWorx32 модули и формы проекта хранятся вместе с объектами GraphWorx32 в одном и том же файле с расширением .gdf (genesis display file).

Только что открытый редактор VBA содержит модуль ThisDisplay. Модуль ThisDisplay является специальным модулем, который представляет текущую загруженную экранную форму GraphWorx32. С точки зрения ООП ThisDisplay является объектом класса экранной формы. Через этот объект можно иметь доступ ко всем объектам экранной формы и соответственно свойствам этих объектов.

Иерархия объектов экранной формы

Все графические объекты, установленные в экранную форму принадлежат некоторому классу: классу прямоугольник, эллипс, линия и т.п. В Genesis эти классы обозначаются следующим образом: GwxRectangle, GwxEllipse и т.д.

Динамические действия графических объектов также являются объектами некоторых классов. Например, изменение размера – объект класса GwxSize, изменение положения – объект класса GwxLocation и т.д.

Доступ к графическим объектам экранной формы

Для доступа к объектам объект ThisDisplay имеет 4 метода:

1. Функция ThisDisplay.GetVisibleObjectFromName(“Имя”)

Возвращает ссылку на графический объект связанный с именем. Это имя определяется в окне Инспектора свойств ( поле Имя объекта)

Пример: Получим ссылку на объект с именем Rect и изменим его угол поворота

Dim obj As GwxRectangle ‘тип объекта – прямоугольник

Set obj = ThisDisplay.GetVisibleObjectFromName(“Rect”)

obj.Angle = 45

2. Функция ThisDisplay.GetVisibleObject From Index(…)

Кроме имени каждый графический объект экранной формы имеет индекс. Самый первый объект, который был размещен в рабочей области получает индекс «0», последующие объекты - индексы 1, 2, и т.д.

Функция ThisDisplay.GetVisibleObject From Index(…) возвращает объект экранной формы по индексу объекта. Эта функция удобна при последовательном выполнении операций над всеми объектами.

3. Функция Имя_Символа.GetVisibleObjectFromIndex ( …)

Каждый символ GraphWorx32 имеет собственный список индексов всех графических объектов, из которых сгруппирован данный символ. Если получили ссылку на этот символ, то метод Имя_Символа.GetVisibleObjectFromIndex() возвращает ссылку на графический объект внутри символа по данному индексу. Данная функция удобна при последовательном выполнении операций над графическими объектами, из которых сгруппирован символ.

4. Функция Имя_Символа.GetVisibleObjectFromName(“Имя”)

К графическим объектам внутри символа можно иметь доступ и по его имени объекта. Функция Имя_Символа.GetVisibleObjectFromName(“Имя”) возвращает объект внутри символа по данному имени.

Доступ к динамическим объектам экранной формы

VBA имеет 3 способа доступа к динамическим объектам:

1. Функция ThisDisplay.GetObjectFromName(“Имя”) возвращает ссылку на динамический объект по указанному имени объекта.

Пример: Получаем доступ к динамическому объекту “Hide” и устанавливаем значение – «0», т.е. объект связанный с этим объектом будет не видимым.

Dim obj As GwxHide ‘ тип объекта

Set obj = ThisDisplay.GetDinamicObjectFromName(“Hide”)

obj.dataSource = 0

2. Функция Имя_символа.GetDynamicObjectFromIndex(1)

Каждый графический объект может иметь несколько динамических действий. Например, прямоугольник может изменять размеры и положение. Каждому действию присваивается индекс. Самое первое динамическое действие имеет индекс 0. Использование индекса позволяет последовательно изменить параметры динамических действий.

3. Функция Имя_Графич_Объекта.GetDynamicObjectFromName(“Имя”)

К динамическим действиям внутри графического объекта также можно получить доступ и по имени динамического действия.

Написание процедур модуля ThisDisplay

Создание танцующего робота.

  1. Разместим прямоугольник и определим поворот Rotate

  2. Разместим флажок, при установке которого начинается поворот. Определена динамика Pick

После нажатия на кнопку Edit открывается окно редактора VBA, где вводится код процедуры.

Код для вращения руки робота

Sub Demo( )

DoEvents

Static count As Integer, _

arm_state As Integer, _

Napr As Boolean

If Napr = 0 Then

arm_state = arm_state + 10

Else

arm_state = arm_state - 10

End If

If arm_state >= 200 Then Napr = 1

If arm_state <= 0 Then Napr = 0

Call SetPointValue("~~Arm~~", arm_state)

End Sub

Sub SetPointValue(ByVal name As String, ByVal val)

Dim obj As GwxPoint

Set obj = ThisDisplay.GetPointObjectFromName(name)

If obj Is Nothing Then Stop

obj.Value = val

Set obj = Nothing

End Sub