Сообщество программистов Autodesk в СНГ

ADN Club => ObjectARX => Тема начата: Sergey_K от 18-05-2020, 14:52:17

Название: AcEdInputPointFilterResult::setNewTooltipString BOLD шрифт
Отправлено: Sergey_K от 18-05-2020, 14:52:17
Код - C++ [Выбрать]
  1. AcEdInputPointFilterResult::setNewTooltipString(L"Как включить/выключить вывод BOLD шрифта?")
Название: Re: AcEdInputPointFilterResult::setNewTooltipString BOLD шрифт
Отправлено: Александр Ривилис от 18-05-2020, 15:30:34
Посмотри эту статью: https://adndevblog.typepad.com/autocad/2013/03/formatting-in-rollover-tip.html
Название: Re: AcEdInputPointFilterResult::setNewTooltipString BOLD шрифт
Отправлено: Sergey_K от 18-05-2020, 15:57:00
Вставка тэгов <Bold> & </Bold> не работает
Код - C++ [Выбрать]
  1. output.setNewTooltipString(_T("<Bold>BOLD</Bold>"));

(https://i.postimg.cc/BXnRXddC/tip.png)
Название: Re: AcEdInputPointFilterResult::setNewTooltipString BOLD шрифт
Отправлено: Александр Ривилис от 18-05-2020, 16:15:07
Вставка тэгов <Bold> & </Bold> не работает
Код - C++ [Выбрать]
  1. output.setNewTooltipString(_T("<Bold>BOLD</Bold>"));
Значит увы. Других способов в ObjectARX нет.
Название: Re: AcEdInputPointFilterResult::setNewTooltipString BOLD шрифт
Отправлено: Sergey_K от 18-05-2020, 16:25:41

Значит увы

А как ж это?
(https://i.postimg.cc/4HHXKPNJ/tip.png)
Название: Re: AcEdInputPointFilterResult::setNewTooltipString BOLD шрифт
Отправлено: Александр Ривилис от 18-05-2020, 16:25:59
А у меня работает:
(https://live.staticflickr.com/65535/49908418123_c1c13cb50a_o.png)

Код - C++ [Выбрать]
  1. Acad::ErrorStatus ToolTipsFilter::processInputPoint(const AcEdInputPoint& input,
  2.   AcEdInputPointFilterResult& output) {
  3.  
  4.   if (input.pickedEntities().length() > 0) {
  5.     output.setNewTooltipString(
  6.       L"Iam]]><LineBreak/>"
  7.       L"<Bold>BOLD</Bold><LineBreak/>"
  8.       L"<![CDATA[Iam]]><LineBreak/>"
  9.       L"<Italic>Italic</Italic><LineBreak/>"
  10.       L"<![CDATA[Iam Normal"
  11.       );
  12.   }
  13.   else output.setNewTooltipString(L"");
  14.   return (Acad::eOk);
  15. }
Название: Re: AcEdInputPointFilterResult::setNewTooltipString BOLD шрифт
Отправлено: Sergey_K от 18-05-2020, 16:37:42
Формальное копирование строки из ссылки https://adndevblog.typepad.com/autocad/2013/03/formatting-in-rollover-tip.html приводит к ошибке компиляции

Код - C++ [Выбрать]
  1. output.setNewTooltipString(ACRX_T("Iam]]>
  2.  
  3.                     <LineBreak / >
  4.  
  5.                     <Bold>BOLD< / Bold>
  6.  
  7.                     <LineBreak / >
  8.  
  9.                     <![CDATA[Iam]]>
  10.  
  11.                     <LineBreak / >
  12.  
  13.                     <Italic>Italic< / Italic>
  14.  
  15.                     <LineBreak / >
  16.  
  17.                     < ![CDATA[Iam Normal"
  18.  
  19.                   ));

1>------ Build started: Project: Table, Configuration: Debug x64 ------
1>  mFilter.cpp
1>mFilter.cpp(66): error C2001: newline in constant
1>mFilter.cpp(82): error C2001: newline in constant
1>mFilter.cpp(84): error C2065: 'LineBreak': undeclared identifier
1>mFilter.cpp(84): error C2059: syntax error: '>'
1>mFilter.cpp(84): error C2143: syntax error: missing ')' before ';'
Название: Re: AcEdInputPointFilterResult::setNewTooltipString BOLD шрифт
Отправлено: Александр Ривилис от 18-05-2020, 16:38:35
А как ж это?
Ну ты же понимаешь, что не всё что есть в самом AutoCAD доступно через его публичное API...
Название: Re: AcEdInputPointFilterResult::setNewTooltipString BOLD шрифт
Отправлено: Александр Ривилис от 18-05-2020, 16:40:04
Формальное копирование строки из ссылки https://adndevblog.typepad.com/autocad/2013/03/formatting-in-rollover-tip.html приводит к ошибке компиляции
Исправь, чтобы не приводило к ошибке компиляции - это сам сайт рвёт и корежит строки с <>...
Выше я уже привёл исправленный код.
Название: Re: AcEdInputPointFilterResult::setNewTooltipString BOLD шрифт
Отправлено: Sergey_K от 18-05-2020, 16:45:22
Мда... Как ни странно эта абракадабра действительно работает:
Код - C++ [Выбрать]
  1.                   output.setNewTooltipString(
  2.                      L"Iam]]><LineBreak/>"
  3.                      L"<Bold>BOLD</Bold><LineBreak/>"
  4.                      L"<![CDATA[Iam]]><LineBreak/>"
  5.                      L"<Italic>Italic</Italic><LineBreak/>"
  6.                      L"<![CDATA[Iam Normal"
  7.                   );
  8.  

Осталось взять бубен и отбросить лишнее ))
Название: Re: AcEdInputPointFilterResult::setNewTooltipString BOLD шрифт
Отправлено: Александр Ривилис от 18-05-2020, 16:54:46
эта абракадабра
Эта абракадабра - XML. Если ты передаёшь в метод setNewTooltipString строку, к ней в начало добавляется самим AutoCAD'ом "<![CDATA[", а в конец "]]>" и соответственно все теги типа <Bold> <Italic> и т.д. внутри этой строки игнорируются. А вот если начать со строки "твоя строка]]>", а дальше управляющие теги, то они все работают.
Название: Re: AcEdInputPointFilterResult::setNewTooltipString BOLD шрифт
Отправлено: Александр Ривилис от 18-05-2020, 17:10:49
Вот наверное более доступный для понимания вариант:

(https://live.staticflickr.com/65535/49909074971_5c268fe672_o.png)


Код - C++ [Выбрать]
  1. Acad::ErrorStatus ToolTipsFilter::processInputPoint(const AcEdInputPoint& input,
  2.   AcEdInputPointFilterResult& output) {
  3.  
  4.   if (input.pickedEntities().length() > 0) {
  5.     output.setNewTooltipString(
  6.       L"]]>Sample text with <Bold>bold</Bold>, <Italic>italic</Italic> and <Underline>underlined</Underline> words.<LineBreak/>"
  7.       L"<![CDATA["
  8.       );
  9.   }
  10.   else output.setNewTooltipString(L"");
  11.   return (Acad::eOk);
  12. }
Название: Re: AcEdInputPointFilterResult::setNewTooltipString BOLD шрифт
Отправлено: Sergey_K от 18-05-2020, 17:16:03
Александр Ривилис,  прояснил. Спасибо!
Название: Re: AcEdInputPointFilterResult::setNewTooltipString BOLD шрифт
Отправлено: Александр Ривилис от 18-05-2020, 17:24:19
Sergey_K,
Есть важный момент, что с вертикальными продуктами на базе AutoCAD (AA, MEP, Civil 3D) это может не работать, так как они сами пристегивают свои tooltip'сы.
Название: Re: AcEdInputPointFilterResult::setNewTooltipString BOLD шрифт
Отправлено: Sergey_K от 20-05-2020, 14:48:39
При установке переменной ROLLOVERTIPS в 0 толтипы превращаются в бледную тень.
(https://i.postimg.cc/HjgxptZp/tooltip.jpg)
Лечится ли это средствами ObjectARX ?

Название: Re: AcEdInputPointFilterResult::setNewTooltipString BOLD шрифт
Отправлено: Александр Ривилис от 20-05-2020, 14:51:13
Лечится ли это средствами ObjectARX ?
Это никакими средствами не лечится, кроме как включением этой переменной.
В качестве альтернативы возможно только использование средств Win32 API
Название: Re: AcEdInputPointFilterResult::setNewTooltipString BOLD шрифт
Отправлено: Sergey_K от 27-05-2020, 12:47:57
Александр, какой шрифт использует Autocad для tooltip'ов ?
Название: Re: AcEdInputPointFilterResult::setNewTooltipString BOLD шрифт
Отправлено: Александр Ривилис от 27-05-2020, 13:29:25
Александр, какой шрифт использует Autocad для tooltip'ов ?
Понятия не имею. Какой-то из системных. Возможно это берётся из темы.
Но теоретически ты можешь его поменять и в программе.
Название: Re: AcEdInputPointFilterResult::setNewTooltipString BOLD шрифт
Отправлено: Sergey_K от 27-05-2020, 13:42:35
ты можешь его поменять и в программе

Сделал tooltip на winapi. Поставил Arial. Acad пользует похожий, но не Arial. Есть light стиль, которого у Ариала нет...
Название: Re: AcEdInputPointFilterResult::setNewTooltipString BOLD шрифт
Отправлено: Александр Ривилис от 27-05-2020, 14:00:01
Возможно Calibri.
Название: Re: AcEdInputPointFilterResult::setNewTooltipString BOLD шрифт
Отправлено: Sergey_K от 27-05-2020, 14:21:10
Возможно Calibri
Точно. По начертанию 1:1 + light стиль есть
Название: Re: AcEdInputPointFilterResult::setNewTooltipString BOLD шрифт
Отправлено: Александр Ривилис от 27-05-2020, 14:25:36
Возможно Calibri
Точно. По начертанию 1:1 + light стиль есть

Интуиция однако! :-)
Название: Re: AcEdInputPointFilterResult::setNewTooltipString BOLD шрифт
Отправлено: Sergey_K от 10-06-2020, 21:18:01
При выводе "не автокадовского" тоолтипа возникает ещё одна "неприятность" - одновременный вывод вместе с меню ручек.

Что лечится.
При выводе custom tooltip нужно проверять значение AcEdInputPointFilter::processInputPoint::const AcEdInputPoint& input.history()
Код - C++ [Выбрать]
  1. if (!(input.history() & 0xA))
  2.    // вывод custom tooltip
  3. else
  4.    // выводится gripped menu