Главная страница
    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.043 c
3-1159721176
DimDim
2006-10-01 20:46
2006.12.10
Перекрестный запрос


3-1160124844
snake767
2006-10-06 12:54
2006.12.10
Удалить одинаковые записи в FireBird


15-1163744578
@Ujin
2006-11-17 09:22
2006.12.10
Кто-нибудь натыкался на исходники paxScript?


9-1139750452
cava
2006-02-12 16:20
2006.12.10
Спрайты


2-1164469926
Alians
2006-11-25 18:52
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский