Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
6-21163
Alexsey
2002-08-06 11:16
2002.10.07
КАК послать Post запрос на сервер через сокеты?


1-20997
lovres
2002-09-26 17:04
2002.10.07
Как вертикально Caption на кнопку вывести?


6-21185
_smile
2002-07-26 08:04
2002.10.07
Мне нужно полностью самому сформировать HTTP запрос типа POST


1-20979
const-od
2002-09-26 15:02
2002.10.07
OLE + MS Excell


4-21308
w342
2002-08-20 12:57
2002.10.07
Как HTML перегнать в BMP или другой графический формат?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский