Демонстрирует всплывающую подсказку для определенного элемента управления (Control), возвращает ссылку на hint-объект, поэтому в дальнейшем подсказка может быть спрятана вызовом
RemoveHint (смотри ниже).
Code: |
function RevealHint(Control: TControl): THintWindow; {----------------------------------------------------------------}
var ShortHint: string; AShortHint: array[0..255] of Char; HintPos: TPoint; HintBox: TRect; begin { Создаем окно: } Result := THintWindow.Create(Control);
{ Получаем первую часть подсказки до '|': } ShortHint := GetShortHint(Control.Hint);
{ Вычисляем месторасположение и размер окна подсказки } HintPos := Control.ClientOrigin; Inc(HintPos.Y, Control.Height + 6); < < < < Смотри примечание ниже HintBox := Bounds(0, 0, Screen.Width, 0); DrawText(Result.Canvas.Handle, StrPCopy(AShortHint, ShortHint), -1, HintBox, DT_CALCRECT or DT_LEFT or DT_WORDBREAK or DT_NOPREFIX); OffsetRect(HintBox, HintPos.X, HintPos.Y); Inc(HintBox.Right, 6); Inc(HintBox.Bottom, 2);
{ Теперь показываем окно: } Result.ActivateHint(HintBox, ShortHint); end; {RevealHint}
procedure RemoveHint(var Hint: THintWindow); {----------------------------------------------------------------} { Освобождаем дескриптор окна всплывающей подсказки, выведенной } { предыдущим RevealHint. } {----------------------------------------------------------------}
begin Hint.ReleaseHandle; Hint.Free; Hint := nil; end; {RemoveHint} |
Строка с комментарием <<<< позиционирует подсказку ниже элемента управления. Это может быть изменено, если по какой-то причине вам необходима другая позиция окна с подсказкой.
Автор: Nomadic
Code: |
{Появление} IF h<>nil H.ReleaseHandle; {если чей-то хинт yже был, то его погасить} H:=THintWindow.Create(Окно-владелец хинта); H.ActivateHint(H.CalcHintRect(...),'hint hint nint'); .... {UnПоявление :) - это возможно пpидется повесить на таймеp, котоpый бyдет обнyляться пpи каждом новом появлении хинта} IF h<>nil H.ReleaseHandle; |
По-дpyгомy задача тоже pешаема, но очень плохо. (см исходник объекта TApplication, он как pаз сабжами заведyет.
Сделаем это по нажатию на первую кнопку, а по нажатию на вторую кнопку будем скрывать окно hint'a:
Code: |
public { Public declarations } h: THintWindow;
procedure TForm1.Button1Click(Sender: TObject); begin if h<>nil then H.ReleaseHandle; H:=THintWindow.Create(Form1); H.ActivateHint(Form1.ClientRect, 'Это всплывающая подсказка'); end;
procedure TForm1.Button2Click(Sender: TObject); begin if h<>nil then H.ReleaseHandle; end; |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!