Hint

14 отговора 363 прегледа
#1

Hint

Здравейте,
Опитвам се да форсирам показването на Hint на компонент, при събитието onKeyDown, но без резултат. Делфи 6.
Поразтърсих се в Google, за умни съвети - ама не се получава.
Някой да го е реализирал?

Благодаря Ви,
Иван

Отговор
в отговор на Ивaн #2

Application.ActivateHint

Виж метода Application.ActivateHint. Мисля, че е това, което търсиш.

Отговор
в отговор на andrew_nikoloff #3

Re: Application.ActivateHint

Тц..
Не се получава...
Пробвах:

CursorPos.X:=(Sender as TControl).Left+2;
CursorPos.Y:=(Sender as TControl).Top+2;
Application.ActivateHint(CursorPos);

Както и Application.HintMouseMessage(Control: TControl; var Message: TMessage)
но без всякакъв успех...


Отговор
в отговор на Ивaн #4

Re: Application.ActivateHint

Може ли един глупав въпрос: ShowHint на контролата True ли ти е?

Отговор
в отговор на Ивaн #5

Re: Application.ActivateHint

Това ще симулира задържането на мишката на тази позиция. Та както каза Formal, ако hint-а не ти се показва от мишката няма да стане. Така че трябва да си установиш текста в Hint и да направиш ShowHint := True. Това направено ли е?

Отговор
в отговор на Ивaн #6

За пълнота на темата ...

Виж и тази техника (освен създаването на новa hint контрола обърни внимание и на прекоординирането (обичам българския) - ClientToScreen)
HintWindow:=tHintWindow.Create(Self);
h := h*HintWindow.Canvas.TextHeight(s);
xPoint := BitBtn_Person.ClientToScreen(xPoint);
xRect.Left := xPoint.X;
xRect.Right := xRect.Left+200;
xRect.Top := xPoint.Y;
if xRect.Top>(Screen.DesktopHeight div 2) then begin
HintWindow.ActivateHint(xRect,s);

Отговор
в отговор на andrew_nikoloff #7

Re: Application.ActivateHint

Аха... Направено е разбира се...
Как иначе?
Но не се получава... Когато мишока е отгоре - няма проблем. То пък що и да има Но идеята ми бе да не пиша огромни хелпове, а при F1 да задействам хинта... сложил съм му Application.HintHidePause:=20000, което ако няма никакво действие скрива хинта след 20 сек, толкова колкото да се прочетат глупостите дето съм ги пасал, всичко си е ОК., дето се вика на ШЕСТ!
Но пустия му F1 не ще и не ще... дори започнах да го дебъгвам пустия му HintMouseMessage, взима контролата по позицията която му подавам, преминава си по същите стъпки които и когато мишката се раздвижи, но ХИНТ - ЙОК

Отговор
в отговор на Ивaн #8

Re: Hint

Обърнах внимание на всичко казано до сега... никакъв резултат.
Или аз съм абсолютния некъдърник тези дни, или магия има някаква

Отговор
в отговор на ивaн #9

Re: Hint

Пробва ли с някакъв друг клавиш - F1 понякога е проблемен ...

Mixy
Отговор
в отговор на Mixy #10

Re: Hint

Не иска и не иска...
ще взема да си скъсам дипломите дето ги имам...
От версия 1 на Делфито цъкъм, с това си изхраних децата, дето се вика, а сега - ядец
Лошото е че нямам време да разнища случая... най-много да оставя за по-добри времена, а сега да измисля някоя друга дивотия...

Отговор
в отговор на Ивaн #11

Re: Hint

Ако това ще ти помогне, можеш примерно при натискане на ф1 да показваш хинта на контролата в един статус бар за определено време. Не е същото, но все е някакво решение.

Отговор
в отговор на Boby_ #12

Re: Hint

Благодаря за съвета.
Направих нещо подобно... Форма, която се създава при F1, копира стойноста на ХИНТ полето, и го показва... не е същото, но върши работа.... Просто се ядосвам, че нещо дето трябва да става - не става

Отговор
в отговор на Ивaн #13

Re: Hint

Поразгледах малко сорсовете на VCL-а (ей, обичам ги тия от Борланд ). Hint-а не се показва, защото FHintControl е nil :-/ А пък установяването му се през HintMouseMessage... Абе позаплете се историята, а и аз нямам много време да я чопля.
Да ти подхвърля една друга идея - защо не си ползваш "?" бутона на формата?

Отговор
в отговор на ивaн #14

Re: Application.ActivateHint

Една малко дърварска идея... Не видях да си си играл с Application.HintPause;
Ако предположим че мишката е върху контролата или ти я я сложиш насила там напр. и сетнеш HintPause да бъде напр. 1 делфи ще ти покаже хинт-а на момента...
Ама после трябва да помислиш как да му върнеш старата стойност...
Успех!

Отговор
в отговор на Ивaн #15

Re: Hint

Благодаря на всички за указаните препоръки!
Нямам сили, време и нерви да се боря повече.

Направих нещо което е много "дървено", но върши работа - местя мишока така, че все едно котка го гони
И без Application.HintPause по-малка от 100 не става - благодаря

Application.HintPause:=20;


procedure DoHint(AControl: TControl) ;
var
pt: TPoint;
begin
pt := AControl.ClientToScreen(Point(1,1)) ;
SetCursorPos(pt.x, pt.y) ;
end;

procedure TForm.EditKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
DoHint(Sender as TControl) ;
end;


Върши някаква работа, макар и "дървено".

Още веднъж благодаря за вниманието към темата!


Отговор