Re[3]: Отображение в ToolTip строк, не поместившихся в поле
От: Carc Россия https://vk.com/gosha_mazov
Дата: 27.02.23 18:02
Оценка: 18 (1)
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, Carc, Вы писали:


C>>LVS_EX_INFOTIP


ЕМ>Это я знаю, но это и получается "руками". Думал, что со времен XP это хоть как-то окультурили.

Стоит посмотреть на стиль LVS_EX_LABELTIP — он что-то подобное делает вроть.

C>>Т.к. нотификация LVN_GETINFOTIP генерируется один раз на индекс ListView, и не генерится повторно для того же индекса, но другого столбца.


ЕМ>Хм, как же тогда это везде реализовано? Совсем вручную?

Ну по идее можно получить HWND Тултипа от самого ListView: LVM_GETTTOOLTIPS или через NMLVGETINFOTIP::hwndFrom, а потом уж ручками на WM_mouseMove делать что-нить вроть TTM_UPDATETIPTEXT. Как-то так...

Для какого столбца будет проситься тултип можно манипулировать через LVM_SETCOLUMNORDERARRAY, но все равно имхо на остальные столбцы, но того же самого индекса автоматом LVN_GETINFOTIP не запросится. Сугубое имхо, но личное — ручками: в основном WinXP, 7-ка, 10-ка...
Aml Pages Home
Re[4]: Отображение в ToolTip строк, не поместившихся в поле
От: Carc Россия https://vk.com/gosha_mazov
Дата: 30.04.23 18:01
Оценка: +1
Здравствуйте, Carc, Вы писали:

C>Для какого столбца будет проситься тултип можно манипулировать через LVM_SETCOLUMNORDERARRAY, но все равно имхо на остальные столбцы, но того же самого индекса автоматом LVN_GETINFOTIP не запросится. Сугубое имхо, но личное — ручками: в основном WinXP, 7-ка, 10-ка...

Про повторный запрос тултипа для айтема, для которого уже ListView уже только что запрашивал тултип через LVN_GETINFOTIP.

Бинго! Я все-таки её трахнул нашел таки способ уломать ListView запросить повторно тултип через LVN_GETINFOTIP.
Хак простой: перед LVM_SETITEMCOUNT, делаем ListView`ю LVM_DELETEALLITEMS.

Идея простая: раз ListView в виртуальном режиме все эти LVM_DELETEALLITEMS ему как-бы пофиг. Но заставляют его сбрасывать кешированный тултип. Ну, а уж после зовем дефолтный стандартный LVM_SETITEMCOUNT. После этого возим мышом заново по тому же самому айтему ListView, и о магия!
Фигакс прилетает повторный LVN_GETINFOTIP.
Aml Pages Home
Отредактировано 30.04.2023 18:02 Carc . Предыдущая версия .
Отображение в ToolTip строк, не поместившихся в поле
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 27.02.23 17:22
Оценка:
В интерфейсах многих программ вижу, что при наведении на поле, в которое не поместилась длинная строка (где в конце многоточие), в ToolTip показывается строка полностью. Хочу такое приделать к List View (Report), но нигде не могу найти в документации подходящих стилей. Я где-то не там ищу, или стандартных средств нет, и все делают это руками?

Если руками, то есть ли кошерный способ определить, что строка обрезана? Когда-то это обсуждалось
Автор: serg_fork
Дата: 25.10.07
, но и там предлагались только ненадежные косвенные решения.
Re: Отображение в ToolTip строк, не поместившихся в поле
От: Carc Россия https://vk.com/gosha_mazov
Дата: 27.02.23 17:41
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>В интерфейсах многих программ вижу, что при наведении на поле, в которое не поместилась длинная строка (где в конце многоточие), в ToolTip показывается строка полностью. Хочу такое приделать к List View (Report), но нигде не могу найти в документации подходящих стилей. Я где-то не там ищу, или стандартных средств нет, и все делают это руками?


ЕМ>Если руками, то есть ли кошерный способ определить, что строка обрезана? Когда-то это обсуждалось
Автор: serg_fork
Дата: 25.10.07
, но и там предлагались только ненадежные косвенные решения.

LVM_SETEXTENDEDLISTVIEWSTYLE + LVS_EX_INFOTIP + LVS_EX_LABELTIP

Только там не все так просто. Насколько я помню, не получается устанавливать разные тултипы для разных столбцов. Т.к. нотификация LVN_GETINFOTIP генерируется один раз на индекс ListView, и не генерится повторно для того же индекса, но другого столбца.

Второе, что подмечалось: в виртуальном режиме ListView кеширует запрошенный в LVN_GETINFOTIP тултип. И "упросить" его перезапросить еще раз тултип для того же самого индекса штатными средствами у меня так и не получилось. Повторно ListView сгенерит LVN_GETINFOTIP, только после того как повозить мышом по айтемам.... Всякие разные хаки я пробовал, но а) ненадежно и недокументировано и б) большинство так и не сработало (хотя ну очень было нужно)...
Aml Pages Home
Re[2]: Отображение в ToolTip строк, не поместившихся в поле
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 27.02.23 17:51
Оценка:
Здравствуйте, Carc, Вы писали:

C>LVS_EX_INFOTIP


Это я знаю, но это и получается "руками". Думал, что со времен XP это хоть как-то окультурили.

C>Т.к. нотификация LVN_GETINFOTIP генерируется один раз на индекс ListView, и не генерится повторно для того же индекса, но другого столбца.


Хм, как же тогда это везде реализовано? Совсем вручную?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.