На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: jack128, Rouse_, Krid
  
    > Сложная логика показа хинта для компонента
      VCL-компоненты предоставляют набор свойств для отображения всплывающей подсказки (хинта) при наведении мыши на компонент. Это такие свойства как Hint, ShowHint, ParentShowHint. Проблема в том, что только с помощью них гибко управлять показом подсказки достаточно трудно, так как текст хинта един для всего компонента, а область показа равна области самого компонента. Если нужно, чтобы в собственном компоненте показ хинта и его текст зависел от конкретного положения курсора мыши, можно поступить следующим образом - обрабатывать недокументированное сообщение VCL-контролов CM_HINTSHOW. Параметром обработчику этого сообщения передается указатель на структуру THintInfo:
      ExpandedWrap disabled
        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 - область, при выходе курсора за границы которой подсказка исчезнет и запрос на ее показ при остановке курсора мыши поступит заново.
      Подсказка не отображается, если обработчик вернет результатом не ноль.
      Примерный код обработчика сообщения может быть таким:
      ExpandedWrap disabled
        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;

      Таким образом, если ваш компонент представляет собой что-то типа грида, можно показывать хинт зависимый от того, над какой именно ячейкой находится курсор или для компонента-графика при наведении отображать в тексте подсказки координаты курсора или значение графика в точке.
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0174 ]   [ 17 queries used ]   [ Generated: 28.03.24, 17:56 GMT ]