Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 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 и команду запуска программы:

(loadUSN”)

(USN)

Окно MS Word с распечаткой фамилии пользователя представлено на рис. 2.

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