Главная страница
    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.044 c
1-1132078212
AntonXXX
2005-11-15 21:10
2005.12.11
Запуск процедуры из DLL при клике


8-1120937755
Yura32
2005-07-09 23:35
2005.12.11
OpenDialog


14-1132584149
manulo
2005-11-21 17:42
2005.12.11
LPT


2-1132559466
psa247
2005-11-21 10:51
2005.12.11
Открыть реестр подобно Regmon !


2-1133005956
kami
2005-11-26 14:52
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский