Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.011 c
14-44428
kostya2000
2003-03-28 23:20
2003.04.14
Что будет если nVidia Riva TNT 2 скрестить с Voodoo 2?


8-44284
Lnstr
2003-01-10 14:21
2003.04.14
Надо несколько AVI через 1 TMediaPlayer вывести без пауз


14-44402
Soft
2003-03-26 18:29
2003.04.14
Взлом эксплорера


1-44234
maxi
2003-04-02 09:45
2003.04.14
Глючит MultiSelect в TListBox. Как исправить ????


11-44085
michel
2002-06-28 13:08
2003.04.14
XXXToStr и наоборот в KOL




   Наверх