![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
shilnik |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 377 Регистрация: 22.12.2003 Репутация: нет Всего: 1 |
Добрый день!
Ситуация такая... Есть класс TTask (TComponent) его надо будет сохранять в файл и загружать из файла. У этого класа есть свойство Steps:TSteps; published; - Это коллекция, элементы которой класс TStep. Но в коллекции находятся объекты не самого TStep, а классы, унаследованные от TStep (со своими добавочными свойствами). Код выглядит примерно так:
Добавление объектов Step в коллекцию Steps происходит так:
Сохранение в файл и загрузка из файла:
А теперь внимание... ошибка При загрузке из файла выскакивает ошибка, что свойство PathFrom не существует. Почему это происходит я понимаю. Видимо по умолчанию создается объект класса TStep, а не TStepCopyFile. Но как быть? Как правильно написать такой класс, чтобы он корректно сохранялся\загружался? |
||||||
|
|||||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Насколько я помню, для сохранения свойств-объектов нужно зарегистрировать специальный объект сохранялку, который и будет сериализовать свойство-объект. Тут в 2х словах не расскажешь читайте книгу "Рэй Конопка - Создание оригинальных компонент в Delphi", ее можно найти тут http://www.delphilab.ru/content/blogsection/4/46/
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
shilnik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 377 Регистрация: 22.12.2003 Репутация: нет Всего: 1 |
Alexeis, Если мы друг друга правильно поняли, то в моем случае объект-сохранялка - это объект класса TFileStream с методами ReadComponent и WriteComponent
С простыми объектами это работает. Но в моем случае в объекте описано, что коллекция из объектов класса TStep, а на самом деле там потомки этого класса. Из за этого, видимо, и получается ошибка. ЗЫ: Книжку качаю, спасибо. |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Неа, нужен либо редактор свойств объекта PropertyEditor, либо редактор всего компонента ComponentEditor. Сериализатор не знает что является значением текущего объекта, вот это то как раз и нужно указать в в методах наследников PropertyEditor или ComponentEditor. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |