Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];

Вниз

Владелец коллекции   Найти похожие ветки 

 
Navi   (2004-09-12 10:55) [0]

Здравствуйте!
Есть такая добрая статья Юрия Зотова "Коллекции и работа с ними". Там, функция, возвращающая владельца коллекции должна возвращать тип TPersistent. А если у меня ее владелец TObject?
Спасибо.


 
DiamondShark ©   (2004-09-12 12:13) [1]

Ну и что? Пусть возвращает TObject. Просто такую коллекцию нельзя будет в инспекторе объектов показать.
В чём проблема-то?


 
Navi   (2004-09-12 12:51) [2]

> DiamondShark "... В чём проблема-то?"
А в том, что для TPersistent (папа TCollection):
function GetOwner: TPersistent; dynamic;

Соответственно:
function GetOwner: TObject; override; выдает Declaration of "GetOwner" differs from previous declaration.

А приведение:
function TMyCollection.GetOwner: TPersistent;
begin
 Result:= TPersistent(FPage);
end; выдает Access violation.


 
Семен Сорокин ©   (2004-09-12 14:18) [3]

Navi   (12.09.04 12:51) [2]
Не только в Object Inspectore показывать нельзя будет, но также не будет метода Assign (и иже с ним), для присвоения.
А если у меня ее владелец TObject?
Сделайте его хотя бы TPersistent, там всего (если точно помню) один метод переопределить надо.


 
Юрий Зотов ©   (2004-09-13 12:10) [4]

> Navi   (12.09.04 10:55)

Изначально коллекции вводились для того, чтобы выступать в качестве списков, которые можно редактировать в Design-time и которые умеют сохраняться в DFM. То есть, для того, чтобы быть published-свойствами некоего объекта-контейнера (которым и является Owner). Это и есть основной смысл и основное назначение коллекций.

Но раз коллекция является внутренним свойством Owner"а, то вполне естественно, что внутри него же она и сохраняется. А самым верхним классом по иерархии классов VCL, который умеет сохраняться в поток, является TPersistent. Вот поэтому у самого TPersistent метод GetOwner и определен, как тоже TPersistent, а не Tobject. Поскольку коллекции (а также TFont, TBrush, TPen и т.д.) наследуются от TPersistent, то тем самым они приобретают способность сохраняться внутри своего Owner"а.

Значит - если сохранение в DFM Вам нужно, то Owner"ом должен быть все же TPersistent, а не TObject (либо Вам придется писать свой собственный механизм сохранения). А если не нужно, то вряд ли Вам нужна и сама коллекция - вполне достаточно будет отнаследовать Ваш список от TList.



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

Форум: "Основная";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.036 c
3-1093961641
PiOnEr
2004-08-31 18:14
2004.09.26
Помогите с кавычкой!


9-1085808775
Poison man
2004-05-29 09:32
2004.09.26
Камера в GLScene


3-1093431748
lehich
2004-08-25 15:02
2004.09.26
ADOQuery подскажите plz


4-1092820204
slavan
2004-08-18 13:10
2004.09.26
Буфер обмена и Делфи


1-1094674994
redlord
2004-09-09 00:23
2004.09.26
метод free не вызывает destroy





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский