Текущий архив: 2005.12.11;
Скачать: CL | DM;
ВнизКомпонент TVirtualStringTree Найти похожие ветки
← →
DEMs © (2005-11-16 10:09) [0]Здравствуйте
Если кто-нибудь работал с компонентом TVirtualStringTree, подскажите пожайлуста!!!!
Вначале я заполняю дерево.
procedure TfrmMain.LoadTree;
var
dat: PNodeData;
TipDolg1, TipDolg2, TipDolg3: PVirtualNode;
begin
Tree.NodeDataSize:= SizeOf(TNodeData);
if (TipDolg1=nil)and(TipDolg2=nil)and(TipDolg3=nil) then
begin
TipDolg1:=Tree.AddChild(nil);
dat:=Tree.GetNodeData(TipDolg1);
dat.Text:="AAAAAAAA";
TipDolg1.States:=TipDolg1.States+[vsExpanded];
TipDolg2:=Tree.AddChild(nil);
dat:=Tree.GetNodeData(TipDolg2);
dat.Text:="BBBBBBBBB";
TipDolg2.States:=TipDolg2.States+[vsExpanded];
TipDolg3:=Tree.AddChild(nil);
dat:=Tree.GetNodeData(TipDolg3);
dat.Text:="CCCCCCCC";
TipDolg3.States:=TipDolg3.States+[vsExpanded];
end;
end;
Затем начинаю заново перегружать его:
Tree.Clear;
TipDolg1:=nil;
TipDolg2:=nil;
TipDolg3:=nil;
LoadTree;
После нескольких таких перезагрузок компонет пропадает с экрана и выдаётиься ошибка. Подскажите пожалуйста в чём проблема.
← →
Lin7 © (2005-11-16 10:43) [1]
> DEMs © (16.11.05 10:09)
Привет.
Без обид - проблема в нежелании разобраться, почитав help к компоненту (там ВСЁ! расписано на примере) и как следствие - в кривых ручках.
Загружаешь дерево не правильно.
Примеры с русскими комментариями см. здесь
http://forum.sources.ru/index.php?showtopic=85824&hl=virtualtreeview
http://forum.sources.ru/index.php?showtopic=101679&hl=virtualtreeview
http://forum.sources.ru/index.php?showtopic=92880&hl=virtualtreeview
http://forum.sources.ru/index.php?showtopic=94023&hl=virtualtreeview&view=showall
http://forum.sources.ru/index.php?showtopic=94023&st=0
Если не разберёшся - приведи весь код. Я на работе, если будет время - помогу.
Удачи.
← →
jack128 © (2005-11-16 10:56) [2]DEMs © (16.11.05 10:09)
TipDolg1:=Tree.AddChild(nil);
dat:=Tree.GetNodeData(TipDolg1);
dat.Text:="AAAAAAAA";
TipDolg1.States:=TipDolg1.States+[vsExpanded];
Абсолютно верная работа с компонентом.
Если сразу после добавления узла ты хочешь заполнить данные, то ты должен "обвалидить" узел.
VST.ValidateNode(Node, False); Иначе ты не сможешь освободить данные связанные с узлом с событии OnFreeNode и у тебя будет MemLeak
DEMs © (16.11.05 10:09)
dat.Text:="AAAAAAAA";
Вот яркий пример. В OnFreeNode - ты обязательно должен будешь сделатьFinalize(PNodeData(VST.GetNodeData(Node))^);
DEMs © (16.11.05 10:09)
TipDolg1.States:=TipDolg1.States+[vsExpanded];
TipDolg1 - это просто указатель на запись. Считай, что эта запись ReadOnly, а если ты хочешь изменить какие то свойства узла, то используй соответствующие методы дерева. В данном случае VST.Expanded[Node] := True;
В результате твой код должен будет выглядить так:Node := Tree.AddChild(nil);
Tree.Validate(Node, False);
Data := Tree.GetNodeData(Node);
Data.Text := "AAAAAAA"; // Я так понимаю - это у тебя заголовок узла?
Tree.InvalidateNode(Node); // Если ты меняешь заголовок узла напрямую, а не через свойство Text, то ты должен перерисовать узел
Tree.Expanded[Node] := True;
...
+ не забыть обработчик OnFreeNode
← →
jack128 © (2005-11-16 11:02) [3]jack128 © (16.11.05 10:56) [2]
Абсолютно НЕверная(!!!!!!!!!!!!!) работа с компонентом.
lol
← →
DEMs © (2005-11-16 11:02) [4]Спасибо
Страницы: 1 вся ветка
Текущий архив: 2005.12.11;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.036 c