Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.30;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.025 c
4-1102793329
Zahar
2004-12-11 22:28
2005.01.30
Как узнать версию программы?


3-1103841286
AliceSpain
2004-12-24 01:34
2005.01.30
Картинки где лучше хранить для сетевой базы?


4-1102475495
Slym
2004-12-08 06:11
2005.01.30
Каким образом можно подменить System.pas


1-1105961360
Кабан
2005-01-17 14:29
2005.01.30
Где взять иконки с палитры компонентов Delphi?


1-1106050793
AlexLumpov
2005-01-18 15:19
2005.01.30
Уменьшить rtl70.bpl