Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Задание 10
При открытии сеанса работы в программе AutoCAD пользователь должен ввести свою фамилию в автоматически появляющемся диалоговом окне. Фамилия выбирается в списках окна. Списки сотрудников составлены для каждого подразделения путем чтения текстовых файлов. Данные должны быть записаны в файл MS Word.
Если Вы не сможете решить эту задачу самостоятельно, рассмотрите приведенное ниже решение.
Текстовые файлы polz01 и polz02 имеют следующее содержание:
polz01 | polz02 |
Сектор 2111 Алексеева Борисов Витольд Савельев Тверской Юдинцева Яковлева | Сектор 2112 Калашин Ладейников Михайлова |
Составьте DCL-файл с описанием диалогового окна. Поместите его в один из каталогов маршрутов поддержки.
user:dialog{label = "Ввод фамилии пользователя";
:column{
:edit_box{label="Фамилия:";edit_width=40; 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
Внешний вид диалогового окна показан на рис. 1

Рис. 1. Диалоговое окно «Ввод фамилии пользователя»
Составим процедуру 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 и команду запуска программы:
(load “USN”)
(USN)
Окно MS Word с распечаткой фамилии пользователя представлено на рис. 2.

Рис. 2. Окно MS Word.


