Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Что такое хинты


Автор: dm9 21.3.2005, 20:00
Привет всем smile

Я опять с тулбаром мучаюсь. Тулбар для IE.

Создаю кнопочки TToolButton (родитель - TToolBar). Назначаю кнопочкам хинты (hint). Под Windows XP при убирании хинта на экране остаётся какая-то фигня, какое-то, видимо, окно (это не просто нарисованное на экране изображение, а что-то, что не убирается при перерисовке этой части окна). После закрытия окна IE эти окошки пропадают.

Вопрос такой.

Кто сталкивался? Как боролись? Какие предложения?

И главное. Что такое вообще хинт. Можно ли его создать не стандарными средствами, то есть прописыванием поля hint, а как-то через WinAPI? Какие для этого существуют функции? Я навскидку сам ничего не нашёл.

Автор: dm9 21.3.2005, 21:38
Чё-та меня тянет изобретать велосипед и ловить вхождение / выхождение мыши в область кнопки и показывать свою форму как SW_SHOWNA...

Но наверняка это делается проще...

Автор: RA 21.3.2005, 21:40
Что я знаю про хинты - hint имеет свой hwn и подченяется всем правилам окон (почти всем). smile


Вобще есть вероятность, что хинт не убивается, как например это часто встречается в Delphi (в самой среде), если так то нужно ему послать WM_CLOSE.

Автор: dm9 21.3.2005, 21:43
Цитата(RAdmin @ 21.3.2005, 21:40)
если так то нужно ему послать WM_CLOSE


Кому? smile Как найти его hwnd?
И когда? При убирании мыши с кнопки? Ох как мне лениво компонент переписывать для того, чтобы сообщение это поймать smile Но возможно это вариант. Только как найти hwnd? Или он доступен в каком-то модуле? Надо посмотреть...

Автор: RA 21.3.2005, 22:23
Цитата(dm9 @ 21.3.2005, 21:43)
Кому?  Как найти его hwnd?

Конечто ему.



Цитата(dm9 @ 21.3.2005, 21:43)
Как найти его hwnd?

В твоем варианте это хз, не сталкивался с таким.

Просто у меня однажды хинт повис я навел на него маус и изпод курсора прочел hwnd. smile

Добавлено @ 22:24
Хотя текст в хинте это случайно не заголовок окна ?

Автор: dm9 21.3.2005, 22:37
Цитата(RAdmin @ 21.3.2005, 22:23)
Хотя текст в хинте это случайно не заголовок окна ?


smile))))))))))))))))))))))))) Чё-то так не хочется smile

Думаю, сделаю свою форму и буду её неактивной показывать при наведении мыши.

Автор: p0s0l 22.3.2005, 00:01
Цитата(dm9 @ 21.3.2005, 20:00)
Можно ли его создать не стандарными средствами, то есть прописыванием поля hint, а как-то через WinAPI?

Смотри DRKB -> VCL -> Hints -> ...
Там есть примеры, как делать своего наследника от THintWindow, и как делать хинты через WinAPI...


Автор: сфе 23.3.2005, 06:32
hint - это окно типа Edit и подчиняется всем правилам. Работай с ним как с окном.

Автор: RA 25.3.2005, 10:40
Цитата(RAdmin @ 21.3.2005, 22:23)
Хотя текст в хинте это случайно не заголовок окна ?


Сейчас проверил, так оно и есть smile
Добавлено @ 10:42
А может тебе убивать класс хинтов, вродебы он TDestignHintWindow

Автор: dm9 29.3.2005, 02:31
Я решил проблему, создавая хинты таким образом:
hintwnd:= THintWindow.create(self);
И освобождая таким:
hintwnd.releasehandle;

Возможно, проблема была в том, что TToolButton не получает сообщения WM_MOUSELEAVE. И вообще, как я понял, ничего не получает при выходе мыши. Мне пришлось обнаруживать вход мыши в область, ловя CM_HINTSHOW для TToolButton и выход - ловя WM_MOUSELEAVE для родителя - TToolbar.


Цитата(p0s0l @ 22.3.2005, 01:01)
Смотри DRKB -> ...


Да, как обычно smile Как кому другому ответ искать, так первым делом в DRKB. А как себе smile
Спасибо за подсказку smile

Автор: dm9 29.3.2005, 02:43
Цитата(dm9 @ 29.3.2005, 03:31)
ловя WM_MOUSELEAVE для родителя


У меня такая структура, что на один TToolbar - один TToolButton, поэтому так можно было делать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)