Форум: "Основная";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
ВнизHint для TreeView Найти похожие ветки
← →
Новик (2003-09-12 14:18) [0]Ув. мастера. Помогите решить проблемку. Есть TreeView, надо
для каждого Item"a вывести свой Hint. Кажется все просто: прописываю Application.OnShowHint, в TreeView1OnMouseMove пишу следующее:
var
P:TPoint;
begin
Application.HideHint;
P.X:=X;
P.Y:=Y;
P:=TreeView1.ClientToScreen(P);
Application.ActivateHint(P);
end;
В WinXP код работает нормально. Но в 2000 или NT4 подсказка по ActivateHint не возникает. Почему и как заставить код работать?
← →
Verg (2003-09-12 14:30) [1]
procedure TForm1.TreeView1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var Tn : TTreeNode;
begin
Tn:=(Sender as TTreeView).GetNodeAt(X,Y); // Так получаешь "над каким" мышь
if Tn<>nil and
Tn<>OldTn then // OldTn : TTreeNode - поле формы
begin
OldTn:=Tn;
Application.CancelHint;
TreeView1.Hint:=Tn.Text; // ну например
end;
end;
← →
Verg (2003-09-12 14:39) [2]Не, че-то не то, попробовать негде...
Вроде так:
procedure TForm1.TreeView1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var Tn : TTreeNode;
begin
Tn:=(Sender as TTreeView).GetNodeAt(X,Y); // Так получаешь "над каким" мышь
if (Tn<>OldTn) then // OldTn : TTreeNode - поле формы
begin
OldTn:=Tn;
if Tn<>nil then
begin
Application.CancelHint;
TreeView1.Hint:=Tn.Text; // ну например
end else TreeView1.Hint:="";
end;
end;
← →
Новик (2003-09-12 17:40) [3]Не работает у меня этот код. Да и разве CancelHint не значит отменить вывод подсказки?
← →
Verg (2003-09-13 15:34) [4]А у меня работает...
Грустно, правда?
При этом стопудово работает.
А если не трогать
> Application.OnShowHint
???
> Да и разве CancelHint не значит отменить вывод подсказки?
Значит.:))
ну не навсегда же!
← →
Новик (2003-09-15 11:20) [5]Наверное я недоформулировал вопрос. Фишка не в том, чтобы
при наведении мыша на TreeView показать одиночную посказку, нужно чтобы при движении по компоненту над каждым узлом отображалась подсказка. Если кому-нибудь еще это понадобится привожу решение (почти сам догадался):
procedure TForm1.TreeView1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
Rect:TRect;
Node:TTreeNode;
P:TPoint;
begin
Node:=TreeView1.GetNodeAt(X,Y);
if Node=OldNode then exit;
OldNode:=Node;
if OldNode=NIL then exit;
if HintWindow<>NIL then
HintWindow.ReleaseHandle;
HintWindow:=THintWindow.Create(self);
Rect:=HintWindow.CalcHintRect(200,"Ваш текст",NIL);
P:=TreeView1.ClientToScreen(Point(X,Y));
Rect.Top:=Rect.Top+P.Y;
Rect.Bottom:=Rect.Bottom+P.Y;
Rect.Left:=Rect.Left+P.X;
Rect.Right:=Rect.Right+P.X;
HintWindow.ActivateHint(Rect,"Ваш текст");
end;
Это работает везде.
← →
ЮРИЙ_К (2003-09-15 11:33) [6]Здесь если использовать стандартный хинт, то нужно ешшо регулировать скорость показа самого хинта, а если передвигать зверя мышиного по дереву быстро, то и он вааще не появится 8-).
Сам только закончил ковырять эту проблему.
>> Новик Если очень нужно, пиши на мыло, вышлю код обработки
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.011 c