![]() |
Translate to: |
||||||
| Обратная связь | Новости САПР | Программы | Документация | Полезные советы | Обзорные статьи | ||
| Заказ и разработка | Каталог САПР | САПР-конференция | Библиотека ГОСТов | Наши соавторы | Коммерческое ПО | ||
Вы слышали что AutoCAD R14 и 2000 содержат новый опциональный язык программирования — VBA (Visual BASIC for Applications). Но как только Вы загружаете его, Вы поражаетесь огромному количеству окон и опций меню, не совсем соответсвующим вашим представлениям о новом языке программирования. Некоторые специалисты в AutoLISP или других языках программирования. Однако я ручаюсь, что VBA не настолько сложен, как кажется. Когда вы закончите читать это руководство, Вы будете знакомы с VBA и его средой разработки. Вы также создадите простое VBA-приложение. Ну что, готовы? Давайте начинать.
Откройте VBA IDE (Integrated Development Environment). Из меню AutoCAD Tools, выберите Macros|Visual Basic Editor.
Прграммирование на VBA очень отличается от программировнаия на AutoLISP, и одним из самых больших отличий является среда программирования. AutoLISP не имеет встроенной среды программирования - вы должны использовать текстовый редактор, что бы создавать и редактировать код. Когда приходит время отладки, вы ограничены установкой команды печати в вашем коде для отображения текущего состояния программы и переменных. Существуют программы, которые позволяют сделать этот процесс более легким, но их нужно приобретать отдельно.
VBA, с другой стороны, идет с всеми этими функциями, которые являются встроенные. VBA IDE включает редактор кода, конструктор форм, и отладчик в одном пакете. Из меню AutoCAD Tools, выберите Macros|Visual Basic Editor. Когда отобразиться VBA IDE, Вы увидите массив меню, кнопок и окон.
Сначала найдите окно с названием. Это Обозреватель проектов Project Explorer (справа). Подобно как Windows Explorer отображает все файлы и каталоги на вашем жестком диске и помогает вам находить и работать со специфическими файлами, Project Explorer отображает все формы и модули с кодом в вашем проекте и помогает вам находить и работать со специфическими формами или модулями.

Вы увидете три папки: AutoCAD Objects, Forms, и Modules. Когда вы добавляете форму или модуль к вашему проекту, VBA добавляет их к соответствующей папке.
В AutoCAD 2000, папка AutoCAD objects содержит объект ThisDrawing, который автоматически присоединяется к AutoCAD.
Все перечисленные окна помогают вам работать с формами. Формы - ваш основной интерфейс с пользователем. Там, где вы использовали диалоговые окна в программе на AutoLISP, вы используете формы в VBA.
В дополнении, в любое время вы можете спросить у пользователя более чем две или три части информации, поскольку формы воспринимаются быстрее чем сообщения в командной строке. Мы используем формы, что бы позволить пользователю решить, какую информацию отображать.
Откройте меню Insert menu и выберите UserForm. Появяться два новых окна. Первое, называемое Project-UserForm1 (UserForm), это конструктор форм. Вы должны использовать его для графического конструирования форм. Второе окно, называемое Toolbox, содержит различные объекты, которые вы можете добавить к форме.
Прежде всего, посмотрите на новое имя формы: UserForm1. Каждый VBA-проект, каждая форма и модуль внутри проекта, и каждый объект и каждый объект в каждой форме имеет свое имя. Когда вы начинаете проект, добавляете новую форму к проекту, или добавляете новый объект к форме, VBA создает имя по умолчанию. Я думаю, что вы будите изменять эти имена на другие, что нибудь значащие для вас. Нажмите правой кнопкой мыши на Project в Project Explorer и выберите Project Properties из всплывающего меню. Измените имя проекта на VbaDemo и нажмите на OK.

Прежде всего, найдите окно с названием Properties (справа). Я хочу Вам напомнить, большинство объектов имеют свойства, которые определяют внешний вид объекта. Окно window позволяет вам легко устанавливать эти свойства. Прямо сейчас, падающее меню вверху окна должно отображать UserForm1 UserForm. Падающее меню содержит каждый объект, который вы расположили на форме. Ниже падающего меню находится длинный список свойств формы: заголовок, высота, вершина и много других. Левая сторона перечисляет каждое свойство, а правая показывает значение каждого свойства. Найдите свойство Name и измините его на MainWin. Заметьте, что Project Explorer обновляет имя формы.
Теперь, найдите свойство Caption и установите его в VBA Demo. Посмотрите заголовок формы в конструкторе форм после того как вы изменили его - оно измениться автоматически. Если вы когда-либо разрабатывали диалоговые окна используя AutoCAD DCL, вы должны оценить, насколько просто создавать формы в VBA.

Теперь вы готовы углубиться в Toolbox (ниже слева) и спроектировать свою собственную форму. Чтобы добавить управление к вашей форме, кликните на иконке в панели инструментов Control, а затем кликните на форме. Если Вы не уверены, какой вид управления представляет определенная кнопка в пaнели инструментов Control, подведите курсор мыши на несколько секунд к иконке, и тогда отобразиться описание того, что собой представляет данная иконка. Верхняя левая точка иконки расположиться в той точке, на которую вы укажете в форме. Вы можете изменить размер иконки управления перемещая любой из его углов или граней, точно так же как Вы мог бы изменять размеры Проводника Windows.

Вы можете также установить его свойста Top, Left, Height, и Width в окне свойств (Properties). Дале добавте две командные кнопки к форме. Измените имя первой кнопки на SayHello и ее заголовок на Say Hello, а затем измените имя второй кнопки на AskQuestion и ее заголовок на Ask a Question. Ваша первая форма должна быть похожа на ту, которая показана на рисунке 5.
Работа с пользователем.
Теперь, когда интерфейс с пользователем завершен, вам нужно добавить немного кода за сценой. VBA в AutoCAD R14.01 и R2000 имеет встроенную связь с AutoCAD, в отличие от R14, где нужно вручную подключать VBA к AutoCAD.
Я знаю, это не имеет смысла В конце концов, вы всегда запускаете внутри AutoCAD и вы никогда не должны были это делать с AutoLISP! Но VBA не специфическая для AutoCAD среда. Одно VBA-приложение может управлять любым количеством поддерживающих VBA приложений.
К примеру, вы можете использовать VBA для того, что бы сформировать перечень материалов, извлекая атрибуты из вашего чертежа, и соформировать затем таблицу в Excel. Вы так же можете использовать AutoCAD VBA среду что бы создавать приложения, которые не связаны с AutoCAD. Как всегда, добавление гибкости означает добавление работы, к счастью, эта работа не слишком напряжена.
Прежде всего, кликните правой кнопкой на форме и выберите View Code из всплывающего меню. Это откроет редактор кода. Хотя на первый взгляд редактор кода похож на обыкновенный текстовый редактор, на самом деле он - намного большее.
Посмотрите на два падающих меню в верхней части редактора. Падающее меню Objects слева - это перечень всех объектов, которые вы расположили в форме. Падающее меню Events справа - это перечень каждого события для вашего текущего объекта. Когда вы выбираете объект, редактор кода автоматически добавлет подпрограмму обработки событие по умолчанию для этого объекта. Когда вы выбираете событие, редактор автоматически добавляет подпрограммку поддержки этого события вместе с любыми требуемые аргументами.
По мере того как Вы набираете код, редактор делает много работы для Вас. Если Вы ссылаетесь на стандартную для VBA процедуру, редактор отображает подсказку которая перечисляет стандартный для данной процедуры синтаксис. По мере того как вы перемещаетесь со строки на строку, редактор подсвечивет определенным цветом ключевые слова, коментарии, и так же проверяет каждую строку на синтаксические ошибки. В дополнении, вы можете перемещаться к странице со справкой, просто переместив курсор к месту вызова метода и затем нажав F1 Хотя эта деятельность может казаться навязчивой сначала, вскоре Вы найдете это чрезвычайно полезным. Я настолько привык к этому, что, когда я изменяю старый AutoLISP-код, мне необходимо некоторое время, что бы привыкнуть что код не окрашивается и не проверяется тут же.
Я уверен что Вы стремитесь видеть все это в действии. Выберите General из падающего меню Objects и Declarations из падающего меню Events, и затем добавьте следующие переменные для образования связи:
Private
ThisApplication
As Object
Далее выберите объект UserForm и его событие Initialize. Событие - это специальный тип метода,
который запускается когда что-нибудь случается в объекте. В этом случае, событие Initialize
включает отображение формы. Добавьте следующий код:
On Error Resume
Next
Set
ThisApplication = _
GetObject(,"AutoCAD.Application")
If (Err.Number <> 0)
Then MsgBox "Unable to connect to AutoCAD!"
Unload Me
End If
'On Error Resume Next' говорит VBA переместиться на следующую инструкцию всякий раз, когда произойдет ошибка. без этой строки приложение будет остановлено и отобразиться диалоговое окно с сообщением об ошибке.
Вызов GetObject осуществляет попытку соединиться с выполняемы сеансом AutoCAD. Если это невозможно , происходит ошибка. Таким образом, немедленно после попытки, ваше приложение должно проверить, было ли это успешно. Если нет, необходимо дать знать об этом пользователю, а затем выгрузить форму. Процесс выгрузки формы автоматически завершает приложение.
Также, как ваше приложение нуждается в помощи при соединении с AutoCAD, оно должно сообщить о том, когда оно разорвет связь с AutoCAD. Выберите событие Terminate в объекте UserForm и наберите:
Set mappAcad = Nothing
Это освободит соединение.
Если вы используете AutoCAD 14.01 или 2000, вы можете удалять весь код что вы набрали. Как я упомянул, Вы имеете встроенный объект ThisDrawing который представляет текущий чертеж. Он имеет свойство Application которое вы можете использовать для вызова любых методов объекта Application.
После того как вы подключились к AutoCAD, вам необходимо добавить немного кода к вашему приложению что бы оно занало, что делать, когда пользователь что-то делает. Сделайте двойной щелчек мыши на кнопке SayHello в вашей форме. Обратите внимание что ваш редактор кода перемещается к событию Click кнопки. Это событие по умолчанию для управления кнопкой. Если вы желаете немного другое событие, Вы можете просто выбрать его из правого падающего списка.
Когда пользователь нажимает на кнопку SayHello, VBA0-программа должна отобразить окном сообщений, с надписью "Hello!". VBA имеет метод, который достаточно соответствует этому - MsgBox, который только это и делает. Добавьте следующий код к событию по нажатию (Click) для SayHello:
MsgBox "Hello!"
Как минимум, вы дадите для MsgBox сообщение для отображения, но этот метод может больше, если ему дать больше информации. К примеру, он может задать вопрос пользователю и сообщить его вам. Выберите AskQuestion из меню Object в редакторе кода; редактор снова предположит что вам нужно событие Click. Добавьте следующий код:
If (MsgBox("Is it raining out?", _
vbYesNo, "Hey, Weatherman!") = vbYes) _
Then MsgBox "Better close the window!"
Else MsgBox "Enjoy the nice day!"
End If
Как и в предыдущем случае, первый аргумент для MsgBox - сообщение для отображенияy. The Второй аргумент сообщает MsgBox что бы оно отобразило кнопки Yes и No прежде чем кнопку OK. Третий аргумент сообщает MsgBox как озаглавить диалог.
Когда вы укажите MsgBox отобразить кнопки Yes и No, вы можете проверить код возврата что бы определить, какую кнопку нажал пользователь. Если возвращаемое значение эквивалентно встроенной константе vbYes, пользователь нажал кнопку Yes. И как вы можете догадаться, нажатие кнопки No будет возвращать значение vbNo.
Готовы видеть результаты ваших усилий? Запустите программу на выполнение выбрав Run из меню Run. Ваша форма отобразиться в окне AutoCAD, и выступающие кнопки будут настаивать на ответе. Немного поотвечайте на вопросы, а затем возвращайтесь, когда вы утомитесь отвечать на вопросы.
Ваше приложение прочти закончено, но оно не содержит одной важной детали. Приложение запускается из среды разработки VBA, но как оно будет загружаться внутри AutoCAD? Никакие силы не заставят без этой детали запуститься приложению из командной строки AutoCAD. Что бы это сделать, вам необходим метод-помощник. Откройте в VBA меню Insert и выберите Module. Измените имя модуля на AppStuff, и введите следующий код в редакторе:
Public Sub
VbaDemo()
MainWin.Show
End Sub
Сохраните ваш VBA-проект, затем переключитесь в командную строку AutoCAD и наберите vbarun AppStuff.VbaDemo. Ваша форма отобразилась на экране! Перейдем к следующему уроку.
Copyright © Сайт поддержки пользователей САПР