Логотип сайта поддержки пользователей САПРО сайте поддержки пользователей САПР Translate to:
Hosting Ukraine

Урок 3. Ваша первая программа на Visual BASIC

Michael Hunter

Цель этого урока

В данном уроке мы охватим понятия настройки AutoCAD с помощью VBA. Мы создадим FancyText, Простое VBA-приложение, которое будет создавать привязанный текст под любым уголом на текущем уровне. Если Вы сталкиваетесь с проблемами (или только слишком ленивы чтобы набрать код), FancyText доступен на Web-сайте CADALYST.

Откроем VBA IDE (интегрированная среда разработки). Программирование в VBA очень отличается от программирования AutoLISP, и одно из этих отличий - среда разработки. AutoLISP не имеет встроенной среды разработки - вы используете свой текстовый редактор для создания и редактирования кода. Когда подходит время отлаживать программу вы ограничены использованием команд печати в вашем коде, что бы отобразить сообщения о состоянии программы, переменных, или чего-нибудь еще, что будет вам говорить что в вашей программе неправильно.

VBA, наоборот, имеет все это встроенным. VBA IDE содержит редактор кода, конструктор форм и отладчик. В VBA IDE найдите окно, называемое Project. Это обозреватель проектов (Project Explorer), как вы могли понять из предыдущего урока. Как обозреватель Windows отображает все файлы и каталоги на вашем жестком диске и помогает вам находить и работать со специфическими файлами, Project Explorer отображает все формы и модули с кодом в вашем проекте и помогает вамнаходить и работать со специфическими формами или модулями.

Обратите внимание, что здесь находятся три папки: AutoCAD Objects, Forms, и Modules. Когда вы добавляете форму или код к вашему проекту, VBA добавляет это к соответствующей папке. Я буду объяснять назначение папки AutoCAD Objects в следующем разделе.

Оставшиеся окна помогают вам работать с формами. Формы - это ваш основной интерфейс с пользователем. Когда вы используете диалоговое окно на AutoLisp в подпрограмме на AutoLISP, в VBA вы используете форму. В дополнение, в любое время вы можете запросить у пользователя два или три куска информации, так как он воспринимает информацию лучьше из формы лучьше чем из командной строки.

Создание формы

Откройте меню Insert и выберите UserForm. Когда вы сделаете это, появяться два новых окна. Первое, под названием Project-UserForm1 (UserForm) - является конструктором форм. Вы должны использовать его для графического конструирования форм.

Второе окно, под названием Toolbox, содержит различные объекты которые вы можете добавлять к форме. Я скоро опишу процесс создания форм, но прежде всего посмотрите на на новое имя формы: UserForm1. Каждый VBA-проект, каждая форма и модуль в проекте, и каждый объект в каждой форме имеет свое имя.

Когда вы начинаете проект, добавляете новую форму к проеку, или добавляете новый объект к форме, VBA создает имя по умолчанию. Я всегда изменяю эти имена по умолчанию на что-нибудь более значимое. Кликните правой кнопкой мыши на Project в Project Explorer и затем выберите Project Properties из всплывающего меню. Измените имя проекта на FancyText и кликните на OK.

Далее найдите окно под названием Properties. Вы наверно помните, что большинство объектов имеют различные свойства, которые определяют внешний вид этих объектов. Окно Properties позволяет вам легко устанавливать эти свойства. Прямо сейчас, в падающем меню в верху окна должно находиться UserForm1 UserForm. Это падающее меню содержит каждый объект, который вы расположили на форме. Ниже в этом падающем меню находится длинный список свойств формы: Caption, Height, Top, и множество других.

С левой стороны перечисляются все свойства, а с правой - их значения. Найдите свойство (Name), затем измените его на frmFancyText. Обратите внимание, что Project Explorer немедленно обновил имя формы. Теперь найдите свойство Caption и установите его в Fancy Text. Заметьте, что заголовок формы в конструторе форм автоматически изменился после этого. Если вы имеете опыт создания диалоговых окон используя AutoCAD DCL, вы оцените как просто это делается в форме VBA.

Создание интерфейса пользователя

Теперь вы готовы начать создание интерфейса пользователя для FancyText. Кликните на конструкторе форм, что бы активировать панель инструментов (Toolbox). Что бы расположить объект на форме, кликните на соответсвующей иконке в панели инструментов, а затем переместите его в конструктор форм. Когда вы перемещаете объекты по форме, вы можете видеть что перемещаемый объект выделен с внешней стороны.

После того, как вы расположили объект, вы можете изменить его размеры, или с помощью мыши, или устанавливая его свойства top, left, height, и width в окне Properties. Пользователи нашей программы будут нуждаться в изменении высоты текста, поэтому разместите метку (label) и блок текста (textbox) из панели инструментов на форму. Кликните на метке, переместите ее в окно Properties, и измените ее имя на lblHeight и ее заголовок на Height. Кликните на блок текста и измените его имя txtHeight.

Что-бы позволить пользователям вращать текст добавьте еще одну метку и блок текста вместе со слайдером (SpinButton). Пользователи теперь смогут вводить угол поворота непосредственно в блок текста, или использовать слайдер для изменения угла вращения при одном нажатии на один градус.

Измените имя новой метки на lblRotation и ее заголовок на Rotation. Измените имя нового текстового окна на txtRotation, и затем измените имя слайдера на spnRotation. Что бы пользователи могли вводить текст, добавьте еще одну метку и еще один блок текста.

Измените имя метки на lblText и ее заголовок на Text:, после этого измените имя блока текста на txtText.Finally, и добавьте кнопку управления (CommandButton) к форме. Измените ее имя на cmdGo и ее заголовок на Go! Нажатие на уту кнопку будет вызывать создание текста. Ваша форма должна выглядеть как показано на рисунке 6.


Рис. 6. Окно ввода данных для Fancy Text.

Создание кода программы

Теперь, еогда интерфейс пользователя завершен, вы должны добавить немного кода. Объект ThisDrawing обеспечивает автоматическую связь с AutoCAD так что вам не нужно вручную обеспечивать это соединение, хотя это и описано здесь.

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

Прежде всего, кликните правой кнопкой мыши на форме и выберите View Code из всплывающего меню. Это откроет редактор кода. Хотя на первый взгляд он выглядит как обычный текстовый редактор, он может гораздо больше.

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

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

По мере того, как вы набираете код, редактор выполняет много работы за вас. Если вы ссылаетесь на стандартную VBA-процедуру, редактор отображает подсказку, в которой перечисляется синтаксис процедуры. По мере того как вы перемещаетесь по коду, редактор подсвечивает цветом ключевые слова, комментарии а так же проеряет синтаксис каждой строки. В дополнение, вы можете перемещаться на страницу помощи просто переместив курсор на вызов метода и нажав F1. Хотя эта деятельность может казаться навязчивой сначала, вскоре вы поймете, что это чрезвычайно полезно. Я уверен, что Вам нетерпиться, чтобы видеть все это в действии, выберите General из падающего меню Objects Declarations из падающего меню Events, и затем добавьте следующую переменную для обеспечения связи:

                     Private mappAcad As Object
Далее, выберите объект Userform и инициализируйте процедуру. Событие - это специальный тип метода, который включается когда в объекте что-то случается. В этом случае, событие Initialize включается каждый раз когда отображается форма. Добавте следующий код:
                     On Error Resume Next
                     Set mappAcad =
                     GetObject(,"AutoCAD.Application")
                     If (Err.Number = 0) Then
                         MsgBox "Unable to connect to AutoCAD!"
                         Unload Me
                     End If
On Error Resume Next указывает VBA переместиться на следующую строку кода когда имеет место ошибка. Без этой строки выполнение прогаммы будет остановлено и VBA отобразит окно с сообщением об ошибке. GetObject осуществляет попытку образовать связь с открытой сессией AutoCAD. Если это невозможно, имеет место ошибка. Таким образом, немедленно после попытки, ваше приложение должно проверить, было ли это успешно. Если нет, необходимо дать знать об этом пользователю, а затем выгрузить форму. Выгрузка формы автоматически завершает приложение. Точно также, как ваше приложение нуждается в помощи для соединения с AutoCAD, необходимо указать ему, когда надо отсоединиться от AutoCAD. Выберите событие Terminate в объекте UserForm и наберите:
                     Set mappAcad = Nothing
Это завершит связь. Теперь, вспомните, как Вы можете использовать слайдер, что бы изменить угол вращения. Выберите событе SpinUp для объекта spnRotation. Получите текущий угол вращения, переведите его в число, а потом увеличивайте на единицу. Вы можете вращать только до 360 градусов, а затем збрасывайте его значение опять в 0 когда оно достигнет 360. И наконец, установитье угол вращения текста в его новое значение:
                     Dim rot#
                     rot# = Val(txtRotation.Text) + 1
                     If (rot# > 359#) Then
                         rot# = 0#
                     ElseIf (rot# < 0#) Then
                         rot# = 0#
                     End If

                     txtRotation.Text = CStr(rot#)
Вы можете так же осуществлять изменение значения назад, добавив к событию SpinDown следующий код:
                     Dim rot#
                     rot# = Val(txtRotation.Text) - 1
                     If (rot# < 0#) Then
                         rot# = 359#
                     ElseIf (rot# > 359#) Then
                         rot# = 359#
                     End If
                     txtRotation.Text = CStr(rot#)

Сохраните ваш проект, а затем запустите FancyText или открыв меню Run и выбрав Run Sub/UserForm 9 или нажав F5. Введите угол вращения текста и используя слайдер измените его значение вверх до 359 градусов и вниз до 0 градусов, и каждое нажатие на слайдер должно вызывать изменение угла вращения на один градус.

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



Copyright © Сайт поддержки пользователей САПР