Главная страница
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.017 c
4-21326
Delphi 5.01
2002-08-20 23:41
2002.10.07
Izmenit font Hint-a


7-21287
AArt
2002-07-29 11:50
2002.10.07
Как написать свой сервис под WinNT


3-20907
amateur2002
2002-09-17 10:28
2002.10.07
Database Connect...


1-21078
vic_vm
2002-09-25 05:44
2002.10.07
Как увеличить значение указателя


3-20939
Separator
2002-09-17 09:44
2002.10.07
Подскажите какие лучше всего работать с mysql