Форум: "Начинающим";
Текущий архив: 2007.07.08;
Скачать: [xml.tar.bz2];
ВнизПроверить тип указателя Найти похожие ветки
← →
Strate © (2007-06-15 13:03) [0]Здравствуйте. Подскажите с таким вопросом: при заполнении ListView в свойство Data каждого ListItem"a я прописываю ссылки на экземпляры классов. Причём классы разные. Как мне потом проверить какой тип класса прописан в этом свойстве?
If (Item.Data IS TMyClass)
не проходит даже компиляциюIf (TMyClass(Item.Data) IS TMyClass)
работает неправильно.
Как сделать?
← →
Johnmen © (2007-06-15 13:06) [1]Никак. Там лежит нетипизированный указатель.
← →
sniknik © (2007-06-15 13:14) [2]попробуй приведи к базовому классу TObject или TComponent, типа TObject (Item.Data) is TMyClass
(в событиях где Sender: TObject то такая проверка срабатывает... а не получится, проверяй(/сравнивай) с ClassName обьекта (если уверен что все там обьекты) после приведения.
← →
Плохиш © (2007-06-15 13:15) [3]
procedure TForm1.FormShow(Sender: TObject);
var
test: Pointer;
begin
ShowMessage(self.ClassName);
test := self;
ShowMessage(TObject(test).ClassName + " - " + BoolToStr(TObject(test) is TForm1, true));
end;
← →
Плохиш © (2007-06-15 13:16) [4]
> sniknik © (15.06.07 13:14) [2]
:-P
← →
Strate © (2007-06-15 13:16) [5]Johnmen © (15.06.07 13:06) [1]
Блин, жалко :(
Тогда следом такой вопрос: можно ли корректно написать наследника от TListItem, добавить в него пару полей и заполнить им TListView?
Я попробовал вот так:TExListItem = class(TListItem)
public
Field1 : Integer;
Field2 : TMyClass1;
Field3 : TMyClass2;
end;
Заполняю примерно так:var
NewListItem : TExListItem;
begin
NewListItem := TExListItem.Create(ListView.Items);
end;
но при последующем обращении к NewListItem.SubItems выскакивает AccesViolation. В чём может быть проблема?
← →
Сергей М. © (2007-06-15 13:16) [6]try
ShowMessage("Это объект класса " + TObject(Item.Data).ClassName);
except
ShowMessage("Это черт те что и сбоку бантик, но только не объект-наследник класса TObject";
end;
← →
Strate © (2007-06-15 13:23) [7]sniknik © (15.06.07 13:14) [2]
Плохиш © (15.06.07 13:15) [3]
Спасибо, всё работает :)
И вопрос про наследника снимается :)
← →
Anatoly Podgoretsky © (2007-06-15 13:32) [8]> Strate (15.06.2007 13:23:07) [7]
Только в случае когда это действительно наследник от TObject
← →
jack128 © (2007-06-15 16:09) [9]Strate © (15.06.07 13:03)
If (TMyClass(Item.Data) IS TMyClass) работает неправильно.
этот код эквивалентен if Assigned(Item.Data)
Ты же явно указываешь компилятору, что в Item.Data лежит экземпляр TMyClass, вот он и не генерирует код по проверке типа...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.07.08;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.038 c