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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Вывод всплывающего комментария ToolTip под курсор мыши:

Вывод всплывающего комментария ToolTip под курсор мыши:

Ответ
Поиск в этой теме
Непрочитано 11.01.2008, 19:26 #1
Вывод всплывающего комментария ToolTip под курсор мыши:
Supermax
 
Руководитель фирмы
 
Москва
Регистрация: 28.03.2007
Сообщений: 1,831

(vl-load-com)
(setq svr (vlax-get-or-create-object "Internet.HHCtrl"))
(vlax-invoke-method svr 'TextPopup " Вот, какая полезная штука! \n и слеш n работает \n и наверное многое другое тоже " "" "1" "1" "1" "1")

Вот от сюда:
http://forum.script-coding.info/viewtopic.php?id=218

Это конечно не функция, но я думаю, что всем понятно, что можно тыкая в объект получать в таком виде его данные под курсор мыши.

Последний раз редактировалось Supermax, 11.01.2008 в 19:46.
Просмотров: 7370
 
Непрочитано 11.01.2008, 20:13
#2
Post

конструктор
 
Регистрация: 29.07.2005
Ростов-на-Дону
Сообщений: 1,095
<phrase 1=


а пример использования?
__________________
С уважением!!!
Post вне форума  
 
Автор темы   Непрочитано 11.01.2008, 21:37
#3
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Ну, к примеру, можно написать функцию, которая читает имена блоков, когда ты в них тыкаешь и вот такой красивой картинкой их высвечивает. Можно ругательные сообщения выкидывать при не корректных действиях. Да, по моему, я ее где-то встречал, да забыл где напрочь. Вот опять нашел.
Supermax вне форума  
 
Непрочитано 11.01.2008, 22:55
#4
Кулик Алексей aka kpblc
Moderator

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


"Тыкая" в объект так просто ничего не сделаешь. Надо (ЯТД) рисовать реактор на изменение набора (это как минимум), скорее всего, понадобится отслеживать координаты указателя мыши, плюс до хрена всякого разного. ИМХО достаточно обойтись простой гиперссылкой. Не фонтан, конечно, средство, но уж лучше чем с нуля самостоятельно что-то делать.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.01.2008, 12:03
#5
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Эта штука выводит надпись в то место, в котором стоит курсор, а поскольку тыкая в объект курсор находтся именно на нем, то и надпись появится на объекте. Так что координаты отслеживать не надо. Гиперссылка появляется автоматом, а это не всегда надо. Скорее всего вообще не надо. Да и тухнет, как только слазишь с объекта. А тут появляется только при срабатывании лиспа, то есть при заранее запланированных действиях и пропадает, только если еще раз ткнуть курсором в другое место. Я с аргументами еще не разобрался, но думаю, что со временем разберусь.
Supermax вне форума  
 
Непрочитано 12.01.2008, 14:42
#6
Кулик Алексей aka kpblc
Moderator

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


Тебе объект надо создавать когда? Правильно, когда ты "тыкнул" на объект. То есть реактор на изменение набора. При всем при этом создавать СОМ-объект внутри реактора нельзя, т.к. после 2-3 сотен таких созданий/удалений (объект надо удалять, это обязательно!) AutoCAD может сказать "ква". Обязательно возникнет вопрос о корректном удалении объекта - это же надо делать в момент закрытия файла, то есть прописывать еще и командные реакторы. Головняк...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.01.2008, 15:24
#7
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Ай-яй-яй, яй-яй, яй-яй!
Никаких реакторов!

Например:
Есть функция, которая по указанию entsel реформирует указанный объект. Достаточно в конец функции дописать эти строки и после выполнения действия над объектом, рядом с объектом появится эта надпись, с содержимым, какое укажешь. Пропадает она автоматически, как только кликаешь мышкой или Esc.

Последний раз редактировалось Supermax, 12.01.2008 в 15:40.
Supermax вне форума  
 
Автор темы   Непрочитано 12.01.2008, 15:41
#8
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Пример:
Код:
[Выделить все]
(setq nab (entget (car (entsel))))
(setq svr (vlax-get-or-create-object "Internet.HHCtrl"))
(vlax-invoke-method svr 'TextPopup (vl-princ-to-string nab) "" "1" "1" "1" "1")
Есть одно ограничение, работает только в главном мониторе. Если два монитора, то кад должен висеть в главном (где кнопка "пуск")
Supermax вне форума  
 
Непрочитано 16.01.2008, 08:43
#9
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Такое впечатление, что никто не слышал о пакете BUBBLE от AsuniCAD. http://www.bubblecad.com/en/bubble.htm
Лентяй вне форума  
 
Непрочитано 31.01.2008, 21:48
#10
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Лентяй Посмотреть сообщение
Такое впечатление, что никто не слышал о пакете BUBBLE от AsuniCAD. http://www.bubblecad.com/en/bubble.htm
Большое спасибо за ссылку!
Посмотрел и сделал аналог на лиспе...
Елпанов Евгений вне форума  
 
Непрочитано 01.02.2008, 09:11
#11
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Большое пожалуйста! Я этой примочкой пользуюсь, начиная с ACAD-2000.
Лентяй вне форума  
 
Непрочитано 01.02.2008, 14:06
#12
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Лентяй Посмотреть сообщение
Большое пожалуйста! Я этой примочкой пользуюсь, начиная с ACAD-2000.
Так я и сделал аналог на чистом лиспе, должен работать на любом акаде с 2000...
А спасибо, за идею, только увидев понял, как ее мне не хватало!
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 07.02.2008, 19:09
#13
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Выносочка конечно хороша, что и говорить. Правда данные в ней мне незачем, но ничего. Только вот один не хороший момент всплыл. У меня модель очень большая с уймой внешних ссылок, я по ней поводил мышкой - кад слетел. Я еще раз загрузился, опять мышкой быстрое движение сделал и кад опять слетел. Удалил эту прогу и все стало на место. Глючит, однако.
Евгений, конечно, своей лиспиной не поделится. Очень-ца интересно, что у него в качестве поля выноски? Мое, или из dll-ки к этой bubble вытащил?
Supermax вне форума  
 
Непрочитано 07.02.2008, 19:25
#14
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Supermax Посмотреть сообщение
Евгений, конечно, своей лиспиной не поделится. Очень-ца интересно, что у него в качестве поля выноски? Мое, или из dll-ки к этой bubble вытащил?
У меня чистый лисп, я же сказал!
Другими словами, я полностью отрисовываю фон и текст с помощью grvecs, а по поводу вывода текста, я не делал полного аналога, те.. у меня программа, которая может выдать в курсор всплывающее окно с текстом, фон и текст могут быть разных цветов.. Подсказка привязана к курсору, все всегда в плоскости экрана и не зависит от систем координат, текущего вида и.т.д...
PS. Шрифт векторизовал пиксельный, 12 пунктов... На насыщенных чертежах, глюки отрисовки не видно. Если выводить подсказку с большим текстом (строчек 20, по пол экрана каждая), то при быстрых движениях мыши, подсказка, привязанная к курсору, заметно мигает... При выводе статичной подсказки, без перетаскивания, таких проблем нет...
Елпанов Евгений вне форума  
 
Непрочитано 07.02.2008, 19:29
#15
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Елпанов Евгений Посмотреть сообщение
У меня чистый лисп...
Я имел в виду, что именно лисп, т.е. без VLA, VL, VLX вообще...
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 07.02.2008, 19:46
#16
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Ты моей смерти хочешь? Ты хочешь сказать, что форму выноски, точнее ее контур лиспом сделал? Да еще и закрасил? И она бегает по предметам как bubble? А при этом можно и действия совершать?
Я понимаю конечно, что за каждым выложенным лиспом открываются разной мелкости и крупности профессиональные секреты, но ведь потребность в прогаммисте возникает тогда, когда появляется необходимость в количестве, а не отнюдь не в качестве и гениальности требуемой работы. Да хоть все секреты выложи, а большую прогу написать не сможешь, поскольку для этого нужен кругозор и объем запомненных приемов. Этого можно достичь только длительной практикой. У тебя такая практика есть и на сайт ты ее при всем своем желании не выложишь. Так что делись .....! Удовлетвори любопытство. Пасалуста!
Supermax вне форума  
 
Непрочитано 07.02.2008, 20:03
#17
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Давай подойдем к этому вопросу с другого конца...
Для начала, загляни по ссылке, эта старая темка.
тут про grread много написано, сразу извиняюсь, все не по русски.
Потом, обрати внимание на некоторые коды, которые отслеживают местоположение курсора и выводят в это место картинку, например часики:
Код:
[Выделить все]
(defun c:clo (/ A1 GR I S)
  ;;  ElpanovEvgeniy, Russia, Moscow, 2006
  ;;  Clock that show time in the screen
  (setq a1 (/ pi 30))
  (while (= (car (setq gr (grread nil 5 1))) 5)
    (setq s  (/ (getvar "viewsize") 8.)
          gr (trans (cadr gr) 1 3)
          i  0
    ) ;_  setq
    (redraw)
    (grvecs ;SS
      '(2 (-0.01 0.) (1. 0.))
      ((lambda (a)
         ((lambda (c s x y sc)
            (list (list c (- s) 0. x) (list s c 0. y) (list 0. 0. sc 0.) '(0. 0. 0. 1.))
          ) ;_  lambda
           (* (cos a) s)
           (* (sin a) s)
           (car gr)
           (cadr gr)
           s
         )
       ) ;_  lambda
        (- (/ pi 2.) (* (/ pi 30.) (atof (menucmd "M=$(edtime,$(getvar,date),SS.MSEC)"))))
      )
    ) ;_  grvecs
    (grvecs ;MM
      '(3 (-0.01 0.)    (0.8 0.)
        3 (-0.01 -0.01) (0.6 -0.01)
        3 (-0.01 0.01)  (0.6 0.01)
        3 (-0.01 -0.02) (0.4 -0.02)
        3 (-0.01 0.02)  (0.4 0.02)
        3 (0.4 -0.02)   (0.8 0.)
        3 (0.4 0.02)    (0.8 0.)
       )
      ((lambda (a)
         ((lambda (c s x y sc)
            (list (list c (- s) 0. x) (list s c 0. y) (list 0. 0. sc 0.) '(0. 0. 0. 1.))
          ) ;_  lambda
           (* (cos a) s)
           (* (sin a) s)
           (car gr)
           (cadr gr)
           s
         )
       ) ;_  lambda
        (- (/ pi 2.) (* (/ pi 30.) (atoi (menucmd "M=$(edtime,$(getvar,date),MM)"))))
      )
    ) ;_  grvecs
    (grvecs ;H
      '(1 (-0.01 0.)    (0.5 0.)
        1 (-0.01 -0.01) (0.4 -0.01)
        1 (-0.01 0.01)  (0.4 0.01)
        1 (-0.01 -0.02) (0.3 -0.02)
        1 (-0.01 0.02)  (0.3 0.02)
        1 (-0.01 -0.03) (0.2 -0.03)
        1 (-0.01 0.03)  (0.2 0.03)
        1 (0.2 -0.03)   (0.5 0.)
        1 (0.2 0.03)    (0.5 0.)
       )
      ((lambda (a)
         ((lambda (c s x y sc)
            (list (list c (- s) 0. x) (list s c 0. y) (list 0. 0. sc 0.) '(0. 0. 0. 1.))
          ) ;_  lambda
           (* (cos a) s)
           (* (sin a) s)
           (car gr)
           (cadr gr)
           s
         )
       ) ;_  lambda
        (- (/ pi 2.)
           (* (/ pi 6.)
              (+ (atoi (menucmd "M=$(edtime,$(getvar,date),H)"))
                 (/ (atoi (menucmd "M=$(edtime,$(getvar,date),MM)")) 60.)
              ) ;_  +
           ) ;_  *
        ) ;_  -
      )
    ) ;_  grvecs
    (repeat 4
      (grvecs
        '(6 (0.8 0.)     (0.82 0.02)
          6 (0.82 0.02)  (1. 0.02)
          6 (1. 0.02)    (1. -0.02)
          6 (1. -0.02)   (0.82 -0.02)
          6 (0.82 -0.02) (0.8 0.)
         )
        ((lambda (c s x y sc)
           (list (list c (- s) 0. x) (list s c 0. y) (list 0. 0. sc 0.) '(0. 0. 0. 1.))
         ) ;_  lambda
          (* (cos (* a1 i)) s)
          (* (sin (* a1 i)) s)
          (car gr)
          (cadr gr)
          s
        )
      ) ;_  grvecs
      (repeat 3
        (grvecs
          '(5 (1. 0.01) (0.92 0.01) 5 (1. -0.01) (0.92 -0.01)5 (0.92 0.01)(0.89 0.) 5 (0.92 -0.01)(0.89 0.))
          ((lambda (c s x y sc)
             (list (list c (- s) 0. x) (list s c 0. y) (list 0. 0. sc 0.) '(0. 0. 0. 1.))
           ) ;_  lambda
            (* (cos (* a1 i)) s)
            (* (sin (* a1 i)) s)
            (car gr)
            (cadr gr)
            s
          )
        ) ;_  grvecs
        (repeat 5
          (grvecs
            '(3 (-0.25 1.2) (0 1.3) 3 (0 1.3) (0.25 1.2) 3 (0.25 1.2) (0 1.1) 3 (0 1.1) (-0.25 1.2))
            ((lambda (c s x y sc)
               (list (list c (- s) 0. (+ s s (* s 0.5) x))
                     (list s c 0. y)
                     (list 0. 0. sc 0.)
                     '(0. 0. 0. 1.)
               ) ;_  list
             ) ;_  lambda
              (* (cos (* a1 i 1)) s)
              (* (sin (* a1 i 1)) s)
              (car gr)
              (cadr gr)
              s
            )
          ) ;_  grvecs
          (grvecs
            '(5 (0.9 0) (1 0)); 5 (1.05 -0.9) (1.05 0.9)
            ((lambda (c s x y sc)
               (list (list c (- s) 0. x) (list s c 0. y) (list 0. 0. sc 0.) '(0. 0. 0. 1.))
             ) ;_  lambda
              (* (cos (* a1 i)) s)
              (* (sin (* a1 i)) s)
              (car gr)
              (cadr gr)
              s
            )
          ) ;_  grvecs
          (setq i (1+ i))
        ) ;_  repeat
      ) ;_  repeat
    ) ;_  repeat
  ) ;_  while
  (redraw)
)
Потом, подумай, как получить размер пикселя, чтоб две параллельные и горизонтальные линии, на расстоянии пиксела, сливались в одну пошире, потом еще чуток математики и ты сделаешь плашку...
Кстати, эту плашку сразу можно использовать как прогресс бар, т.е. для индикации длительных процессов.
Потом, денек посидишь, и у тебя будет некоторое количество символов, в пиксельных размерах. Например, я векторизовал 180 символов, причем в ручную, только горизонтальными линиями. Сразу советую брать шрифт с единым размером символов, например, я взял Fixedsys, привык к нему по лисп редактору. У него, при 12 кегле, каждый символ вписан в прямоугольник 8*16 пикселей.
Короче, когда дойдешь до этого места, ты уже сам сможешь все сделать. Если не сможешь, выкладывай код, буду по коду советы давать...
PS. если не веришь, что я это сделал, завтра на работе сделаю анимированный скриншот и выложу здесь.
Елпанов Евгений вне форума  
 
Непрочитано 07.02.2008, 20:11
#18
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Supermax Посмотреть сообщение
Так что делись .....! Удовлетвори любопытство. Пасалуста!
Несколько уважаемых людей, написали такие программы на С++ и продают. Не ужели, я буду им перебегать дорогу?
Кстати, ты меня не очень верно понял, моя программа не исследует, что находится под курсором - это не сложно, но было не важно для меня. Моя программа может просто выводить подсказку в любое место с любым текстом. К тому же, я сам могу полностью рулить этим процессом, т.е. шрифт, текст, цвет, дополнительные значки, картинки и.т.д. внутри этой подсказки. Думаю, это для меня более ценно, чем видеть параметры элемента под курсором...
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 07.02.2008, 20:32
#19
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Часики безусловно крутые. Как сделать сплошной фон я понял. Как на него выводить текст - тоже.
Как отслеживаешь координаты курсора тоже понял.

Но я бы просто создал объект техт на поле с простой полилинией и в цикле (как у тебя) менял бы им координаты вставки и поворот во всех трех осях, если 3D орбитом окно повернуто. Такой объект можно оставлять на месте куда кликнул, а потом опять переносить в другое место, меняя в самом тексте не только точки вставки и углы поворота, но и сам текст. Я обязательно попробую как-нибудь на днях.
Supermax вне форума  
 
Непрочитано 07.02.2008, 21:15
#20
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Supermax Посмотреть сообщение
Как сделать сплошной фон я понял. Как на него выводить текст - тоже.
Как отслеживаешь координаты курсора тоже понял.
Вот и чудненько!
Ничего не надо выкладывать, все понятно...
Если кто то заинтересуется, тоже разберется по оставленным подсказкам! А если разбираться не захочется, возиться некогда, то можно и прикупить - Лентяй ссылки дал.
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 07.02.2008, 21:20
#21
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Да фигня это, а не прога. Глючит и тоску навевает содержанием.
Supermax вне форума  
 
Непрочитано 07.02.2008, 21:27
#22
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


А по поводу создания фона и текста в виде примитивов, как ты думаешь, почему автодеск не стал таким образом визуализировать гиперссылки?
Есть у этой технологии и темная сторона. Когда она брала надо мной верх, мои проги начинали глючить, скорость падала, появлялись ошибки файла и памяти...
Сейчас я стараюсь вообще не использовать временные примитивы!
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 07.02.2008, 21:36
#23
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Есть еще один способ. Когда делаешь Move или Copy, то визуализация копируемого объекта перемещается вслед за курсором. Если объект не сложный, то прописывается все до мелочей, правда хвост тянется от копируемого места, но все равно можно не доводя дело до самого копирования все время отменять копирование, а потом опять его начинать, указывая начальную точку автоматом, а конечную указанием. И так в цикле.
Supermax вне форума  
 
Непрочитано 07.02.2008, 22:26
#24
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Supermax Посмотреть сообщение
Есть еще один способ. Когда делаешь Move или Copy, то визуализация копируемого объекта перемещается вслед за курсором.
Я уже давно не пользуюсь командами автокада из программ. Это накладывает на программу, слишком много ограничений!
Елпанов Евгений вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Вывод всплывающего комментария ToolTip под курсор мыши:



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Курсор мыши выходит за пределы экрана dextron3 Разное 3 27.12.2007 17:26