![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как эмулировать показ hint нажатием, например, button на форме? [D7, WinXP]
Dr. Andrew © (2007-07-09 07:28:00)Уважаемые Мастера!
Я использую свой класс подсказок оговоренный в процедуре onFormCreate:
{* установить собственный формат подсказок *}
Application.ShowHint := False;
HintWindowClass := GraphicHint.TGraphicHintWindow;
Application.ShowHint := True;
Вопрос: как мне программно эмулировать показ всплывающей подсказки (используя Perform или SendMessange или еще что-то), чтобы моя подсказка всплывала (показывалась), например над панелью Panel1, когда я нажимаю кнопку Button1? Без того, чтобы перемещать мышкой над компонентом или использования события onMouseMove и тому подобное!Пожадуйста, приведете маленький пример. Всем спасибо!
Юрий Зотов (2007-07-09 14:17:00) [1]> 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 компонента).
Dr. Andrew (2007-07-09 13:06:00) [2]Спасибо Юрий.
Но, задача несколько сложнее. Есть текстовый компонент типа RichView с текстом. Программно (не мышкой!) я выделяю, например третье слово во второй строке и могу опрелелить координаты его начала, например в переменные X и Y. И вот над этим словом с этими координатами (то есть с мнимой позицией курсора) мне необходимо вывести подсказку, мой класс GraphicHint.TGraphicHintWindow, который я определил в процедуре onFormCreate. Что в вашем примере в таком случае надо изменить? И только есть такой путь - проще ничего нет? Еще раз спасибо за очень квалифицированный ответ.
Юрий Зотов (2007-07-09 08:53:00) [3]Вот полный пример:
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;
Юрий Зотов (2007-07-09 08:19:00) [4]Application.ActivateHint(Mouse.CursorPos);