Форум: "Основная";
Текущий архив: 2002.10.07;
Скачать: [xml.tar.bz2];
ВнизНе сохраняется сво-во типа наследника от 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c