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

Вниз

экземпляры различных классов в одной коллекции   Найти похожие ветки 

 
Maybe   (2002-03-20 15:58) [0]

Подскажите, как сделать чтобы внутри коллекции были объекты разных классов, например обычные визуальные делфийские компоненты, т.е. наследники TControl, можно ли как-то приводить TControl к ним, но где это надо делать - в реализации методов коллекции или уже при реализации самой программы, испрользуя все-таки элементы коллекции как объекты TControl?


 
yaJohn   (2002-03-20 16:02) [1]

А как вы собираетесь эти элементы в коллекцию вставлять?


 
Alx2   (2002-03-20 16:07) [2]

Посмотри вопрос в этом форуме про "массив объектов". Там что-то подобное обсуждается, но для массива.


 
Maybe   (2002-03-20 16:13) [3]

Я имела в виду чтобы это все были TControl"ы, и приводить их потом к другим классам TButton, TLabel TEdit, так можно ????


 
Digitman   (2002-03-20 16:20) [4]

Если под "коллекцией" подразумевается TCollection, то элементами такой коллекции могут быть ТОЛЬКО экз-ры класса (либо экз-ры наследников класса), указанного параметром в конструкторе коллекции.


 
Alx2   (2002-03-20 16:24) [5]

>...все были TControl"ы, и приводить их потом
>к другим классам TButton, TLabel TEdit, так можно ????

Да. Если они на самом деле являются TButton, TLabel TEdit


 
Внук   (2002-03-20 16:27) [6]

Не совсем ответ на вопрос, но все-таки...
Не надо здесь злоупотреблять коллекциями IMHO, так как они создаются обычно, чтобы хранить объекты с данными, определенными программистом (User Data). Если требуется хранить стандартные объекты, лучше использовать TList.
Насчет коллекции - при ее создании указывается тип хранящихся в ней объектов. Этот тип должен наследоваться (или быть равным TCollectionItem). Отсюда мораль - можно хранить разнотипные объекты, если только они все наследники TCollectionItem, а потом приводит каждый из них к нужному (настоящему) типу. Кажется, так ... если не извращаться :)


 
Юрий Зотов   (2002-03-20 16:33) [7]

Если речь идет о внешних компонентах, то можно ввести в элемент коллекции published-ссылку на компонент - см. http://delphi.mastak.com/cgi-bin/forum.pl?look=1&id=1016607958&n=0

Если же о внутренних, то в элементе надо задавать класс компонента, чтобы он мог этот компонент создать.


 
Maybe   (2002-03-20 21:37) [8]

Как же можно задать класс компонента, в коллекции же должны быть экземпляры одного класса, может быть нужно как-то через приведение классов через As?


 
Юрий Зотов   (2002-03-21 13:36) [9]

> Как же можно задать класс компонента...

Ввести в элемент коллекции свойство типа TClass и задавать через него.


 
Alx2   (2002-03-21 13:48) [10]

>Как же можно задать класс компонента
Имя класса уже сидит в методе ClassName.
Если имя то, что надо, то используем "приведение классов через As? "

Есть более быстрый метод через ClassType


 
Юрий Зотов   (2002-03-21 14:05) [11]

Чтобы использовать ClassName или ClassType, надо иметь уже готовую ссылку либо на экземпляр компонента, либо на его класс.

Вопрос - как получить любую из этих ссылок, если класс компонента еще неизвестен и создать компонент еще нельзя?

Ответ - никак. Поэтому элементу коллекциии и нужно задавать класс внутреннего компонента вручную (или в коде). Только после этого компонент может быть правильно создан.


 
Alx2   (2002-03-21 14:14) [12]

>Юрий Зотов © (21.03.02 14:05)
Сорри. Почему-то решил, что надо хранить уже готовые объекты.

С другой стороны, этот механизм в Delphi уже реализован одновременно с "визуальным программированием".



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

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

Наверх





Память: 0.47 MB
Время: 0.005 c
3-7
Malder
2002-03-05 19:23
2002.04.01
Как отменить транзакцию в триггере ?


1-244
Ирина
2002-03-19 10:25
2002.04.01
Открываем файл RichEdit-том


1-225
VJar
2002-03-20 16:10
2002.04.01
Текст скрытый звездочками


6-265
Malder
2002-01-19 13:39
2002.04.01
Перехват Socket соединения


14-303
Nikolay
2002-02-18 16:39
2002.04.01
Хочу получить за дело! :+)





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