Форум: "Основная";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];
ВнизКак узнать тип элемента в списке 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.009 c