![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как вывести Hint после остановки курсора... [D5, WinXP]
grusty © (2005-03-04 03:37:00)Ребята, подскажите!
Как вывести Hint после остановки курсора над компонентом, например, TImage. Причем, если снова двинуть курсор и остановить его, то Hint снова должен появиться.
Заранее благодарен!
Cosinus (2005-03-04 13:22:00) [1]Извращенный метод :)))
В таймере смотретьGetLastInputInfoи если оно больше определенного времени(и курсор находится над Image(WindowFromPoint,)), то выводить хинт, если нет, то прибить (если он есть) и не выводить...
Но по-моему это "поход из Москвы в Питер через Воркуту"...
grusty (2005-03-04 12:56:00) [2]
> GLFox
Как создать Hint и удалить, и где, - я понял. А вот что необходимо прописать в OnMouseMove? MyHint.ActivateHint... см. [10]?
Может кто видел старенький англо-русский переводчик? Там при наведении на каждое англ. слово выскакивает хинт с переводом. Вот мне нужно что-то подобное...
Fedia (2005-03-04 11:01:00) [3]Cosinus © (04.03.05 10:33) [10]
Это уже вариант :)
Только наверняка можно прорисовать "родной" для компонента hint.
Покопался vcl, в итоге вышел на класс TControl = class(TComponent). Как отобразить родной hint еще не выяснил, но зато стало ясно, почему вариант [8] не работает.
FShowHint: Boolean;
property ShowHint: Boolean read FShowHint write SetShowHint stored IsShowHintStored;
procedure TControl.SetShowHint(Value: Boolean);
begin
if FShowHint <> Value then
begin
FShowHint := Value;
FParentShowHint := False;
Perform(CM_SHOWHINTCHANGED, 0, 0);
end;
end;
Т.е. при изменении свойства ShowHint окно подсказки не выводится. Может вообще иду неправильным путем :)
Cosinus (2005-03-04 10:35:00) [4]
> Экспериментатор (04.03.05 10:27) [8]
Не правда :)
Я тоже предполагал и не поленился, проверил. Нет, не будет.
Cosinus (2005-03-04 10:33:00) [5]Создай свой хинт и не мучайся :)))
var
MyHint: THintWindow;
// Создать и показать
MyHint:=THintWindow.Create(Image);
MyHint.ActivateHint(Image.ClientRect, 'Ага-а-а!');
// Прибить и соответственно спрятать :)
if MyHint<>nil then
MyHint.ReleaseHandle;
Fedia (2005-03-04 10:31:00) [6]Экспериментатор (04.03.05 10:27) [8]
не правда.
Экспериментатор (2005-03-04 10:27:00) [7]в OnMouseMove
напиши
Image.ShowHint := false;
Image.ShowHint := true;
и хинт будет появляться столько сколько твоей душе угодно
GLFox (2005-03-04 10:25:00) [8]Лучшим вариантом наверно будет сформировать его самому (например, в виде отдельного окна (CreateWindowEx)) и при входе мыши создавать его. При move можно таскать его даже за мышой. А когда она (мышь) убежит с компонента, тогда его и Free.
GLFox (2005-03-04 10:19:00) [9]> Fedia © (04.03.05 10:15) [5]
В общем то я затрудняюсь так сразу сказать, но данный вариант мне и самому кажется довольно подозрительным... %)
Fedia (2005-03-04 10:15:00) [10]GLFox © (04.03.05 09:45) [4]
Если не секрет, как вызвать hint на OnMouseMove, если время его первоначального отображения уже прошло, а курсор выводить за пределы компонента нельзя (из [0]).
GLFox (2005-03-04 09:45:00) [11]OnMouseMove для TImage
GLFox (2005-03-04 09:44:00) [12]OnMouseMove для TImage
Cosinus (2005-03-04 09:34:00) [13]
> XP
Угу, только не нужно забывать, что если курсор будет крутится по одному Image, не переползая на другие компоненты, то Hint появится только один раз вначале. Для устранения нужно еще немного доработать :)
XP (2005-03-04 07:01:00) [14]Image.Hint := 'Изображение';
Image.ShowHint := true;
Эти свойства объявлены как published, поэтому видны в Object Inspector'е.