
- •1. Функция ThisDisplay.GetVisibleObjectFromName(“Имя”)
- •2. Функция ThisDisplay.GetVisibleObject From Index(…)
- •3. Функция Имя_Символа.GetVisibleObjectFromIndex ( …)
- •4. Функция Имя_Символа.GetVisibleObjectFromName(“Имя”)
- •2. Функция Имя_символа.GetDynamicObjectFromIndex(1)
- •3. Функция Имя_Графич_Объекта.GetDynamicObjectFromName(“Имя”)
Написание сценариев на языке VBA
Genesis32 поддерживает VBA. На языке VBA можно написать сценарии, которые повышают функциональность проекта. Ниже рассмотрим последовательность создания сценариев и возможностей VBA.
Вызов редактора VBA осуществляется путем выполнения команды Сервис / Макрос / Редактор VBA. Тогда на экране появляется окно редактора VBA.
Основными элементами этого окна являются окно проекта и окно ввода кода. Окно проекта содержит список форм и модулей, входящих в текущий открытый проект.
В GraphWorx32 модули и формы проекта хранятся вместе с объектами GraphWorx32 в одном и том же файле с расширением .gdf (genesis display file). Имеется возможность экспорта модулей в файл с расширением .bas, классов – в файлы .cls и форм в файл .frm. Для этого надо выделить модуль (форму, класс) и выполнить команду Файл / Экспорт.
Как видно, из окна проекта, только что открытый редактор VBA содержит модуль ThisDisplay. Модуль ThisDisplay является специальным модулем, который представляет текущую загруженную экранную форму GraphWorx32. С точки зрения ООП ThisDisplay является объектом класса экранной формы. Через этот объект можно иметь доступ ко всем объектам экранной формы и соответственно свойствам этих объектов.
Иерархия объектов экранной формы
Все графические объекты, установленные в экранную форму принадлежат некоторому классу: классу прямоугольник, эллипс, линия и т.п. В Genesis эти классы обозначаются следующим образом: GwxRectangle, GwxEllipse и т.д.
Динамические действия графических объектов также являются объектами некоторых классов. Например, изменение размера – объект класса GwxSize, изменение положения – объект класса GwxLocation и т.д.
Ниже приведем иерархию классов модуля GwxDisplay.
п.1. Доступ к графическим объектам экранной формы
Для доступа к объектам объект ThisDisplay имеет 4 метода:
ThisDisplay.GetVisibleObjectFromName(“Имя”)
ThisDisplay.GetVisibleObjectFromIndex(Long Index)
SimbolName.GetVisibleObjectFromIndex(Long Index)
SimbolName.GetVisibleObjectFromName(“Имя”)
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(…) возвращает объект экранной формы по индексу объекта. Эта функция удобна при последовательном выполнении операций над всеми объектами.
Пример: Получим первые 2 установленных объекта и изменим их свойство цвет.
Dim obj1 As Object
Dim obj2 As Object
Set obj1 = ThisDisplay.GetVisibleObjectFromIndex(0)
Set obj2 = ThisDisplay.GetVisibleObjectFromIndex(1)
obj1.fillcolor = RGB(0,255,0)
obj2.fillcolor = RGB(255,0,0)
3. Функция Имя_Символа.GetVisibleObjectFromIndex ( …)
Каждый символ GraphWorx32 имеет собственный список индексов всех графических объектов, из которых сгруппирован данный символ. Если получили ссылку на этот симол, то метод Имя_Символа.GetVisibleObjectFromIndex() возвращает ссылку на графический объект внутри символа по данному индексу. Данная функция удобна при последовательном выполнении операций над графическими объектами, из которых сгруппирован символ.
Пример: Изменение цвета объекта с номером 3 внутри символа с именем “sym”.
Dim sym1 As GwxSymbol ‘тип объекта – символ
Dim obj As Object
Set sym1 = ThisDisplay.GetVisibleObjectFromName(“sym”)
Set obj = sym1.GetVisibleObjectFromIndex(2)
obj.fillcolor = RGB(0,255,0)
4. Функция Имя_Символа.GetVisibleObjectFromName(“Имя”)
К графическим объектам внутри символа можно иметь доступ и по его имени объекта. Функция Имя_Символа.GetVisibleObjectFromName(“Имя”) возвращает объект внутри символа по данному имени.
п.2. Доступ к динамическим объектам экранной формы
Динамическим объектом считается назначенная к объекту динамическое действие (изменение размера, положения, вращение, указание и щелчок и т.п.). В окне инспектора свойств на соответствующей вкладке в поле «Имя объекта» указывается имя объекта - динамического действия.
VBA имеет 3 способа доступа к динамическим объектам:
1. Функция ThisDisplay.GetObjectFromName(“Имя”) возвращает ссылку на динамический объект по указанному имени объекта.
Пример: Получаем доступ к динамическому объекту “Hide” и устанавливаем значение – «0», т.е. объект связанный с этим объектом будет не видимым.
Dim obj As GwxHide ‘ тип объекта
Set obj = ThisDisplay.GetDinamicObjectFromName(“Hide”)
obj.dataSource = 0
2. Функция Имя_символа.GetDynamicObjectFromIndex(1)
Каждый графический объект может иметь несколько динамических действий. Например, прямоугольник может изменять размеры и положение. Каждому действию присваивается индекс. Самое первое динамическое действие имеет индекс 0. Использование индекса позволяет последовательно изменить параметры динамических действий.
Пример: Получаем ссылку на 2-ое динамическое действие графического объекта “Rect” и изменим его параметра - нижняя граница диапазона изменения.
Dim Rect As GwxRectangle
Dim Dyn As Object
Set Rect = ThisDisplay.GetVisibleObjectFromName(“Rect”)
Set Dyn = Rect.GetDynamicObjectFromIndex(1)
Dyn.LowRange = 10