Скидки на VetCAD++
dwg.ru forum rss xml
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Autolisp ограничить ввод для пользователя

Autolisp ограничить ввод для пользователя

Версия для печати
 
Ответ
Опции темы Поиск в этой теме
Непрочитано 02.08.2018, 10:07
Autolisp ограничить ввод для пользователя
protorgovec
 
газо- нефтепереработка
 
Уфа
Регистрация: 22.07.2015
Сообщений: 78

protorgovec на форуме Вставить имя

Добрый день форумчане. Подскажите пожалуйста. Нужно заставить пользователя выбрать один из предложенных вариантов:
Код:
[Выделить все]
 (initget 1 "01 02 03 04 11 21")
(setq Tip (atof (getkword "\n Тип фланца 01, 02, 03, 04, 11, 21 Tip >: ")))
все работает, но есть одна загвоздка. Если пользователь вводит 1, то присваивается 11, а если 2 то присваивается 21. Воспринимает сокращения. Как мне заставить пользователя прописывать только предложенные варианты, без сокращений? Заранее благодарю.
Просмотров: 1296
 
Непрочитано 03.08.2018, 08:15
#21
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 35,618


Это означает, что локальных прав недостаточно. Ты ж не локальный админ, верно?

----- добавлено через ~1 мин. -----
У сисадминов попроси права на запись в каталог C:/Program Files/Autodesk/AutoCAD 2015 - тогда сможешь тестировать dcl спокойно.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 03.08.2018, 08:21
#22
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 78


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Это означает, что локальных прав недостаточно. Ты ж не локальный админ, верно?

----- добавлено через ~1 мин. -----
У сисадминов попроси права на запись в каталог C:/Program Files/Autodesk/AutoCAD 2015 - тогда сможешь тестировать dcl спокойно.
Спасибо. Но тогда вопрос. Когда я сделаю и передам для других пользователей, то им тоже нужно будет доступ к этой папке? Или же этот доступ нужен только для тестирования мне?
protorgovec на форуме вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 03.08.2018, 08:25
#23
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 35,618


Им это не понадобится. Ты же проверял, как диалог выглядит, через VLIDE?
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 03.08.2018, 08:26
#24
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 78


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Это означает, что локальных прав недостаточно. Ты ж не локальный админ, верно?

----- добавлено через ~1 мин. -----
У сисадминов попроси права на запись в каталог C:/Program Files/Autodesk/AutoCAD 2015 - тогда сможешь тестировать dcl спокойно.
Вроде спокойно зашел в эту папку. Доступ есть. В чем еще может быть причина?
protorgovec на форуме вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 03.08.2018, 08:30
1 | 1 #25
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 35,618


Зайти в папку и создать в ней файл - немного разные вещи
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 03.08.2018, 09:23
#26
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 5,070


Вообще то по первой ссылке в посте №19 в статье даже ссылка есть - "Что делать если диалоговое окно DCL не отображается?" )
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 09.08.2018, 09:13
#27
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 78


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
А хто тут программист?)


Ну так пришла пора - азы в картинках: тыц тыц
поверьте - проще разобраться с диалогами в лиспе, чем с тетями-проектировщиками - у которых вдруг что-то стало работать не так как раньше...
Добрый день. Почитал про DCL. Во многом разобрался. Есть один вопрос. Возможно ли в диалоговом окне делать замороженные окна. И если пользователь задает определенный параметр, то окно размораживалось? Не могу понять как сделать. Может есть какой нибудь пример со сложным DCL окном?
protorgovec на форуме вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 09.08.2018, 09:15
#28
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 35,618


Ставишь enabled = false, а в callback-функции меняешь это свойство.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 09.08.2018, 09:19
#29
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 78


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Ставишь enabled = false, а в callback-функции меняешь это свойство.
А есть какой нибудь пример? Если конечно не сложно
protorgovec на форуме вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 09.08.2018, 09:35
#30
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 35,618


Код:
[Выделить все]
 (defun test (/ dcl_file dcl_handle dcl_res dcl_id dcl_lst)
  (defun fun_callback (key value ref-list)
    (cond ((= key "txt")
           (set ref-list (subst (cons "txt" value) (assoc "txt" (eval ref-list)) (eval ref-list)))
           )
          ((= key "chk")
           (mode_tile "txt" (atoi value))
           (set ref-list (subst (cons "chk" value) (assoc "chk" (eval ref-list)) (eval ref-list)))
           )
          ) ;_ end of cond
    ) ;_ end of defun
  (setq dcl_file   (strcat (vl-string-right-trim "\\" (getenv "temp")) "\\dlg.dcl")
        dcl_handle (open dcl_file "w")
        ) ;_ end of setq
  (foreach item '("dlg:dialog{label=\"test\";" "	:toggle{key=\"chk\";label=\"check\";}" "	:edit_box{key=\"txt\";}" "	ok_cancel;" "	}")
    (write-line item dcl_handle)
    ) ;_ end of foreach
  (close dcl_handle)
  (setq dcl_lst '(("chk") ("txt"))
        dcl_id  (load_dialog dcl_file)
        ) ;_ end of setq
  (new_dialog "dlg" dcl_id "(fun_callback $key $value 'dcl_lst)")
  (action_tile "accept" "(done_dialog 1)")
  (action_tile "cancel" "(done_dialog 0)")
  (setq dcl_res (start_dialog))
  (unload_dialog dcl_id)
  (if (= dcl_res 1)
    dcl_lst
    ) ;_ end of if
  ) ;_ end of defun
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 09.08.2018, 09:45
#31
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 78


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Код:
[Выделить все]
 (defun test (/ dcl_file dcl_handle dcl_res dcl_id dcl_lst)
  (defun fun_callback (key value ref-list)
    (cond ((= key "txt")
           (set ref-list (subst (cons "txt" value) (assoc "txt" (eval ref-list)) (eval ref-list)))
           )
          ((= key "chk")
           (mode_tile "txt" (atoi value))
           (set ref-list (subst (cons "chk" value) (assoc "chk" (eval ref-list)) (eval ref-list)))
           )
          ) ;_ end of cond
    ) ;_ end of defun
  (setq dcl_file   (strcat (vl-string-right-trim "\\" (getenv "temp")) "\\dlg.dcl")
        dcl_handle (open dcl_file "w")
        ) ;_ end of setq
  (foreach item '("dlg:dialog{label=\"test\";" "	:toggle{key=\"chk\";label=\"check\";}" "	:edit_box{key=\"txt\";}" "	ok_cancel;" "	}")
    (write-line item dcl_handle)
    ) ;_ end of foreach
  (close dcl_handle)
  (setq dcl_lst '(("chk") ("txt"))
        dcl_id  (load_dialog dcl_file)
        ) ;_ end of setq
  (new_dialog "dlg" dcl_id "(fun_callback $key $value 'dcl_lst)")
  (action_tile "accept" "(done_dialog 1)")
  (action_tile "cancel" "(done_dialog 0)")
  (setq dcl_res (start_dialog))
  (unload_dialog dcl_id)
  (if (= dcl_res 1)
    dcl_lst
    ) ;_ end of if
  ) ;_ end of defun
Спасибо. Только как я понял, что в самом DCL окне все окна активные. А уже непосредственно в lisp я заставляю замораживать и размораживать окна ,в зависимости что выберет пользователь?
protorgovec на форуме вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 09.08.2018, 10:22
#32
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 35,618


Почти все контролы в диалоге по умолчанию активные. Это уже программист решает, что активно, а что нет. И почему
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 09.08.2018, 13:29
#33
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 78


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Почти все контролы в диалоге по умолчанию активные. Это уже программист решает, что активно, а что нет. И почему
Составил короткий dcl
Код:
[Выделить все]
 GOST332592015: dialog {label = "Исходные данные"; key = "t1";
    : spacer{height=1;}
    : popup_list {label = "Тип фланца:"; key = "eb_Tip"; edit_width=3; list=" \n01\n02\n03\n04\n11\n21";}
    : popup_list {label = "Материал фланца:"; key = "eb_Mat"; edit_width=13; list=" \n1 - сталь\n2 - серый чугун\n3 - ковкий чугун";}
    : spacer{height=1;}
    ok_cancel;
}
Все равно не могу понять как заставить второе окно активироваться только в одном варианте. Если тип фланца любой кроме 21, то материал фланца не нужен. А если тип 21, то материал фланца активировался. Не по галочке, а именно смотря что ввести в тип

----- добавлено через ~1 ч. -----
Помогите кто может!!! Не понимаю я!
Есть у меня программно:
Код:
[Выделить все]
 (initget 1 "01 02 03 04 11 21")
(setq Tip (atof (getkword "\n Тип фланца [01/02/03/04/11/21] Tip >: ")))

(initget 1 "1 2 3")
(if (= Tip 21) (setq Mat (atof (getkword "\n Материал [1 - сталь/2 - серый чугун/3 - ковкий чугун] Mat >: "))))
Все хорошо. Но вот не могу я сделать это диалоговым окном.
Получается только так
Код:
[Выделить все]
 GOST332592015: dialog {label = "Исходные данные"; key = "t1";// наименование диалога

    : spacer{height=1;} // вставка одной пустой строки
    
    : popup_list {label = "Тип фланца:"; key = "eb_Tip"; edit_width=3; list=" \n01\n02\n03\n04\n11\n21";}
    : popup_list  {label = "Материал фланца:"; key = "eb_Mat"; edit_width=13; list=" \n1 - сталь\n2 - серый чугун\n3 - ковкий чугун";}

    : spacer{height=1;}   // вставка пустой строки

    ok_cancel;   // добавление кнопок ОК и Отмена
}  // окончание диалога
И когда открываю это диалоговое окно
Код:
[Выделить все]
 (setq dcl_id (load_dialog "GOST332592015.dcl")) ;загружаем файл DCL
(if (not (new_dialog "GOST332592015" dcl_id)) (exit)) ;проверка существования диалога
(action_tile "ok" "(dannie) (done_dialog 1)") ;если нажата кнопка "ok"
(action_tile "cancel" "(done_dialog 0)") ;если нажата кнопка "cancel"
(setq ddi (start_dialog))
(unload_dialog dcl_id) ;выгружаем диалоговое окно
(defun dannie ()
(setq Tip (atoi (get_tile "eb_Tip")))
(setq Mat (atoi (get_tile "Mat")))
)
Переменные Tip и Mat он не определяет, пишет что не известно, пишет что неверный тип аргумента. Хотя все по примеру сделал который мне присылали.
protorgovec на форуме вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 09.08.2018, 15:12
#34
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 5,070


Имхо, хотите нормальные динамические диалоги:
1. Делайте диалоги на других языках и вызывайте их из лиспа.
2. Слезайте с лиспа - ваши задачи стали выходить за его пределы.
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 09.08.2018, 15:16
#35
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 78


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Имхо, хотите нормальные динамические диалоги:
1. Делайте диалоги на других языках и вызывайте их из лиспа.
2. Слезайте с лиспа - ваши задачи стали выходить за его пределы.
Например? Какой язык тогда мне более подходит? Хотя, наверное любой, так как я в лиспе то не бум бум, а остальные меня с ума сведут
protorgovec на форуме вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 09.08.2018, 15:22
#36
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 5,070


Естественно, рекомендовал бы .Net Но даже VBA с контролами чуть ли не 20-летней давности дает готовые стандартные средства для вашей задачи - накидываете на форму, связываете с данными и обвешиваете обработчиками событий.
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 09.08.2018, 15:22
#37
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 78


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Имхо, хотите нормальные динамические диалоги:
1. Делайте диалоги на других языках и вызывайте их из лиспа.
2. Слезайте с лиспа - ваши задачи стали выходить за его пределы.
Мне программа для автокада нужна, как я с лиспа слезу?
protorgovec на форуме вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 09.08.2018, 15:26
#38
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 5,070


Цитата:
Сообщение от protorgovec Посмотреть сообщение
Мне программа для автокада нужна, как я с лиспа слезу?
в акаде альтернатива VBA (с установкой энаблера при необходимости), вне акада - .Net и ObjectARX в сторонних средствах разработки (visual studio) с подгрузкой готовых *.dll/*.arx в акад.
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 09.08.2018, 15:26
#39
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 78


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Естественно, рекомендовал бы .Net Но даже VBA с контролами чуть ли не 20-летней давности дает готовые стандартные средства для вашей задачи - накидываете на форму, связываете с данными и обвешиваете обработчиками событий.
а что за .net?
protorgovec на форуме вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 09.08.2018, 15:31
#40
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 5,070


Цитата:
Сообщение от protorgovec Посмотреть сообщение
а что за .net?
Посмотрите - огромное количество готовых функций, на базе которых можно реализовать уже свои непосредственные задачи. А не искать очередной велосипед. Этот Фреймворк есть на любом компе - без него акад просто не запустится.

----- добавлено через ~13 мин. -----
Ну и сам Net Api для акада.
Есть официальный русскоязычный сайт разработчиков.
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Autolisp ограничить ввод для пользователя

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Autolisp: как получить последний ввод (команду, координаты точек)? studentarh LISP 49 15.08.2013 11:52
Ввод объекта в эксплуатацию andrew.g Прочее. Архитектура и строительство 7 12.07.2013 16:28
DYNMODE (Системная переменная динамический ввод) sdv79 Справочник команд 0 10.06.2012 17:17
Приямок ("кессон") скважины водоснабжения. Гидроизоляция, ввод трубы. Андрей О Конструкции зданий и сооружений 2 27.05.2011 23:52
Динамический ввод или демонический ввод? TheBuTeK AutoCAD 20 13.10.2005 09:36

|| Главная || Каталог САПР || Тендеры || Публикации || Объявления || Биржа труда || Download || Галерея ||
|| Библиотека || Кунсткамера || Каталог предприятий || Контакты || Файлообменник || Блоги ||