Тема: Выбор объекта наведением
Прошу у ВСЕХ совета , как осуществить на VBA метод выбора примитива способом наведения (как осуществляют многие разработчики приложений) и одновременного изменения его цвета (засвечивания).
Спасибо.
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Выбор объекта наведением
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Прошу у ВСЕХ совета , как осуществить на VBA метод выбора примитива способом наведения (как осуществляют многие разработчики приложений) и одновременного изменения его цвета (засвечивания).
Спасибо.
Ни на VBA ни на Lisp-е такого не сделать. Это возможно только в ObjectARX.
Там для этого есть соответствующий класс AcEdInputPointMonitor.
> Игорь
на счёт VBA не скажу - не знаю, а на Autolisp это делается элементарно (grread ...).
> spook
Горячиться не надо. Если можно, код скиньте. Хотя я уверен, что это только болтология.
(defun c:demo (/ contin key cur ssel) (vl-load-com) (setq contin t ssel (ssadd) ) (princ "\nPick point or press any key for exit") (while (or (= key 5) contin) (setq key (car (setq now (grread t 4 2)))) (cond ((= key 5) (if (setq cur (ssget (cadr now))) (progn (redraw (setq cur (ssname cur 0)) 3) (ssadd cur ssel) ) ) ) (t (setq contin nil)) ) ;_ end of cond ) ;_ end of while ssel ) ;_ end of defun
> bender
на извинения "смелости" хватит?
> spook
А пока не за что извиняться. Вы вопрос прочитайте. Если будет работающий код - извинюсь всенепременно, не волнуйтесь.
> spook
[rus]Prekrasnyjj kod, i rabotaet.[/rus]
> spook
Прекрасныйй код, и работает! Спасибо за кхорошую идею.
Исходник хорош,но как бы реализовать одиночный выбор с отменой выбора при отводе прицела от объекта.
как бы реализовать одиночный выбор с отменой выбора при отводе прицела от объекта
Легче лёгкого - саму малость код изменить:
(defun c:demo (/ contin key cur old) (vl-load-com) (setq contin t) (princ "\nPick point or press any key for exit") (while (or (= key 5) contin) (setq key (car (setq now (grread t 4 2)))) (cond ((= key 5) (if (setq cur (ssget (cadr now))) (redraw (setq cur (ssname cur 0)) 3) ) ;_ end of if (if (and old (not (eq old cur))) (redraw old 4) ) ;_ end of if (setq old cur) ) (t (setq contin nil)) ) ;_ end of cond ) ;_ end of while cur ) ;_ end of defun
Спасибо.ВСЁ ПРОСТО ОТЛИЧНО.То что и требовалось.
> spook
> spook
!!!!!!
Ну не знаю как там всегда. Я же сказал, что извинусь. По сему, снимаю шляпу и приношу Вам уважаемый spook свои извинения, был не прав.
А как же на счет VBA? Можно ли такие вот штуки там сделать?
> ssn
Рискуя опять сесть в лужу, все же выскажусь. Если решение возможно только способом, предложенным spook, т. е. отслеживая положение курсора (а похоже это именно так), то с помощью ActiveX (не только VBA, кстати) этого сделать нельзя. Нет в объектной модели АКАДа такого метода (свойства).
Возможно (подчеркиваю, только возможно) здесь может помочь WinAPI функция GetCursorPos, которая возвращает экранные координаты курсора. Но лично я ничего путного предложить не могу, т. к. понятия не имею как перевести экранные координаты в реальные.
Вот именно, функция должна считывать координаты курсора в режиме Real Time. В ActiveX таких методов нет. Да и с применением низкоуровневой функции grread нужно быть очень осторожным. Не забывать, что она блокирует все устройства ввода и указания, т.е. блокируется ввод с командной строки, из тулбаров, из меню.(не будут работать прозрачные команды, включкение/отключение объектной привязки и.т.д.). Все эти вводы нужно обрабатывать программно. Зуммирование чертежа возможно только колесом мыши, да и то такая возможность появилась в 2000 версии. Возвращаемые значения функции также зависят от текущей конфигурации аппаратных средств компьютера и версии Автокада.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Выбор объекта наведением
Форум работает на PunBB, при поддержке Informer Technologies, Inc