Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Общие вопросы > Сложная логика показа хинта для компонента |
Автор: --Ins-- 13.07.09, 09:24 |
VCL-компоненты предоставляют набор свойств для отображения всплывающей подсказки (хинта) при наведении мыши на компонент. Это такие свойства как Hint, ShowHint, ParentShowHint. Проблема в том, что только с помощью них гибко управлять показом подсказки достаточно трудно, так как текст хинта един для всего компонента, а область показа равна области самого компонента. Если нужно, чтобы в собственном компоненте показ хинта и его текст зависел от конкретного положения курсора мыши, можно поступить следующим образом - обрабатывать недокументированное сообщение VCL-контролов CM_HINTSHOW. Параметром обработчику этого сообщения передается указатель на структуру THintInfo: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> THintInfo = record HintControl: TControl; HintWindowClass: THintWindowClass; HintPos: TPoint; HintMaxWidth: Integer; HintColor: TColor; CursorRect: TRect; CursorPos: TPoint; ReshowTimeout: Integer; HideTimeout: Integer; HintStr: string; HintData: Pointer; end; В обработчике сообщения можно подменить ряд параметров, таких как HintStr - собственно сама строка в окне подсказки, или CursorRect - область, при выходе курсора за границы которой подсказка исчезнет и запрос на ее показ при остановке курсора мыши поступит заново. Подсказка не отображается, если обработчик вернет результатом не ноль. Примерный код обработчика сообщения может быть таким: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> procedure TSomeClass.CMHintShow(var Message: TCMHintShow); var Pt: TPoint; begin Message.Result := 1; Pt := Message.HintInfo^.CursorPos; if <условие> then begin Message.HintInfo^.CursorRect := ...; Message.HintInfo^.HintStr := ...; Message.Result := 0; end; end; Таким образом, если ваш компонент представляет собой что-то типа грида, можно показывать хинт зависимый от того, над какой именно ячейкой находится курсор или для компонента-графика при наведении отображать в тексте подсказки координаты курсора или значение графика в точке. |