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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Подавить подсказку "Команда:"

Подавить подсказку "Команда:"

Ответ
Поиск в этой теме
Непрочитано 19.08.2005, 13:26 #1
Подавить подсказку "Команда:"
===AAA===
 
г. Норильск
Регистрация: 15.08.2005
Сообщений: 616

Всем привет!

Почему-то при старте АКАД-2002 конструкция

(defun S::STARTUP

....

(command "_.VSLIDE" "*d:\\dream\\news")
(command "_.VSLIDE")
(setq p (strcat
"\nЕсли Вы все прочитали и - главное! - запомнили, то ..."
"\nВведите Ключевое Слово: "
))
(initget 1 "LASER щит 5100")(getkword p)

...

)

работает некорректно. Выглядит это, как:

==============================================
Если Вы все прочитали и - главное! - запомнили, то ...
Введите Ключевое Слово:
Команда:
==============================================

Т.е. вылазит слово "Команда: ", на которую пользователь и
вводит некое слово. Выглядит нелепо, но все работает.

В 14-м АвтоКАДе эта же конструкция выдавала:

==============================================
Если Вы все прочитали и - главное! - запомнили, то ...
Введите Ключевое Слово:
==============================================

Т.е. подсказка выглядела совершенно логично. Нужно

а) понять, откуда вылазит эта "Команда: "
б) подавить ее.

Вариант с (setvar "nomutt" 1), в принципе, проблему решает,
но если "дурень-пользователь" введет неверное слово, то
повторная подсказка функции (getkword)
"Введите Ключевое Слово: "
также подавляется, а это не есть хорошо.

Идеи есть?
Просмотров: 4234
 
Непрочитано 19.08.2005, 13:46
#2
Кулик Алексей aka kpblc
Moderator

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


ИМХО:
Перед (initget ...) подавить cmdecho и nomutt, а потом восстановить. Потребуется запрет по выходу Esc или отлов ошибок.
Если без этого, то
Код:
[Выделить все]
(setq _cmdecho_ (getvar "cmdecho"
  _nomutt_ (getvar "nomutt"))
(initget <...>) 
(<...>)
(mapcar 'setvar (list "cmdecho" "nomutt") (list _cmdecho_ _nomutt_))
Написно "на коленке", так что проверь скобки.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.08.2005, 15:20
#3
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Дык, это-то все уже сделано... Я же говорю - "nomutt"
подавляет не только слово "Команда: ", но и повтор
подсказки функции (getkword p) на неверный ввод,
чего не хотелось бы.

Переиначу вопрос: "Есть ли средство (например, системная
переменная), позволяющее временно заменить подсказку
"Команда" на что-то другое - в моем случае на "".

Сообщения других команд/функций при этом должны выводиться в обычном режиме" ?
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 19.08.2005, 15:31
#4
Кулик Алексей aka kpblc
Moderator

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


(prompt ...) пробовал?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.08.2005, 15:41
#5
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Я, конечно, дико извиняюсь, но что-то не догоняю... :-(
Вечер, наверное...

Еще раз - медленно и печально. Конструкция:
=======================================
(command "_.VSLIDE" "*d:\\dream\\news")
(command "_.VSLIDE")
(setq p (strcat
"\nЕсли Вы все прочитали и - главное! - запомнили, то ..."
"\nВведите Ключевое Слово: "
))
($modes '("nomutt"))(setvar "nomutt" 1)
(princ p)
(initget 1 "LASER щит 5100")(getkword p)
(setvar "nomutt" 0)
=======================================

работает нормально. Функция ($modes) - защита от ESC.
Не отображается лишь повтор подсказки на неверный
ввод ключевого слова.

Я, конечно, могу все это безобразие завернуть в (while ...),
даже отказавшись от (getkword), но хочется более красивого
решения.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 19.08.2005, 16:03
#6
Кулик Алексей aka kpblc
Moderator

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


Так, я ничего не понимаю. Конструкция
Код:
[Выделить все]
(command "_.VSLIDE" "*d:\\dream\\news")
(command "_.VSLIDE")
(setq p (strcat
	  "\nЕсли Вы все прочитали и - главное! - запомнили, то ..."
	  "\nВведите Ключевое Слово [LASER/щит/5100] : "
	  ))
(initget 1 "LASER щит 5100")
(getkword p)
вываливает (без изменения cmdecho, nomutt, prompt)
Код:
[Выделить все]
Если Вы все прочитали и - главное! - запомнили, то ...
Введите Ключевое Слово: [LASER/щит/5100]dfsfg

Invalid option keyword.

Если Вы все прочитали и - главное! - запомнили, то ...
Введите Ключевое Слово: [LASER/щит/5100]ertwerwrzvzcbvxcsfgdfhdgh

Invalid option keyword.
Проверено на ACAD 2005.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.08.2005, 16:09
#7
AY

webcad.pro
 
Регистрация: 06.01.2005
Московская обл.
Сообщений: 501


У меня в 2000, 2002 тоже все работает норамально (проверял без вставки в S::STARTUP)

Может попробовать в конец строки вставлять символ BS.
AY вне форума  
 
Автор темы   Непрочитано 19.08.2005, 16:37
#8
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Привет!

Спасибо, что проверили на своем 2002. У меня на 14-м тоже
все работало нормально. :-)

Значит, списываю на глюк конкретно моей версии АКАД'а и
оформляю это все красивым (while...).

Всем спасибо.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 20.08.2005, 17:11
#9
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Должен Вас огорчить. Когда выполняется S::STARTUP AutoCAD еще не полностью инициализирован и функции типа (getxxx ...) отрабатывают не совсем "красиво". Простыми методами выкрутиться здесь врядли удастся.
Можно попробовать так (я не проверял):
1)Оформить нужный код с показом слайдов и вводом ключевых слов в виде отдельной
функции (например, ShowSlides)
2) В самом конце S::STARTUP вставить код:
Код:
[Выделить все]
(vl-load-com)
(setq adoc (vla-get-activedocument (vlax-get-acad-object)))
(setq cmd "(ShowSlides) ") 
(vlax-invoke-method adoc 'Sendcommand cmd)
Александр Ривилис вне форума  
 
Непрочитано 20.08.2005, 22:44
#10
ShaggyDoc

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


Александр Ривилис прав. В S::STARTUP еще много подлостей скрывается, например с установкой переменных. Лучше вообще от нее отказаться, а обязательный код выполнять в ACADxxx.lsp или acaddoc.lsp
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 22.08.2005, 05:58
#11
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Привет!

Все решилось достаточно просто:
=============================================
(command "_.VSLIDE" "*d:\\dream\\news")
(command "_.VSLIDE")
(princ "\nЕсли Вы все прочитали и - главное! - запомнили, то ...")
($modes '("nomutt"))(setvar "nomutt" 1)
(setq p0 t)
(while p0
(princ "\nВведите Ключевое Слово: ")
(setq p3 (strcase(getstring)))
(if (or (= p3 "LASER")(= p3 "5100"))(setq p0 nil)
(princ "\nК сожалению, Вы не внимательно прочитали сообщение!"))
)
(setvar "nomutt" 0)
=============================================

А "S::STARTUP" - это "тяжкое наследие прошлого", когда при
старте (command ...) можно было выполнять только в ней. :-)

В любом случае - всем спасибо за отзывы.

Кстати, раз пошла такая пьянка. Кто как знакомит пользователей
с новыми наработками? У меня, допустим, это типичная
многолетняя проблема - хелп не читают, новых возможностей
не знают, а когда случайно кому-нибудь из пользователей их
покажешь - "А где ты раньше-то был! А мы так мучились..." :-)
__________________
Счастливо, Алексей!
===AAA=== вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Подавить подсказку "Команда:"