Вниз
Скачать: CL | DM;

Как узнать тип элемента в списке TList   Найти похожие ветки 

← →
TGrey ©   (2003-10-12 14:16) [0]

Имеется список указателей типа TList, в него добавляются объекты различных типов. Как при извлечении объекта определить его тип? Это нужно для того, чтобы преобразовать извлекаемый объект к нужному типу.


← →
Palladin ©   (2003-10-12 14:29) [1]

операторы is и as


← →
TGrey ©   (2003-10-12 17:00) [2]


List:TList;

как сделать следующее условие:

если list.Items[0] равно TMyObject то ...


← →
Palladin ©   (2003-10-12 17:10) [3]

ни как не сделать...

если ты хранишь все в перемешку тоесть как и pointer так и объекты классов, то решение возможно лишь при определенном добавлении в TList

что то вроде

Type
PUnknownData=^TUnknownData;
TUnknownData=record
IsThisObject:boolean;
Data:pointer;
end;
формировать эту структуру и заносить в TList

и естественно, если ты еще хранишь указатели и на разные структуры то тут тебе ничем не помочь... только в явном указании какая именно структура хранится в TList, то есть еще расширить

Type
PUnknownData=^TUnknownData;
TUnknownData=record
DataKind:integer;
Data:pointer;
end;

обозначить все свои хранимые в TList стурктуры константами и в зависимости от значения DataKind соответственно обрабатывать ссылку Data


← →
Гаврила   (2003-10-12 18:24) [4]

if TObject(List[0]) is TMyObject then


← →
Гаврила   (2003-10-12 18:26) [5]

Разумеется, если там только эккземпляры классов ,если там могут быть и указатели не на экземпляр, то Palladin © (12.10.03 17:10) [3]


← →
TGrey ©   (2003-10-12 19:00) [6]

у Гаврила всё работает, я вот ещё что придумал:

procedure TForm1.Button1Click(Sender: TObject);
var
ClassRef: TClass;
begin
if list.Count > 0 then
begin
ClassRef:=TObject(list.Items[0]).ClassType;
if ClassRef.ClassName = "TMyObject" then
begin
ShowMessage(ClassRef.ClassName);
end
else ShowMessage("TMyObject2");
end;
end;



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

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



Память: 0.46 MB
Время: 0.016 c
3-73992
BAYES
2003-09-30 15:49
2003.10.23
Неделя инсталяции BDE.


6-74344
Melcor
2003-08-20 18:39
2003.10.23
СКАНЕР СЕТЕВЫХ РЕСУРСОВ


7-74506
Andr
2003-08-11 19:04
2003.10.23
Открытие другого приложения из Delphi


1-74167
denis24
2003-10-13 17:26
2003.10.23
ComponentCount


7-74509
DeadMeat
2003-08-01 17:02
2003.10.23
Клава и WH_KEYBOARD_LL




   Наверх