Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.10;
Скачать: 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 вся ветка

Текущий архив: 2006.12.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
1-1161944340
312kbps
2006-10-27 14:19
2006.12.10
PopupMenu and Handle


15-1164091096
zdm
2006-11-21 09:38
2006.12.10
DeleteFile


11-1140415603
LAutour
2006-02-20 09:06
2006.12.10
Нужно передать Items из KOLListBox параметром в процедуру.


15-1163932576
Palladin
2006-11-19 13:36
2006.12.10
CrystalReports


9-1139482424
VolanD666
2006-02-09 13:53
2006.12.10
Collision Detection II.