Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.063 c
2-1164103701
Term
2006-11-21 13:08
2006.12.10
Конвертация в Unicode


15-1164013021
palva
2006-11-20 11:57
2006.12.10
Ода во славу пиратства


15-1164194164
Qwee
2006-11-22 14:16
2006.12.10
Помогите решить задачу!


15-1164202060
Чапаев
2006-11-22 16:27
2006.12.10
В ДатаСете непонятность


2-1164549497
AHTOLLlKA
2006-11-26 16:58
2006.12.10
Изменить ресурсы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский