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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Управление программой lisp нажатием клавишь

Управление программой lisp нажатием клавишь

Ответ
Поиск в этой теме
Непрочитано 04.06.2016, 13:50 #1
Управление программой lisp нажатием клавишь
zenija2007
 
Регистрация: 18.09.2015
Сообщений: 120

В любом нормальном языке программирования есть возможность считывать нажатия клавиш без вывода специального диалога. Это позволяет, например, прервать цикл по нажатию заданной комбинации клавишь, или вызвать диалоговое окно в любой момент.
Как это реализовать в lisp? Перерыл справку автокада - ничего подобного не нашел, выходит, тут какой-то нестандартный подход.
Просмотров: 2641
 
Непрочитано 04.06.2016, 14:18
1 | #2
Сергей812


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


не надо обижать лисп, в нем есть своя прелесть)
см. функцию grread
Сергей812 вне форума  
 
Автор темы   Непрочитано 04.06.2016, 15:33
#3
zenija2007


 
Регистрация: 18.09.2015
Сообщений: 120


спасибо ) не обижаю, но от разрабов автокада жду любой пакости
zenija2007 вне форума  
 
Непрочитано 05.06.2016, 15:46
#4
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Сообщение от zenija2007 Посмотреть сообщение
В любом нормальном языке программирования есть возможность считывать нажатия клавиш без вывода специального диалога
Это вообще не относится к "нормальному" или "ненормальному языку. Это свойство программ, управляемыми событиями. К языкам программирования не имеет отношения.

Наличие "горячих клавиш" зависит не от языка, а от того, как написан соответствующий "контрол". И, кстати, это свойство может оказаться очень вредным.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 07.06.2016, 02:20
#5
zenija2007


 
Регистрация: 18.09.2015
Сообщений: 120


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Наличие "горячих клавиш" зависит не от языка, а от того, как написан соответствующий "контрол"
ну, скажем, по нажатию горячей клавиши вызвать диалог запущенной и работающей программы. например, при запуске вызываю диалог, задаю настройки, жму ок, затем, скажем, выделяю нужные мне элементы до тех пор, пока не нажму горячую клавишу (после каждого выделения программа обрабатывает объекты, соответственно, все дело происходит в цикле), и тогда происходит выход из цикла и повторный запуск диалога. Никак не пойму, через что это можно сделать. Все функции ввода останавливают работу программы в ожидании ввода. Можно, конечно, обрабатывать любой ввод функцией grread, но тогда привязки не хотят работать.
zenija2007 вне форума  
 
Непрочитано 07.06.2016, 06:46
#6
trir


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


это вопрос не к lisp'у, а AutoCAD'у. Подобные вещи можно делать с помощью NET Jig
trir на форуме  
 
Непрочитано 07.06.2016, 07:10
1 | #7
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Сообщение от zenija2007 Посмотреть сообщение
ну, скажем, по нажатию горячей клавиши вызвать диалог запущенной и работающей программы. например, при запуске вызываю диалог, задаю настройки, жму ок, затем, скажем, выделяю нужные мне элементы до тех пор, пока не нажму горячую клавишу (после каждого выделения программа обрабатывает объекты, соответственно, все дело происходит в цикле), и тогда происходит выход из цикла и повторный запуск диалога. Никак не пойму, через что это можно сделать. Все функции ввода останавливают работу программы в ожидании ввода. Можно, конечно, обрабатывать любой ввод функцией grread, но тогда привязки не хотят работать.
Просто изучите DCL. Там можно всё это сделать - после вызова диалога запустить какой-то процесс (например выбор в цикле, рисование - хоть что). После завершения - возврат в диалог. Всё это можно сделать и на обычном Автолиспе.

Другое дело, что язык диалогов безнадежно устарел. Его придумали в те времена, когда не было визуального программирования с размещением на окне программы разных визуальных элементов и с назначением для них свойств и обработчиков событий. Так в те времена и в любой системе программирования диалоги надо было описывать руками.

Фирма не посчитала нужным развивать "вижуальную" часть Автолиспа, хоть и назвала "Visual Lisp", но ничего "вижуального" в нем нет. Ставку сделали на ObjectArx, VBA, потом .NET. Кроме того, Lisp работает с COM-объектами. Ничего не мешает сделать "вижуальную" часть программы в любой среде программирования с любыми "плюшками" (включая HotKey) и вызывать её из Lisp. Я это делаю на Delphi, но можно хоть на чем.

Что касается приостановки функций ввода, так это и сделано совершенно правильно. Но в момент работы любой get-функции можно ей передать набор ключевых слов, как это и сделано в штатных командах Автокада. И части ключевых слов как раз и будут "горячими клавишами", только в виде букв, а не в виде каких-нибудь Alt-F4.

Да и в самом Автокаде есть "горячие клавиши" для вызова собственных программ. Они прописываются в acad.pgp.
ShaggyDoc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Управление программой lisp нажатием клавишь

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
{Конкурс} Lisp. Задачки для студентов gomer LISP 10 05.01.2011 16:33
Как сделать диалоговое окно, описанное в DCL файле и вызванное Lisp программой, немодальным? E-degtyarev LISP 9 28.05.2010 09:10
Файл, созданный в учебной версии программы с программой на LISP divega AutoCAD 7 20.05.2010 14:12
Управление MySQL из LISP Holon LISP 6 06.12.2007 14:34
Auto Lisp. Помогите с легкой программой. BARS_1985 LISP 6 27.09.2007 11:10