Форум: "Начинающим";
Текущий архив: 2010.12.05;
Скачать: [xml.tar.bz2];
ВнизПроблема с property в наследнике Найти похожие ветки
← →
mfender (2010-09-12 13:23) [0]Здравствуйте, товарищи!
Какая-то странная беда происходит. Есть наследник TTreeView:
TResortItemType = (itRoot, itResort, itRegion, itCity, itObject, itRP);
TResortItemRec = ^PItemRec;
PItemRec = record
Id: Integer;
ItemType: TResortItemType;
Title: string;
Priority: Integer;
end;
TSKOResortTreeView = class(TTreeView)
private
FRootRec: TResortItemRec;
protected
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
Так всё нормально. Но как только я пихаю в public property RootData: TResortItemRec read FRootRec write FRootRec; - счастье заканчивается, и при компиляции начинается какая-то порча с пропаданием компонентов в других фреймах, открытых в IDE и заканчивается сообщением об AV в rtl70.bpl, после чего нужно всё закрыть и перезапустить Delphi.
Что это может быть, и где у меня такой значительный пробел в знаниях, кроме кода в ДНК?
← →
sniknik © (2010-09-12 13:36) [1]где то путаешь с выделением памяти(созданием объекта) или некорректно удаляешь.
кстати, а нафига собственная структура, со своим рутом/деревом? дерева самого TTreeView не хватает? (указатель Data у нода например для своих данных)
← →
mfender (2010-09-12 13:50) [2]
> где то путаешь с выделением памяти(созданием объекта) или
> некорректно удаляешь.
Вот и не пойму, где я чего путаю... Как-то всю жизнь без подобных проблем было всё.
> кстати, а нафига собственная структура, со своим рутом/деревом?
> дерева самого TTreeView не хватает? (указатель Data у нода
> например для своих данных)
Ну это больше мой стёб. У меня предполагаются на разных уровнях разные по содержанию ноды (TResortItemType = (itRoot, itResort, itRegion, itCity, itObject, itRP)), в зависимости от типа будут и разные попаменюшки, и соответственно разные действия. Там ещё TDataSet будет в TTreeNode.Data для всех разные, который будет создаваться в OnExpanded. А в руте тоже будут ноды, и такая же структура с датасетом. Но куда её девать? Не получается однозначности, потому что у корневых нодов нет Parent"а. Вот я и решил сделать просто такое поле, в котором будет указан их тип и датасет. Можно, конечно, упростить и сделать единственный рукой сделанный нод. Но это как-то некошерно, что-ли...
← →
mfender (2010-09-12 14:51) [3]Кстати, вот ещё вопрос: вот эта структура в TTreeNodeData будет
PItemRec = record
Id: Integer;
ItemType: TResortItemType;
Title: string;
Priority: Integer;
ChildDataSet: TZQuery;
end;
При уничтожении нода ChildDataSet самоликвидируется при условии, что его Owner - TTreeView, или нужно как-то дополнительно убивать его. А то я представил, сколько их в памяти скопится за часа три активного счёлканья по [+] ))))
← →
Игорь Шевченко © (2010-09-12 15:15) [4]
> При уничтожении нода ChildDataSet самоликвидируется при
> условии, что его Owner - TTreeView, или нужно как-то дополнительно
> убивать его
При уничтожении Owner-а ликвидируются все его подчиненные. При уничтожении ноды не ликвидируются.
> TResortItemRec = ^PItemRec;
> PItemRec = record
> Id: Integer;
> ItemType: TResortItemType;
> Title: string;
> Priority: Integer;
> end;
как ты не путаешься в названиях, что T, а что P ?
> Но как только я пихаю в public property RootData: TResortItemRec
> read FRootRec write FRootRec; - счастье заканчивается
Код использования не приведен
← →
mfender (2010-09-12 15:32) [5]
> Код использования не приведен
Так его. В том и потеха. И совсем уж становится непонятным, что за AV от него происходит.
> При уничтожении Owner-а ликвидируются все его подчиненные.
> При уничтожении ноды не ликвидируются.
А как его уничтожить? Отдельно делать FreeAndNil(TreeNode.Data.ChlldDataSet) а потом уже нод уничтожать?
← →
mfender (2010-09-12 15:33) [6]
> > Код использования не приведен
>
> Так его. В том и потеха. И совсем уж становится непонятным,
> что за AV от него происходит.
Всмысле, нет его вообще. Пустой класс с конструктором и деструктором, в которых только inherited, и одно поле с его property. И всё.
← →
sniknik © (2010-09-12 16:12) [7]> Всмысле, нет его вообще. Пустой класс с конструктором и деструктором, в которых только inherited, и одно поле с его property. И всё.
сделал по описанному тест, работает - AV нет. добавил property RootData как написано - AV нет.
???
← →
sniknik © (2010-09-12 16:13) [8]> Код использования не приведен
+ 1
+ код конструктора/деструктора, раз уж в описании есть значит не стандартные...
← →
mfender (2010-09-12 16:40) [9]
> + код конструктора/деструктора, раз уж в описании есть значит
> не стандартные...
Ещё нет. Споткнулся на этой стадии. На момент пресловутого AV выглядело так:
constructor TSKOResortTreeView.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
end;
destructor TSKOResortTreeView.Destroy;
begin
inherited Destroy;
end;
> сделал по описанному тест, работает - AV нет. добавил property
> RootData как написано - AV нет.
Вот и мне кажется, что это у меня что=то не то... Сроду такого чуда не было. делал же компоненты, никакого лесапета не изобрёл и тут. А вот какая-то беда... (((
← →
mfender (2010-09-12 16:51) [10]Чёрт возьми, а сейчас заработало... Ничего не понимаю!
> сделал по описанному тест, работает - AV нет. добавил property
> RootData как написано - AV нет.
Может порчу с меня снял? :D :D :D
← →
Anatoly Podgoretsky © (2010-09-12 17:00) [11]Нафиг вообще тут нужен конструктор и деструктор, если ты ничего в них не делаешь?
← →
Anatoly Podgoretsky © (2010-09-12 17:02) [12]Я уже молчу про это
TResortItemRec = ^PItemRec;
← →
mfender (2010-09-12 17:18) [13]
> Нафиг вообще тут нужен конструктор и деструктор, если ты
> ничего в них не делаешь?
Там ещё будет. И в деструкторе будет.
> Я уже молчу про это
> TResortItemRec = ^PItemRec;
Ну, извините. Дурацкая привычка отступать от принятых соглашений.
← →
Anatoly Podgoretsky © (2010-09-12 17:22) [14]Поменяй имена, наоборот.
← →
Ega23 © (2010-09-12 20:49) [15]Кстати. При смене парента все ноды сохраняются в стрим. Поэтому, если в своей структуре держишь ссылку на нод, то её надо "выправить" будет.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.12.05;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.008 c