Тема: Выбор объекта наведением

Прошу у ВСЕХ совета , как осуществить на VBA метод выбора примитива способом наведения (как осуществляют многие разработчики приложений) и одновременного изменения его цвета (засвечивания).
Спасибо.

Re: Выбор объекта наведением

поподробнее

Re: Выбор объекта наведением

Ни на VBA ни на Lisp-е такого не сделать. Это  возможно только в ObjectARX.
Там для этого есть соответствующий класс AcEdInputPointMonitor.

Re: Выбор объекта наведением

> Игорь
на счёт VBA не скажу - не знаю, а на Autolisp это делается элементарно (grread ...).

Re: Выбор объекта наведением

> spook
Горячиться не надо. Если можно, код скиньте. Хотя я уверен, что это только болтология.

Re: Выбор объекта наведением

(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
на извинения "смелости" хватит?

Re: Выбор объекта наведением

> spook
А пока не за что извиняться. Вы вопрос прочитайте. Если будет работающий код - извинюсь всенепременно, не волнуйтесь.

Re: Выбор объекта наведением

совсем не удивлён - всё, как обычно

Re: Выбор объекта наведением

> spook
[rus]Prekrasnyjj kod, i rabotaet.[/rus]

Re: Выбор объекта наведением

> spook
Прекрасныйй код, и работает! Спасибо за кхорошую идею.

Re: Выбор объекта наведением

Исходник хорош,но как бы реализовать одиночный выбор с отменой  выбора при отводе прицела от объекта.

Re: Выбор объекта наведением

Владимир пишет:

как бы реализовать одиночный выбор с отменой выбора при отводе прицела от объекта

Легче лёгкого - саму малость код изменить:

(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

Re: Выбор объекта наведением

Спасибо.ВСЁ ПРОСТО ОТЛИЧНО.То что и требовалось.

Re: Выбор объекта наведением

> spook

> spook
!!!!!!
Ну не знаю как там всегда. Я же сказал, что извинусь. По сему, снимаю шляпу и приношу Вам уважаемый spook свои извинения, был не прав.

Re: Выбор объекта наведением

А как же на счет VBA? Можно ли такие вот штуки там сделать?

Re: Выбор объекта наведением

> ssn
Рискуя опять сесть в лужу, все же выскажусь. Если решение возможно только способом, предложенным spook, т. е. отслеживая положение курсора (а похоже это именно так), то с помощью ActiveX (не только VBA, кстати) этого сделать нельзя. Нет в объектной модели АКАДа такого метода (свойства).
Возможно (подчеркиваю, только возможно) здесь может помочь WinAPI функция GetCursorPos, которая возвращает экранные координаты курсора. Но лично я ничего путного предложить не могу, т. к. понятия не имею как перевести экранные координаты в реальные.

Re: Выбор объекта наведением

Вот именно, функция должна считывать координаты курсора в режиме Real Time. В ActiveX таких методов нет. Да и с применением низкоуровневой функции grread нужно быть очень осторожным. Не забывать, что она блокирует все устройства ввода и указания, т.е.  блокируется  ввод с командной строки, из тулбаров, из меню.(не будут работать прозрачные команды, включкение/отключение объектной привязки и.т.д.). Все эти вводы нужно обрабатывать программно. Зуммирование чертежа возможно только колесом мыши, да и то такая возможность появилась в 2000 версии. Возвращаемые значения функции также зависят от текущей конфигурации аппаратных средств компьютера и версии Автокада.