Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как вывести 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'е.


Наверх

Титульная страница Поиск, карта сайта Написать письмо