Форум: "Основная";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "Основная";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.041 c