Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.05 c
1-1131901522
Sam Stone
2005-11-13 20:05
2005.12.11
Сохранение связей объектов


2-1132863505
LG
2005-11-24 23:18
2005.12.11
Подсветка


2-1132926394
Graf
2005-11-25 16:46
2005.12.11
Перехват разрешения экрана


2-1132577865
Igor_thief
2005-11-21 15:57
2005.12.11
Active Desktop


1-1131994208
Sam Stone
2005-11-14 21:50
2005.12.11
Метод при наследовании