Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.01;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
1-203
PEC
2002-03-20 10:33
2002.04.01
Помогите plz


6-263
Oleg_EM
2002-01-09 09:29
2002.04.01
AsyncPro 2.58 ApdTAPIDevice как ему сказать шоп пульсом набирал ?


4-349
chernoruk
2002-01-30 22:29
2002.04.01
Handle баттона


3-20
SkyR
2002-03-06 07:38
2002.04.01
Что за ошибка в IB...


1-171
Beginer
2002-03-19 11:28
2002.04.01
Новое свойство формы