Форум: "Основная";
Текущий архив: 2007.09.16;
Скачать: [xml.tar.bz2];
ВнизКак эмулировать показ 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.063 c