Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2013, 19:33   #1
LuckyD
 
Регистрация: 09.04.2013
Сообщений: 7
По умолчанию TreeView1.Items[0].Data как переназначить указатели

Хочу привязать к ноде TtreeView дополнительное значение.
Назначение и чтение проходит удачно, но на попытки очистить и измененить компилятор выдает ошибку.

Код:
  PMyData = ^TMyData;
  TMyData = record
    par1: string;
    par2: TDateTime;
  end;
procedure TForm1.FormCreate(Sender: TObject);
var
  p: PMyData;
begin

  TreeView1.Items.AddChild(nil,'Hello');
  New(p);
  p^.par1:= 'Hello, World!';
  p^.par2:= Now;
  TreeView1.Items[0].Data:= p; // запись указателя делает

//  чтение тоже идет
with TreeView1.Selected do
  ShowMessage(PMyData(Data).par1 + #13 + DateToStr(PMyData(Data).par2));

// c переназначением проблема
  New(p);
  p^.par1:= 'Hello, World!';
  p^.par2:= Now;
  TreeView1.Items[0].Data:= p;

// и c очисткой проблема
Dispose(PMyData(TreeView1.Items[0].Data));

End;
Подскажите пожалуйста что не правильно делаю

Последний раз редактировалось Stilet; 10.04.2013 в 08:12.
LuckyD вне форума Ответить с цитированием
Старый 10.04.2013, 00:06   #2
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

во-первых, вы создаете узел, потом присваиваете данные полю data первого узла, хотя созданный узел не всегда первый, да к тому же и выделенный. с индексами поработайте и все будет ок.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 10.04.2013, 08:11   #3
LuckyD
 
Регистрация: 09.04.2013
Сообщений: 7
По умолчанию

Спасибо за ответ. Действительно с индексами была несостыстыковка. Сейчас отладил. Но очистка памяти Dispose(PMyData(TreeView1.Items[0].Data)) по прежнему не работает - отладчик проходит эту строку не изменяя значения.
LuckyD вне форума Ответить с цитированием
Старый 10.04.2013, 08:14   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
отладчик проходит эту строку не изменяя значения.
А с чего ты взял что Dispose() обнуляет указатель?
Вот из хелпа:
Цитата:
After a call to Dispose, the value of P is undefined and it is an error to reference P.
Про nil не сказано ничего.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как удалить все значения Items в ListBox? quarty Общие вопросы Delphi 4 05.05.2020 21:49
Columns.Items[i] - как добавить поле Хитрец БД в Delphi 8 12.09.2012 11:26
treeview1 listview1 KOL MCK Оформить как проводник pozvonochnoe Компоненты Delphi 2 06.04.2012 21:02
как переназначить расположение папок пользователя в Windows 7 Boot Свободное общение 0 05.10.2011 02:23
Как переназначить главную форму??? an.net C# (си шарп) 2 10.04.2011 09:53