Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.16;
Скачать: CL | DM;

Вниз

Как эмулировать показ hint нажатием, например, button на форме?   Найти похожие ветки 

 
Dr. Andrew   (2007-07-09 07:28) [0]

Уважаемые Мастера!
Я использую свой класс подсказок оговоренный в процедуре onFormCreate:
{* установить собственный формат подсказок *}
 Application.ShowHint := False;
 HintWindowClass := GraphicHint.TGraphicHintWindow;
 Application.ShowHint := True;

Вопрос: как мне программно эмулировать показ всплывающей подсказки (используя Perform или SendMessange или еще что-то), чтобы моя подсказка всплывала (показывалась), например над панелью Panel1, когда я нажимаю кнопку Button1? Без того, чтобы перемещать мышкой над компонентом или использования события onMouseMove и тому подобное! Пожадуйста, приведете маленький пример. Всем спасибо!


 
Юрий Зотов ©   (2007-07-09 08:19) [1]

Application.ActivateHint(Mouse.CursorPos);


 
Юрий Зотов ©   (2007-07-09 08:53) [2]

Вот полный пример:

type
 TForm1 = class(TForm)
   Panel1: TPanel;
   Button1: TButton;
   Timer1: TTimer; // Enabled = False
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
 private
   FHintWindow: THintWindow;
 end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 FHintWindow := HintWindowClass.Create(Self)
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 H: string;
 R: TRect;
begin
 H := "Hello";
 R.TopLeft := Panel1.ClientToScreen(Point(4, 4));
 R.Right := R.Left + FHintWindow.Canvas.TextWidth(H) + 4;
 R.Bottom := R.Top + FHintWindow.Canvas.TextHeight(H) + 4;
 FHintWindow.ActivateHint(R, H);
 Timer1.Enabled := True
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 FHintWindow.ReleaseHandle;
 Timer1.Enabled := False
end;


 
Dr. Andrew   (2007-07-09 13:06) [3]

Спасибо Юрий.
Но, задача несколько сложнее. Есть текстовый компонент типа RichView с текстом. Программно (не мышкой!) я выделяю, например третье слово во второй строке и могу опрелелить координаты его начала, например в переменные X и Y. И вот над этим словом с этими координатами (то есть с мнимой позицией курсора) мне необходимо вывести подсказку, мой класс GraphicHint.TGraphicHintWindow, который я определил в процедуре onFormCreate. Что в вашем примере в таком случае надо изменить? И только есть такой путь - проще ничего нет? Еще раз спасибо за очень квалифицированный ответ.


 
Юрий Зотов ©   (2007-07-09 14:17) [4]

> Dr. Andrew   (09.07.07 13:06) [3]

Если координаты X и Y известны, то меняется только одна строчка:
вместо R.TopLeft := Panel1.ClientToScreen(Point(4, 4));
пишем что-то вроде этого R.TopLeft := Point(X, Y-6);

Только убедитесь, что X и Y - это абсолютные экранные координаты, а не клиентские (иначе сначала перегоните их через ClientToScreen компонента).



Страницы: 1 вся ветка

Текущий архив: 2007.09.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
15-1185282701
StriderMan
2007-07-24 17:11
2007.09.16
BlackBox и Оберон


2-1187691079
Daedr
2007-08-21 14:11
2007.09.16
профессионалам отдельная просьба - быть снисходительными.


2-1187850968
aalex
2007-08-23 10:36
2007.09.16
открыть файл справкив окне без заголовка


15-1187477610
wp2
2007-08-19 02:53
2007.09.16
Может и тупой вопрос, но все же.


2-1187889271
@!!ex
2007-08-23 21:14
2007.09.16
Аналог TImage c поддержкой png.