Вниз
Скачать: 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.012 c
14-44339
trotski
2003-03-31 05:38
2003.04.14
C++ Builder


6-44291
zxss
2003-02-20 08:42
2003.04.14
Взаимодействие сервиса NT с System Tray


1-44196
nomshar
2003-04-01 15:23
2003.04.14
TCollection


3-44082
val_123
2003-03-26 20:08
2003.04.14
TQuery


7-44481
nw
2003-02-06 02:31
2003.04.14
Серийный номер дискеты, cd или ешшо какого-нибудь накопителя




   Наверх