Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];

Вниз

Компонент 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.055 c
2-1133073559
Jester2
2005-11-27 09:39
2005.12.11
Люди pls помогите, я только начинаю кодить на Delphi


3-1130404294
Ильичев С.А.
2005-10-27 13:11
2005.12.11
CreateParameter


9-1121962924
Conferno
2005-07-21 20:22
2005.12.11
Капризы Shadow Volume (GLScene)


4-1128789954
capkoh
2005-10-08 20:45
2005.12.11
Куда девается сообщение клавиатуры?


14-1132251501
leonidus
2005-11-17 21:18
2005.12.11
Как подсчитать кол-во обращений к сканеру





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский