Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Топ:
Марксистская теория происхождения государства: По мнению Маркса и Энгельса, в основе развития общества, происходящих в нем изменений лежит...
Методика измерений сопротивления растеканию тока анодного заземления: Анодный заземлитель (анод) – проводник, погруженный в электролитическую среду (грунт, раствор электролита) и подключенный к положительному...
Интересное:
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Средства для ингаляционного наркоза: Наркоз наступает в результате вдыхания (ингаляции) средств, которое осуществляют или с помощью маски...
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Дисциплины:
2021-06-30 | 37 |
5.00
из
|
Заказать работу |
|
|
Листинг 10.3. Функция ex11_set_connect
; Разрыв связи с Excel и выгрузка из памяти(defun ex_break_connect (/) (vlax-invoke-method g_oex "Quit"); Освобождаем объекты, связанные с Excel,; для корректной выгрузки Excel из памяти(mapcar (function (lambda (x) (if (and x (not (vlax-object-released-p x))) (vlax-release-object x)))) (list g_cell g_mainsh g_shs g_awb g_wkbs g_oex)); Сборкамусора (setq g_cell nil g_mainsh nil g_shs nil g_awb nil g_wkbs nil g_oex nil) (gc))Листинг 10.4. Функция ex_break_connect
Перед выполнением операции загрузите все три программы, а затем запустите основную функцию readex11_com в двух вариантах:
(readex11_com "d:\\r 16\\readex11.xls" "Спецификация" 8.0 5.0 T) и(readex11_com "d:\\r 16\\readex11.xls" "Спецификация" 5.0 3.0 nil).Результаты приведены на рис. 10.5 и рис. 10.6.
Рис. 10.5. Таблица (hcell=8.0, hlet=5.0)
Рис. 10.6. Таблица (hcell=5.0, hlet=3.0)
Анализ программ
После установки связи с MS Excel 2003 основная программа вычисляет последовательно указатели:
· g_oex - указатель объекта самого приложения Excel;
· g_wkbs - указатель семейства Workbooks;
· g_awb - указатель активной книги после открытия файла readex.xls;
· g_shs - указатель семейства листов;
· g_mainsh - указатель нужного листа (Спецификация).
Затем с помощью метода Evaluate читаются значения, записанные в листе Спецификация в ячейках А1 и В1:
· nlines - количество строк или деталей;
· ncolumns - количество столбцов в будущей таблице.
Поскольку метод Evaluate возвращает значение типа Variant, то для его сохранения в виде обычного целого числа применяется преобразование типа с помощью функции vlax-variant-value.
|
Применяя далее тот же метод Evaluate сканируем строки 2-10 листа Спецификация и получаем список table_items из девяти элементов. Каждый элемент также является списком из пяти значений:
(30.0 70.0 30.0 40.0 40.0) ("int" "str" "real" "str" "int")("Позиция" "Наименование" "Толщина" "Материал" "Количество")(1.0 "Планка" 20.0 "A" 4.0) (3.0 "Плинтус" 30.0 "A" 6.0)(4.0 "Плита" 50.0 "В" 12.0) (8.0 "Лист" 13.0 "С" 6.0)(14.0 "Рама" 35.0 "A" 8.0) (16.0 "Накладка" 10.0 "С" 1.0)Первый элемент списка table_items (ширина столбцов) сохраняется для удобства в переменной width, второй элемент (типа значений по столбцам) - в переменной types, а третий (заголовки столбцов) - в переменной headers.
Из списка видно, что все значения, являющиеся как вещественными, так и целыми числами, представлены в вещественном виде. Поэтому при вписывании их в таблицу нужно пользоваться типами "int" или "real".
После формирования table_items программа ex_break_connect закрывает соединение с табличным процессором Excel и выгружает его из памяти. При этом проверяется, какие сформированы глобальные переменные, содержащие указатели объектов Excel. Их объекты аннулируются с помощью функции vlax-release-object. Это позволяет избежать неприятного процесса, когда приложение Excel не удаляется из памяти. При повторениях процесса количество неудаленных экземпляров приложения растет и может исчерпать всю оперативную память на компьютере.
Далее интерактивно запрашивается точка р0, в которую будет помещен верхний левый угол таблицы спецификации деталей. Цикл, организованный с помощью функции while, исключает возможность пустого ввода нажатием на клавишу Enter. Это можно было бы обеспечить применением функции initget.
Сначала с помощью метода AddTable строится пустая таблица с колонками одинаковой ширины. Затем с помощью метода SetColumnWidth задаются нужные ширины.
Заполнение ячеек данными выполняется в три шага:
|
· с помощью метода SetTextHeight задается высота букв текста;
· с помощью метода SetText задается сам текст;
· с помощью метода SetCellAlignment задается выравнивание в ячейке.
Для заголовков таблицы и колонок дополнительное выравнивание не выполняется. Используемое по умолчанию выравнивание acmiddleCenter является приемлемым. В методе SetTextHeight в качестве аргумента должен задаваться тип ячеек. Он может принимать значения:
· acTitleRow - для заголовка таблицы;
· acHeaderRow - для заголовков колонок;
· acDataRow - для ячеек с данными.
Приведенные программы удобны тем, что в самом файле Excel можно задать такие параметры настройки таблицы, как количество и тип элементов, ширину столбцов и др. В самой программе можно проводить более тщательный разбор значений, занесенных предварительно в книгу Excel.
Система AutoCAD имеет свои средства, позволяющие работать с базами данных и создавать связи между примитивами рисунка и записями базы. Для получения доступа к внешней базе данных из системы AutoCAD нужно настроить связь с базами данных с помощью драйверов Microsoft OLE Database. Из доступных пользователю отметим драйверы MS ODBC (Open Database Connectivity). В процессе работы драйверов используется модель COM (Component Object Model).
После завершения настройки связи с внешней базой данных создается файл с расширением udl (Use Data Link). По умолчанию UDL-файлы располагаются в папке Data Links папки Document end Setting текущего пользователя.
Для создания UDL-файлов обычно используются существующие или создаваемые файлы с расширением dsn (Data Source Name). Поумолчаниюонирасполагаютсявпапке c:\Program Files\Common Files\Odbc\Data Sources. Возможно, однако, создание файла настройки и без DSN -файла.
Для примера в папке Sample программного обеспечения AutoCAD поставляется файл db_samples.mdb базы данных MS Access. В папке Data Links, расположенной внутри папки Document end Setting текущего пользователя, находится уже созданный UDL-файл jet_dbsamples.udl. Он настроен для работы с таблицами этой базы. Для чтения этого файла достаточно наличия драйверов OLE DB и ODBC.
Внутри папки Sample находится также папка Database Connectivity. В ней расположены файлы caotest. lsp и caotest. dvb. Они используют поддерживаемую системой AutoCAD объектную модель САО (Connectivity Automation Objects).
Задание 10.1
При открытии сеанса работы в программе AutoCAD пользователь должен ввести свою фамилию в автоматически появляющемся диалоговом окне. Фамилия выбирается в списках окна. Списки сотрудников составлены для каждого подразделения путем чтения текстовых файлов. Данные должны быть записаны в файл MS Word.
|
Если Вы не сможете решить эту задачу самостоятельно, рассмотрите приведенное ниже решение.
Текстовые файлы polz01 и polz02 имеют следующее содержание:
polz01 | polz02 |
Сектор 2111 Алексеева Борисов Витольд Савельев Тверской Юдинцева Яковлева | Сектор 2112 Калашин Ладейников Михайлова |
Составьте DCL -файл с описанием диалогового окна. Поместите его в один из каталогов маршрутов поддержки.
user:dialog{label = "Ввод фамилии пользователя";:column{:edit_box{label="Фамилия:";edit_alignment=centered; value=""; key="usfam"; }// конец edit_box:spacer{height=1;}:text{label="Выборизсписковподразделений";alignment = centered;}:row{ :text{label="Подразделение 0001"; key="s1";} :popup_list{key="p1";is_enabled=true;label="";list="";width=20;} }// конец row:row{ :text{label="Подразделение 0002"; key="s2";} :popup_list{key="p2";is_enabled=true;label="";list="";width=20;} }// конец row:row{ :text{label="Подразделение 0003"; key="s3";} :popup_list{key="p3";is_enabled=true;label="";list="";width=20;} }// конец row:row{ :text{label="Подразделение 0004"; key="s4";} :popup_list{key="p4";is_enabled=true;label="";list="";width=20;} }// конец row:spacer {height=1;} ok_cancel;}// конец column}// конец dialogВнешний вид диалогового окна показан на рис. 10.7
Рис. 10.7. Диалоговое окно "Ввод фамилии пользователя"
Составим процедуру USN LISP-файла. Она состоит из двух частей. В первой части заполняются списки и обрабатываются данные диалогового окна. Фамилия пользователя присваивается глобальной переменной PV. Во второй части значение PV распечатывается в редакторе MS Word.
(defun usn (/ dcl_id fpolz fd i plist nlist spi str nsubd _re) (if (not pv) (setq pv "")) (if (< (setq dcl_id (load_dialog "user.dcl")) 0) (exit)) (if (not (new_dialog "user" dcl_id)) (exit)) (setq i 0) ; Чтениефайлов polz01.txt, polz02.txt, polz03.txt, polz04.txt(repeat 4 ; количество подразделений - 4 (setq spi nil)(setq i (1+ i) fpolz (strcat "i:/Dialog/ListOfUsers/polz0" (itoa i) ".txt")) (if (findfile fpolz) (progn (setq fd (open (findfile fpolz) "r")) (setq str (read-line fd)) (setq nlist (append nlist (list str))) (if str (while (setq str (read-line fd)) (setq spi (append spi (list str))) ) ;while ) ;if str (close fd) (setq fd nil)) ;progn (setq nlist (append nlist (list nil)))) ;if findfile (setq plist (append plist (list spi)))) ;repeat ; ; Заполнение списков диалогового окна (setq i -1)(repeat 4 (setq i (1+ i)) (if (setq nsubd (nth i nlist)) (progn (set_tile (strcat "s" (itoa (1+ i))) nsubd) (if (setq spi (nth i plist)) (progn (start_list (strcat "p" (itoa (1+ i)))) (mapcar 'add_list spi) (end_list) ) ;progn ) ;if) ;progn ; Гашение списка, если файл с фамилиями не найден(progn (mode_tile (strcat "s" (itoa (1+ i))) 1) (mode_tile (strcat "p" (itoa (1+ i))) 1))) ;if) ;repeat ; Элементы управления диалогового окна(action_tile "accept" (strcat "(if(= (setq pv(get_tile \"usfam\"))\"\")""(alert\"Фамилия не задана\")" "(done_dialog))") ;strcat) ;action-tile accept (action_tile "cancel" "(done_dialog)") (action_tile "p1" "(set_tile \"usfam\" (nth (atoi $value) (nth 0 plist)))") (action_tile "p2" "(set_tile \"usfam\" (nth (atoi $value) (nth 1 plist)))") (action_tile "p3" "(set_tile \"usfam\" (nth (atoi $value) (nth 2 plist)))") (action_tile "p4" "(set_tile \"usfam\" (nth (atoi $value) (nth 3 plist)))") (start_dialog) (unload_dialog dcl_id) (vl-load-com); Загружаем Word 2003 без открытых документов(setq g_ow (vlax-get-or-create-object "Word.Application.11")); Раскомментировать следующую строку,; если окно Word должно быть видимым(vlax-put-property g_ow 'Visible:vlax-true); Указательсемейства Documents(setq g_docs (vlax-get-property g_ow 'Documents)); Создаемновыйдокумент(setq g_doc (vlax-invoke-method g_docs 'Add)); Создаемрабочийдиапазон, позиция 0(setq g_r (vlax-invoke-method g_doc 'Range 0 0)); Вставляем текст заголовка в начало диапазона(vlax-invoke-method g_r 'InsertBefore "Списокпользователей"); Вставляемконецабзацадважды(vlax-invoke-method g_r 'InsertParagraphAfter)(vlax-invoke-method g_r 'InsertParagraphAfter); Параметрышрифтарабочегодиапазона(setq g_f (vlax-get-property g_r 'Font))(vlax-put-property g_f 'Name "Arial")(vlax-put-property g_f 'Size 14.0)(vlax-put-property g_f 'Bold:vlax-true)(vlax-put-property g_f 'Italic:vlax-false) (vlax-put-property g_f 'Underline:vlax-false); Создание нового диапазона в конце документа(setq _re (vlax-get-property g_r 'End))(setq g_r (vlax-invoke-method g_doc 'Range _re _re)); Вставляемтекствконец(vlax-invoke-method g_r 'InsertAfter "ПК1")(vlax-invoke-method g_r 'InsertParagraphAfter)(vlax-invoke-method g_r 'InsertAfter pv)(vlax-invoke-method g_r 'InsertParagraphAfter);;;(vlax-invoke-method g_r 'InsertAfter pv);;;(vlax-invoke-method g_r 'InsertParagraphAfter); Параметрышрифтарабочегодиапазона(setq g_f (vlax-get-property g_r 'Font))(vlax-put-property g_f 'Name "Times New Roman")(vlax-put-property g_f 'Size 10.0)(vlax-put-property g_f 'Bold:vlax-false)(vlax-put-property g_f 'Italic:vlax-false) (vlax-put-property g_f 'Underline:vlax-false); Сохранениедокумента(vlax-invoke-method g_doc 'SaveAs "d:\\Temp\\WordDoc.doc"); Выходиз Word(vlax-invoke-method g_ow "Quit"); Освобождениеобъектовивыгрузка Word(if (and g_f (not (vlax-object-released-p g_f))) (vlax-release-object g_f))(if (and g_r (not (vlax-object-released-p g_r))) (vlax-release-object g_r))(if (and g_doc (not (vlax-object-released-p g_doc))) (vlax-release-object g_doc))(if (and g_docs (not (vlax-object-released-p g_docs))) (vlax-release-object g_docs))(if (and g_ow (not (vlax-object-released-p g_ow))) (vlax-release-object g_ow)) (setq g_f nil g_r nil g_doc nil g_docs nil g_ow nil)(gc) (princ)) ;defun usnСохраните файл как USN. LSP в одном из каталогов маршрутов поддержки. Запишите команду загрузки этого файла в файл ACAD. LSP и команду запуска программы:
|
|
Окно MS Word с распечаткой фамилии пользователя представлено на рис. 10.8.
Рис. 10.8. Окно MS Word
Ключевые термины
Application - vla - объект приложения, создается функцией (vlax-create-object "имя в реестре").
Document - объект, представляющий каждый из открытых документов.
ActiveDocument - активный документ.
Range - рабочий диапазон документа.
Указатели - глобальные переменные, содержащие ссылку на объекты.
Краткие итоги
Модель COM (Component Object Model) позволяет связывать самые разнородные приложения. Построенные на спецификации этой модели программные комплексы предоставляют описание своих компонентов и средств доступа к ним другим программам. При интегрировании приложения-клиенты обращаются к приложениям-серверам для выполнения операций, специфичных для приложения-сервера. Приложения, поддерживающие технологию COM, заносят в реестр Windows информацию о себе, о своих объектах и компонентах.
Вопросы
1. Как из AutoCAD установить связь с MS Word?
2. Какая функция позволяет вывести свойства и методы объекта Application?
3. Какая функция позволяет извлечь значения свойств объекта?
4. Какая функция позволяет изменить значения свойств объекта?
5. Каков алгоритм создания "Пояснительной записки" в MS Word из AutoCAD?
6. Каков алгоритм создания "Спецификации" в MS Excel из AutoCAD?
Внимание! Если Вы увидите ошибку на нашем сайте, выделите её и нажмите Ctrl+Enter.
© Национальный Открытый Университет "ИНТУИТ", 2021 | www.intuit.ru
Национальный Открытый Университет "ИНТУИТ": www.intuit.ru
Валерий Пакулин
|
|
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!