Форум: "Основная";
Текущий архив: 2003.09.15;
Скачать: [xml.tar.bz2];
ВнизХинт на TreeView после себя сильно мусорит. Найти похожие ветки
← →
ЮРИЙ_К (2003-09-01 14:57) [0]При прохождении по дочерним веткам дерева появляется хинт, расшифровывающий некоторое значение, относящееся к этой ветке (задумка в программе). Так вот после его перемещения, затирается содержимое TreeView размером этого хинта. Как это можно предотвратить? Если кому не совсем понятно, могу на мыло кинуть картинку этой неприятности.
← →
Song (2003-09-01 15:16) [1]Попробуй убрать стандартные хинты и сделать свои (THintWindow)
← →
Galera (2003-09-01 17:24) [2]Как реализовал показ хинта к конкретной ветке?
Код в студию:
(не долж"он ничего он затирать, ой не долж"он)
а со своими хинтами больше париться, можно сделать проще
← →
Song (2003-09-01 20:34) [3]
> Как реализовал показ хинта к конкретной ветке?
По координатам мыши и методу TTreeView.GetNodeAt()
← →
ЮРИЙ_К (2003-09-01 21:24) [4]Во как:
...
private
FTreeItemHintWnd: THintWindow;
FHintShow: Boolean;
constructor TPutListFrm.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FTreeItemHintWnd := THintWindow.Create(nil);
FTreeItemHintWnd.Color := clInfoBk;
end;
destructor TPutListFrm.Destroy;
begin
if Assigned(FTreeItemHintWnd) then
FreeAndNil(FTreeItemHintWnd);
// inherited Destroy; <- не закоментируешь - ОШИБКУ выдает
end;
procedure TPutListFrm.TreeView1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
var
rcHint, rcHintBounds: TRect;
trvNode: TTreeNode;
s : String;
begin
s := "";
if FHintShow then FTreeItemHintWnd.ReleaseHandle;
if htOnItem in TreeView1.GetHitTestInfoAt(X, Y) then
begin
trvnode := TreeView1.GetNodeAt(X, Y);
if Assigned(trvNode) and (trvNode.Data <> nil) then
begin
MehFindTbl.FindKey([Integer(trvNode.Data)]);
s := "Гос. № - " + MehFindTblGosNom.AsString + #13 +
"Гар. № - " + MehFindTblGarNom.AsString;
rcHintBounds := FTreeItemHintWnd.CalcHintRect(200, s, nil);
SetRect(rcHint, X + 16, Y, X + 16 + rcHintBounds.Right -
rcHintBounds.Left, Y + rcHintBounds.Bottom - rcHintBounds.Top);
Windows.ClientToScreen(TreeView1.Handle, rcHint.TopLeft);
Windows.ClientToScreen(TreeView1.Handle, rcHint.BottomRight);
FTreeItemHintWnd.ActivateHint(rcHint, s);
FHintShow := False;
end
else
if Assigned(FTreeItemHintWnd) then
FTreeItemHintWnd.ReleaseHandle;
end
else FTreeItemHintWnd.ReleaseHandle;
end;
procedure TPutListFrm.FormDestroy(Sender: TObject);
begin
if Assigned(FTreeItemHintWnd) then
FreeAndNil(FTreeItemHintWnd);
inherited Destroy;
end;
← →
Galera (2003-09-03 07:05) [5]У TreeView проблемы с перерисовкой, даже иконку когда меняешь, нужно Refresh ить, в этом коде ничего предложить пока не могу на скорую руку,
но могу предложить другой код, (реально работающий код, без всяких затираний):
procedure Tfrm_Main.TreeViewMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
var Node : TTreeNode;
AHitTest : THitTests;
begin
AHitTest := TreeView.GetHitTestInfoAt(X,Y);
Node:=TreeView.GetNodeAt(X, Y);
if not (htOnIcon in AHitTest)then
begin
TreeView.Tag:=0;
TreeView.Hint:="";
TreeView.ShowHint:=False;
Exit;
end;
if (TreeView.Tag<>Integer(Node.ItemId)) and (TreeView.Hint="") then
begin
TreeView.Tag:=Integer(Node.ItemId);
TreeView.Hint:="Приравнивай чему хочешь";
TreeView.ShowHint:=True;
Exit;
end;
if TreeView.Tag<>Integer(Node.ItemId) then
begin
TreeView.Tag:=0;
TreeView.Hint:="";
TreeView.ShowHint:=False;
Exit;
end;
end;
РЕШЕНИЕ, КАК ГОВОРИТСЯ В ЛОБ,
хинт появляется только тогда, когда мышь на иконкой ветки
← →
Galera (2003-09-03 16:47) [6]constructor TPutListFrm.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FTreeItemHintWnd := THintWindow.Create( Self);
FTreeItemHintWnd.Color := clInfoBk;
end;
Попробуй
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.15;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c