Главная страница
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.062 c
14-1132226125
dr Tr0jan
2005-11-17 14:15
2005.12.11
Кто помнит Basic?


14-1132144432
dr Tr0jan
2005-11-16 15:33
2005.12.11
Глюк в Multisim (EWB)


8-1121002140
Дмитрий Белькевич
2005-07-10 17:29
2005.12.11
Быстрый сдвиг массива точек на дробное значение точек.


14-1132530722
SVASH
2005-11-21 02:52
2005.12.11
USBPRINT.SYS


14-1132654668
Ajax
2005-11-22 13:17
2005.12.11
Новый вид червей или персональный подарок?