Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.07;
Скачать: CL | DM;

Вниз

Не сохраняется сво-во типа наследника от TCollection.   Найти похожие ветки 

 
evgeg ©   (2002-09-25 18:58) [0]

Здраствуйте!

Сделал класс TCollectionEx, производный от TCollection c расширенной функциональностью. В частности в нем сделал конструктор и метод Add виртуальными. Потом сделал класс
TMyItems, производный от TCollectionEx и компонент со свойством типа TMyItems. Так вот: это свойство отображается в инспекторе объектов и редактируется в моем редакторе свойств, но НЕ сохраняется.
Работаю в Дельфи 2, а в ней нет встроенного редактора коллекций.

В чем ошибка и как исправить?

С уважением, Евгений.


 
Andrey Shakula   (2002-09-25 19:10) [1]

Я обычный TCollection сохраняеться? (Delphi 2 это так давно было, что не помню.) Я еще перекрывал
function GetOwner: TPersistent; override;

Может поможет.


 
evgeg ©   (2002-09-25 19:24) [2]

> Andrey Shakula (25.09.02 19:10)

Прямой наследник от TCollection сохраняется. Owner-а нет как нет и редактора коллекций.


 
Юрий Федоров ©   (2002-09-25 19:38) [3]

А попробуй отнаследовать от TOwnedCollection


 
evgeg ©   (2002-09-25 19:47) [4]

Нету в Д2 TOwnedCollection.


 
Юрий Зотов ©   (2002-09-25 20:42) [5]

1. Посмотрите здесь
http://www.delphikingdom.com/helloworld/tcollection.htm
и сравните с тем, что у Вас. Возможно, что-то и вылезет.

2. Не буду утверждать, но очень не верится, что в Дельфи 2 нет встроенного редактора коллекций. Насколько я помню, он вместе с коллекциями и появился.


 
evgeg ©   (2002-09-25 22:19) [6]

> Юрий Зотов © (25.09.02 20:42)

Вашу статью я давно прочитал.
А редактора коллекций в Дельфи 2 точно нет. Собственно, я его сейчас и пишу. 2 дня сидел и в результате оказалось, что редактирует, но св-во не сохраняется в dfm.

Вопрос по статье: обязательно ли перекрывать св-во Items, методы Create и Add?
Не будет ли ошибкой сделать в своем наследнике Create и Add виртуальными?


 
evgeg ©   (2002-09-26 07:56) [7]

Наверх.


 
Юрий Зотов ©   (2002-09-26 10:36) [8]

> обязательно ли перекрывать св-во Items, методы Create и Add?

Вообще говоря, не обязательно. Просто в Create удобно передавать владельца коллекции, а в Items и Add удобно сразу определить конкретный класс элемента.

> Не будет ли ошибкой сделать в своем наследнике Create и Add виртуальными?

Borland это делает в TComponent. Вероятно, и нам можно.

========

Если в D2 нет своего редактора, как же там работать с коллекцией в design-time? Выходит, никак, только в run-time можно. Но тогда как же Вы определили, что родные коллекции сохраняются? И что именно в них сохраняется? Ведь, если их нельзя редактировать, то они остаются пустыми и сохранять в них просто нечего. Странно. Что-то здесь, IMHO, не так.

Посмотрите по исходникам VCL, нет ли каких-то особенностей в DefineProperties, Read и Write для свойства Items, из-за которых потомки коллекции могут не сохраняться.


 
Старый паскалист   (2002-09-26 11:40) [9]

Посмотрел я в исходники - оказалось:

TCollection - предопределённый класс, который понимают TReader/TWriter, и соответственно, читают и записывают его св-во
Items (к-рое не published и не DefineProperties - т.е. по стандартным правилам сохраняться не должно).

Посмотри, есть ли в D2 в TReader"e/TWriter"e методы
ReadCollection/WriteCollection -
Потому что они пытаются читать/писать коллекцию как обычный
персистент - то их ждёт неудача.


 
evgeg ©   (2002-09-26 19:39) [10]

Спасибо за помощь. Я уже разобрался. Ошибка определtнной степени глупости -- в компоненте не определил медод для записи свойства-коллекции. Т. е. получилось published сво-во только для чтения. Редактировать его через мой редактор св-ва Дельфи дает, а сохранять не хочет. Стоило написать метод для записи -- и все заработало.

> Юрий Зотов © (26.09.02 10:36)
> Если в D2 нет своего редактора, как же там работать с коллекцией в design-time? ...

Там надо писать редактор для каждого типа-наследника от коллекции в отдельности (вот головняк то!). То, что коллекция сохраняется, определяется из того, что сохраняется потомок коллекции, для которого определен редактор свойства и в нем нет никакого кода для сохранения.

> Старый паскалист (26.09.02 11:40)
> Посмотри, есть ли в D2 в TReader"e/TWriter"e методы
ReadCollection/WriteCollection -

Есть.



Страницы: 1 вся ветка

Текущий архив: 2002.10.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
3-20937
Студент2002
2002-09-17 15:29
2002.10.07
Мудреный поиск


1-21118
Демонов Е.В .
2002-09-25 12:30
2002.10.07
Визуальная ли компонента?


6-21167
Сергей Нечепуренко
2002-08-06 11:46
2002.10.07
Отсылка широковещательных сообщение по локальной сети.


6-21169
Egen
2002-08-07 08:15
2002.10.07
Замещение стандартной процедуры сокетовых ошибок в 2тоннике


3-20942
Ol11
2002-09-18 13:05
2002.10.07
Пожалуста Подскажите, Всегда ли нужно использовать клиент-сервер