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

TTreeView: как правильно использовать метод AddObject?   Найти похожие ветки 

 
Gavrila ©   (2006-11-20 11:31) [0]

Есть тип
type
 PMyRec = ^TMyRec;
 TMyRec = Record
   Param : String;
 End;


Добавляю таким образом:

procedure TForm1.Button1Click(Sender: TObject);
Var
 MyRec1: PMyRec;
begin
 New(MyRec1);
 MyRec1.Param:= Trim(Edit1.Text);
 TreeView1.Items.AddObject(Nil, Trim(Edit1.Text), MyRec1);
 Dispose(MyRec1);
end;


Пытаюсь его прочитать таким образом:
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
Var
 MyRec1: PMyRec;
begin
 If Node = Nil then
Exit;

 New(MyRec1);
 MyRec1:= PMyRec(TreeView1.Selected.Data^);

 Edit1.Text:= MyRec1.Param;

 Dispose(MyRec1);
end;


возвращает всякий "мусор"...
подскажите, плз, что я не так делаю?


 
SPeller_work   (2006-11-20 11:35) [1]

procedure TForm1.Button1Click(Sender: TObject);
Var
MyRec1: PMyRec;
begin
New(MyRec1);
MyRec1.Param:= Trim(Edit1.Text);
TreeView1.Items.AddObject(Nil, Trim(Edit1.Text), MyRec1);
// Dispose(MyRec1);
end;

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
Var
MyRec1: PMyRec;
begin
If Node = Nil then
Exit;

// New(MyRec1);
MyRec1:= PMyRec(TreeView1.Selected.Data^);

Edit1.Text:= MyRec1.Param;

// Dispose(MyRec1);
end;

Dispose надо делать при удалении итема из списка


 
clickmaker ©   (2006-11-20 11:36) [2]


> MyRec1:= PMyRec(TreeView1.Selected.Data^);

MyRec1:= PMyRec(TreeView1.Selected.Data);
далее к полям можно обращаться обычным образом.
Разыменование нужно, только если MyRec1 объявлена как TMyRec


 
SPeller_work   (2006-11-20 11:37) [3]

Методом TreeView1.Items.AddObject ты запоминаешь указатель на свои данные. А в твоем варианте кода ты сразу же освобождаешь память, на которую запомнил указатель. Потому и мусор был. Память надо освобождать при удалении итема, чтобы утечек небыло, если treeview этим сам не занимается (не вкурсе этого момента).


 
Gavrila ©   (2006-11-20 11:39) [4]

сенкс, понял


 
clickmaker ©   (2006-11-20 11:51) [5]


> treeview этим сам не занимается

не занимается


 
Vlad433 ©   (2006-11-20 12:01) [6]

В приведенном коде строка edit1.text 2 раза запоминается, в тексте узла и обьекте. Зачем ?


 
Gavrila ©   (2006-11-20 12:11) [7]

это простой пример, на самом деле название узла будет содержать название объекта, а в объекте будут храниться некие данные, описывающие его



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

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



Память: 0.46 MB
Время: 0.027 c
9-1139671686
VolanD666
2006-02-11 18:28
2006.12.10
Общая матрица поворота...


2-1164332339
Sp1r1t
2006-11-24 04:38
2006.12.10
Экспорт из DLL


15-1163766793
MikePetrichenko
2006-11-17 15:33
2006.12.10
gmail


15-1163791359
Kolan
2006-11-17 22:22
2006.12.10
А бывает китайско-русский переводчик?


15-1164010694
Ольга
2006-11-20 11:18
2006.12.10
как убрать ошибку "invalid variant type conversion"




   Наверх