Вниз
Скачать: CL | DM;

TreeNode.Data и String   Найти похожие ветки 

← →
в режиме поиска   (2003-01-23 12:19) [0]

Добрый день!
Возникла проблема с присвоением TreeNode.Data строки string.
Как я понимаю, TreeNode.Data - это указатель. Как связать его со строкой.
Спасибо


← →
tga ©   (2003-01-23 12:24) [1]

Можно использовать вместо String PChar например.

Но я в таких случаях делаю нечто такое:
type
Tstr=class
val:string;
constructor Create(val:string);
end;
...
constructor TStr.Create(val:string);
begin
self.var=var;
end;

...


а в проге:

TreeNode.Data := TStr.Create(MyStr);


← →
в режиме поиска   (2003-01-23 12:48) [2]

> tga
К примеру я создаю TreeView из файла и каждому TreeNode.Data присваиваю стоку вышеуказанным способом.
Но нужно же осободить память. Как сделать если узлов много?


← →
Reindeer Moss Eater   (2003-01-23 13:07) [3]

Но нужно же осободить память. Как сделать если узлов много?
А в чем трудность-то?


← →
Skier ©   (2003-01-23 13:18) [4]

>в режиме поиска
1) type PString = ^String;
2)
var
AStr : PString;
begin
//..........
New(AStr)
AStr^ := "hello, world !";
TreeNode.Data := AStr;
//..........
end;

Потом не забыть освободить !
Dispose(TreeNode.Data);


← →
в режиме поиска   (2003-01-23 13:19) [5]

я к примеру делаю так :


var
MyStr : PString;
begin


Добавляю узлы :


//...........
New(MyStr);
MyStr^ := "bla-bla-bla"
TreeView.Items.AddChildObject(ParentNode, NodeName, MyStr);
....


Потом освобождаю :


procedure TMainFrm.FormClose(Sender: TObject; var Action: TCloseAction);
var i:integer;
begin
for i:=0 to TreeView1.Items.Count-1 do
Dispose(TreeView1.Items.Item[i].Data);
end;


так правильно??


← →
Fiend ©   (2003-01-23 13:21) [6]

У дерева есть событие OnDeletion вызывается при удалении узла.
Напишите там обработчик уничтожающий данные под указателем Data.

и еще, на мой взгляд как то помпезно использовать для хранения строки класс. Проще либо ПЧар, либо самому его сделать

pString = ^string;

далее
var a: pString;
new(a);

Node.Data:= a;

обращаться потом string(Node.Data^)

уничтожать dispose(pString(Node.Data))


← →
uw ©   (2003-01-23 13:22) [7]

Предлагаю объявить переменную типа TStringList, добавить в этот лист "строка", включить флажок Use Debug DCUs в Project|Options|Compiler и протрассировать вплоть до TStringList.Destroy. Тогда станет понятно, как Они это делают (в частности применяют Finalize).


← →
Fiend ©   (2003-01-23 13:24) [8]

То в режиме поиска
про удаление почти правильно, если у элементов TreeNodes нету дочерних, то всё освободите, а если есть подчинённые, то их память вы не освобождаете

То Skier, отэто повторились :)


← →
Skier ©   (2003-01-23 13:26) [9]

>Fiend
"Повторение - мать учения !" :)))


← →
в режиме поиска   (2003-01-23 13:51) [10]

> Fiend:
> про удаление почти правильно, если у элементов TreeNodes нету дочерних, то всё освободите,
> а если есть подчинённые, то их память вы не освобождаете

Почему?
Попробуйте создать на форме TreeView, в design-time насоздавать несколько узлов (вложенных и просто), бросить на форму мемо и кнопку.

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to TreeView1.Items.Count-1 do
begin
Memo1.Lines.Add(TreeView1.Items.Item[i].Text);
end;
end;

В мемо показываются все узлы. Так что Вы не правы :-)


← →
icWasya ©   (2003-01-23 14:01) [11]

у TTreeView есть событие OnDestroyItem
в нём и надо делать удаление


← →
в режиме поиска   (2003-01-23 14:20) [12]

2 icWasya

в D6 нет...


← →
Fiend ©   (2003-01-23 14:26) [13]

То в режиме поиска:
вам жеж сказали уже OnDeletion внимательно читать надо

То icWasya: неверно говорите название события


← →
Reindeer Moss Eater   (2003-01-23 14:33) [14]

Удобно следующее:

-В качестве Data изпользовать пользовательский класс.
-Класс реализовать в отдельном модуле.
-Иметь в модуле приватный экземпляр TList, создаваемый в initialization и убиваемый в finalization
-В конструкторе пользовательского класса добавлять созданный экземпляр в список
-в finalization вызывать процедуру, уничтожающую все созданные экземпляры
-Забыть про мороку с освобождением памяти в своих проектах.





Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.01 c
1-4894
Ahmad K
2003-01-22 05:02
2003.02.03
Ярлык... и как его настроить...


1-4960
в режиме поиска
2003-01-23 12:19
2003.02.03
TreeNode.Data и String


14-5258
Top Gun
2003-01-16 18:21
2003.02.03
Почему сервис паки весят так много ?


7-5291
FoxM
2002-11-21 23:24
2003.02.03
%system root%


14-5226
iNew
2003-01-16 10:39
2003.02.03
Установил SP3 для Win2k Adv Server. В папке C: WINNT появилось




   Наверх