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

Вниз

TCollection   Найти похожие ветки 

 
nomshar ©   (2003-04-01 15:23) [0]

Господа, я разрабатываю компонент, назовем его TmContainer. Данный контейнер должен включать в себя список компонентов разных типов (вроде TmItem1, TmItem2 и т.д.). Каждый такой item обаладет своими собственными свойствами. Если бы они все были бы одного типа, то решалось бы все просто: создаем потомок класса TCollection, потом потомок класса TCollectionItem и наконец компонент для контейнера и компонент для item-ов. Так вот в связи с этим вопрос, как бы осуществить реализацию вышеизложенной задачи. Можно конечно в одном конейнере сделать несколько св-тв Items (например, AItems, BItems и т.д.), но это неудобно и перегружает код. Хотелось бы что-то вроде одного свойства Items и св-ва Type, где бы как раз и указывалось какой именно Item создавать. Однако и в этом случае получается довольно таки громоздко. Может кто подскажет более изящный способ.


 
nikb   (2003-04-01 15:50) [1]

A TmItem - eto class?
Esli class - togda zadacha ochen pohoja na tListObject.

Esli hochetca polzovat" tCollection, togda mojno sdelat naslednik tCollectionItem, v kotorom i polojit property TmItem.
Togda nado sdelat deklaraciu
tClassCollectionItemMy = Class of CollectionItemMy
tCollection.Create(tClassCollectionItemMy)


 
Roma ©   (2003-04-01 16:04) [2]

> nomshar © (01.04.03 15:23)

Сделай Items: TStrings и в свойстве Objects храни все, что хочешь...


 
Skier ©   (2003-04-01 16:29) [3]

Можно таким способом :

TYourRec = packed record
yrType : TSomeType; //например Enumeration type...
yrData : Pointer;
end; //TYourRec
PYourRec = ^TYourRec;

TYourList = class(TList)
private
protected
function Get(Index: Integer): PYourRec;
procedure Put(Index: Integer; Item: PYourRec);
public
function Add(Item: PYourRec): Integer;
property Items[Index: Integer]: PYourRec read Get write Put; default;
end; //TYourList

И...исходя из yrType, "трактуешь" yrData...


 
Юрий Зотов ©   (2003-04-01 16:40) [4]

TCollectionItem, который включает в себя строковое published-свойство ComponentClass и public-ссылку TComponent (read-only). Этот компонент и создается данным Item"ом в SetComponentClass (предусмотреть уведомление об удалении и очистку внутренней ссылки). Owner"ом у компонента ставится форма. Его редактирование в design-time - либо стандартным образом, либо (для RegisterNoIcon) через свой редактор (аналог редактора полей с Designer.SelectComponent при выборе пункта).



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

Текущий архив: 2003.04.14;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
1-44210
xfrost
2003-04-01 17:34
2003.04.14
Работа с ClipBoard


14-44404
Дмитрий К.К.
2003-03-28 13:16
2003.04.14
Именинники 28 марта


14-44445
VEG
2003-03-29 23:32
2003.04.14
Мысли вслух...


1-44207
George M
2003-04-01 17:18
2003.04.14
Поведение TEdit в run time как в design time


1-44233
travnikOFF
2003-04-02 05:20
2003.04.14
Плейлист