Форум: "Основная";
Текущий архив: 2003.05.01;
Скачать: [xml.tar.bz2];
ВнизHint Найти похожие ветки
← →
saha (2003-04-18 17:52) [0]Привет. Тут давеча нашел в faq пример работы с hint-ом
Появление}
IF h<>nil H.ReleaseHandle; {если чей-то хинт yже был, то его погасить}
H:=THintWindow.Create(Окно-владелец хинта);
H.ActivateHint(H.CalcHintRect(...),"hint hint nint");
....
{UnПоявление :) - это возможно пpидется повесить на таймеp, котоpый бyдет
обнyляться пpи каждом новом появлении хинта}
IF h<>nil H.ReleaseHandle;
Все нормально получилось, тока hint появляется в левом верхнем углу экрана, если применить HintHandle.PaintTo(RXDBGrid1.Canvas,10,20); то все ок hint появляется там где надо, но тот который в левом верхнем угле тоже появляется. Как сделать что бы появлялся один?
Вот код:
If HintHandle=nil Then HintHandle:=THintWindow.Create(RXDBGrid1);
HintString:=HintString+key;
HintHandle.PaintTo(RXDBGrid1.Canvas,10,20);
HintHandle.ActivateHint(HintHandle.CalcHintRect(length(hintString)*10,hintString,sss),HintString);
← →
Skier (2003-04-18 18:00) [1]Не поможет ?
If HintHandle=nil Then HintHandle:=THintWindow.Create( Application);
HintString:=HintString+key;
HintHandle.ActivateHint(HintHandle.CalcHintRect(length(hintString)*10,hintString,sss),HintString);
← →
saha (2003-04-18 18:08) [2]Неа, кроме того тот hint который нужен все время отстает на один символ (это все у меня стоит в процедуре RxDBGrid1KeyPress)
← →
Skier (2003-04-18 18:11) [3]>saha
Может быть всё дело в вычислении прямоугольника для хинта,
он должен быть в экранных координатах...Посмотри...
← →
saha (2003-04-18 18:47) [4]а что там смотреть?
максимальная длина без переноса на другую строку, собственно строка, и указатель, который не используется (как написано в help
Note: CalcHintRect ignores the AData parameter. Descendant classes can override this method to make use of associated hint data.)
← →
NickBat (2003-04-18 19:00) [5]procedure TFormMain.MyHintShow;
begin
MyHintHide;
HintExists:=True;
MyHint:=THintWindow.Create(self);
MyHint.Color:=clMyHint;
MyHint.ActivateHint(MyRct,"тРА-ЛЯ-ЛЯ");
end;
end;
procedure TFormMain.MyHintHide;
begin
if HintExists
then begin
HintExists:=False;
MyHint.ReleaseHandle;
MyHint.Free;
end;
end;
← →
Skier (2003-04-18 19:01) [6]Я же говорю экранные координаты
Получишь хинт "примерно" в центре,
(код тупой, но наглядный...) :
procedure TForm1.Button1Click(Sender: TObject);
var
HintString : String;
begin
If HintHandle=nil Then HintHandle:=THintWindow.Create(Application);
HintString:= "Hello, world !";
HintHandle.ActivateHint(Rect(Screen.Width div 2,
Screen.Height div 2,
Screen.Width div 2 + 50,
Screen.Height div 2 + 15)
,HintString);
end;
← →
saha (2003-04-18 19:20) [7]Ясно.
Но а ф-ция CalcHintRect выдает hint только в левом верхнем углу?
А зачем тогда THintWindow.Create( тип TComponent)? Мне думалось
что оно создает hint привязанный к определенному компоненту, а уже относительно него дальше пляшет. Но судя по-вашим словам это не так, а жаль, придется вычеслять куда встыркнуть hint.
← →
Skier (2003-04-18 19:27) [8]>saha
> Мне думалось
> что оно создает hint привязанный к определенному компоненту,
> а уже относительно него дальше пляшет.
Да - привязанный, только что имеешь ввиду под "привязанным компонентом" ?
← →
saha (2003-04-18 19:33) [9]>Да - привязанный, только что имеешь ввиду под "привязанным компонентом" ?
Ну тот который объявлен в create
← →
Skier (2003-04-18 19:36) [10]>saha
Я бы посоветовал тебе внимательно почитать про владельца компонента и его родителя (или его контейнер) и понять разницу, тогда вся путацина исчезнет
"как с белых яблонь дым..." :)
← →
saha (2003-04-18 19:45) [11]ok.
Ну и попутно, тогда еще маленький вопросик.
Как, к примеру, узнать координаты левого верхнего края формы?
← →
Skier (2003-04-18 19:45) [12]см. TForm.Left и TForm.Top
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.05.01;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c