| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

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

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

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

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

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


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

----- добавлено через ~1 мин. -----
У сисадминов попроси права на запись в каталог C:/Program Files/Autodesk/AutoCAD 2015 - тогда сможешь тестировать dcl спокойно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.08.2018, 08:21
#22
protorgovec

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


Цитата:
Сообщение от Кулик Алексей 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
С.-Петербург
Сообщений: 39,787


Им это не понадобится. Ты же проверял, как диалог выглядит, через VLIDE?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.08.2018, 08:26
#24
protorgovec

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


Цитата:
Сообщение от Кулик Алексей 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
С.-Петербург
Сообщений: 39,787


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


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


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

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


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


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

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


Ставишь enabled = false, а в callback-функции меняешь это свойство.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.08.2018, 09:19
#29
protorgovec

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


Цитата:
Сообщение от Кулик Алексей 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
С.-Петербург
Сообщений: 39,787


Код:
[Выделить все]
 (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
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.08.2018, 09:45
#31
protorgovec

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


Цитата:
Сообщение от Кулик Алексей 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
С.-Петербург
Сообщений: 39,787


Почти все контролы в диалоге по умолчанию активные. Это уже программист решает, что активно, а что нет. И почему
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.08.2018, 13:29
#33
protorgovec

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


Цитата:
Сообщение от Кулик Алексей 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
Сообщений: 11,004


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

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


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


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


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

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


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


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


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

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


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


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


Цитата:
Сообщение от 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 Динамические блоки 20 13.10.2005 09:36