Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
ВнизRTTI? Найти похожие ветки
← →
AndySD (2005-01-18 13:37) [0]Добрый день.
Делаю что-то типа векторного редактора.
Есть базовый класс
TvgxBasePrim=class
....
procedure Draw;virtual;
....
end;
Есть наследники TvgxLine, TvgxRectangle и т.д. у которых метод Draw переопределяется.
Есть список Objects:TList этих примитивов. Хотелось бы в цикле пробегатся по объектам и одной строкой вызывать метод Draw каждого объекта. Может кто подскажжет как.
Заранее благодарен.
← →
Amoeba © (2005-01-18 13:45) [1]в цикле
TvgxBasePrim(Objects[I]).Draw
Но лучше использовать предназначенный для хранения объектов TObjectList, а не TList. Тогда:
в цикле
(Objects[I] as TvgxBasePrim).Draw
← →
Юрий Зотов © (2005-01-18 13:46) [2]for i := 0 to Objects.Count - 1 do
TvgxBasePrim(Objects[i]).Draw;
← →
AndySD (2005-01-18 13:49) [3]2 Amoeba
Но этом случае вызовется метод TvgxBasePrim
← →
Юрий Зотов © (2005-01-18 13:55) [4]> AndySD (18.01.05 13:49) [3]
Нет. Он же виртуальный.
← →
Amoeba © (2005-01-18 13:57) [5]
> AndySD (18.01.05 13:49) [3]
Надо учебник читать.
← →
AndySD (2005-01-18 14:05) [6]Но всё равно вызывается метод TvgxBasePrim, приходится писать так:
if TObject(Objects[i]).ClassType=TvgxLine then
TvgxLine(Objects[i]).Draw(Paint.Canvas,Vx,Vy,Km) else
if TObject(Objects[i]).ClassType=TvgxRectangle then
TvgxRectangle(Objects[i]).Draw(Paint.Canvas,Vx,Vy,Km) else
if TObject(Objects[i]).ClassType=TvgxPolyLine then
TvgxPolyLine(Objects[i]).Draw(Paint.Canvas,Vx,Vy,Km) else
... и т.д.
← →
AndySD (2005-01-18 14:08) [7]Всё всё всё. Прошу не пинать. Мой бок.Забыл override дописать.
Большое всем спасибо.
← →
Digitman © (2005-01-18 14:09) [8]
> AndySD
покажи, как ты заполняешь список ..
← →
Digitman © (2005-01-18 14:11) [9]
> AndySD (18.01.05 14:08) [7]
> Забыл override дописать.
ни virtual ни override никакого отношения к RTTI не имеют.
и это - тоже "бок".
← →
Юрий Зотов © (2005-01-18 16:15) [10]> AndySD (18.01.05 14:08) [7]
И еще один бок - не обратил внимания на предупреждение компилятора. А если бы обратил, то и проблемы бы никакой не возникло.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.034 c