Hint
14 отговора
363 прегледа
Hint
Здравейте,
Опитвам се да форсирам показването на Hint на компонент, при събитието onKeyDown, но без резултат. Делфи 6.
Поразтърсих се в Google, за умни съвети - ама не се получава.
Някой да го е реализирал?
Благодаря Ви,
Иван
Опитвам се да форсирам показването на Hint на компонент, при събитието onKeyDown, но без резултат. Делфи 6.
Поразтърсих се в Google, за умни съвети - ама не се получава.
Някой да го е реализирал?
Благодаря Ви,
Иван
Application.ActivateHint
Виж метода Application.ActivateHint. Мисля, че е това, което търсиш.
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)
но без всякакъв успех...


Не се получава...
Пробвах:
CursorPos.X:=(Sender as TControl).Left+2;
CursorPos.Y:=(Sender as TControl).Top+2;
Application.ActivateHint(CursorPos);
Както и Application.HintMouseMessage(Control: TControl; var Message: TMessage)
но без всякакъв успех...
Re: Application.ActivateHint
Може ли един глупав въпрос: ShowHint на контролата True ли ти е?
Re: Application.ActivateHint
Това ще симулира задържането на мишката на тази позиция. Та както каза Formal, ако hint-а не ти се показва от мишката няма да стане. Така че трябва да си установиш текста в Hint и да направиш ShowHint := True. Това направено ли е?
За пълнота на темата ...
Виж и тази техника (освен създаването на нов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);
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);
Re: Application.ActivateHint
Аха... Направено е разбира се...
Как иначе?
Но не се получава... Когато мишока е отгоре - няма проблем. То пък що и да има
Но идеята ми бе да не пиша огромни хелпове, а при F1 да задействам хинта... сложил съм му Application.HintHidePause:=20000, което ако няма никакво действие скрива хинта след 20 сек, толкова колкото да се прочетат глупостите дето съм ги пасал, всичко си е ОК., дето се вика на ШЕСТ!
Но пустия му F1 не ще и не ще... дори започнах да го дебъгвам пустия му HintMouseMessage, взима контролата по позицията която му подавам, преминава си по същите стъпки които и когато мишката се раздвижи, но ХИНТ - ЙОК
Как иначе?
Но не се получава... Когато мишока е отгоре - няма проблем. То пък що и да има
Но пустия му F1 не ще и не ще... дори започнах да го дебъгвам пустия му HintMouseMessage, взима контролата по позицията която му подавам, преминава си по същите стъпки които и когато мишката се раздвижи, но ХИНТ - ЙОК
Re: Hint
Обърнах внимание на всичко казано до сега... никакъв резултат.
Или аз съм абсолютния некъдърник тези дни, или магия има някаква
Или аз съм абсолютния некъдърник тези дни, или магия има някаква
Re: Hint
Не иска и не иска...
ще взема да си скъсам дипломите дето ги имам...
От версия 1 на Делфито цъкъм, с това си изхраних децата, дето се вика, а сега - ядец
Лошото е че нямам време да разнища случая... най-много да оставя за по-добри времена, а сега да измисля някоя друга дивотия...
ще взема да си скъсам дипломите дето ги имам...
От версия 1 на Делфито цъкъм, с това си изхраних децата, дето се вика, а сега - ядец
Лошото е че нямам време да разнища случая... най-много да оставя за по-добри времена, а сега да измисля някоя друга дивотия...
Re: Hint
Ако това ще ти помогне, можеш примерно при натискане на ф1 да показваш хинта на контролата в един статус бар за определено време. Не е същото, но все е някакво решение. 
Re: Hint
Благодаря за съвета.
Направих нещо подобно... Форма, която се създава при F1, копира стойноста на ХИНТ полето, и го показва... не е същото, но върши работа.... Просто се ядосвам, че нещо дето трябва да става - не става
Направих нещо подобно... Форма, която се създава при F1, копира стойноста на ХИНТ полето, и го показва... не е същото, но върши работа.... Просто се ядосвам, че нещо дето трябва да става - не става
Re: Hint
Поразгледах малко сорсовете на VCL-а (ей, обичам ги тия от Борланд
). Hint-а не се показва, защото FHintControl е nil :-/ А пък установяването му се през HintMouseMessage... Абе позаплете се историята, а и аз нямам много време да я чопля.
Да ти подхвърля една друга идея - защо не си ползваш "?" бутона на формата?
Да ти подхвърля една друга идея - защо не си ползваш "?" бутона на формата?
Re: Application.ActivateHint
Една малко дърварска идея... Не видях да си си играл с Application.HintPause;
Ако предположим че мишката е върху контролата или ти я я сложиш насила там напр. и сетнеш HintPause да бъде напр. 1 делфи ще ти покаже хинт-а на момента...
Ама после трябва да помислиш как да му върнеш старата стойност...
Успех!
Ако предположим че мишката е върху контролата или ти я я сложиш насила там напр. и сетнеш HintPause да бъде напр. 1 делфи ще ти покаже хинт-а на момента...
Ама после трябва да помислиш как да му върнеш старата стойност...
Успех!
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;
Върши някаква работа, макар и "дървено".
Още веднъж благодаря за вниманието към темата!

Нямам сили, време и нерви да се боря повече.
Направих нещо което е много "дървено", но върши работа - местя мишока така, че все едно котка го гони
И без 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;
Върши някаква работа, макар и "дървено".
Още веднъж благодаря за вниманието към темата!