Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.23;
Скачать: 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 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.016 c
1-74157
Prankster
2003-10-10 16:41
2003.10.23
Глобальные переменные и процедуры


4-74534
Maxim Pshevlotsky
2003-08-16 18:45
2003.10.23
Как вызвать окно


1-74231
MakNik
2003-10-09 15:07
2003.10.23
CRC-код файла


3-74058
tria
2003-10-02 10:27
2003.10.23
Как узнать, сколько строк вернул запрос?


1-74140
NOD
2003-10-11 00:06
2003.10.23
Динамическое создание массива