Главная страница
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.053 c
1-1106062824
Dracula
2005-01-18 18:40
2005.01.30
перехват ошибок


4-1102558572
Fedia
2004-12-09 05:16
2005.01.30
Отправка сообщения программе от ловушки сообщений


14-1105615269
AndB
2005-01-13 14:21
2005.01.30
E-BUKI


14-1105311820
SergP
2005-01-10 02:03
2005.01.30
Предсказания Нострадамуса...


3-1104141098
PSH
2004-12-27 12:51
2005.01.30
Разрыв страницы в Report Builder Pro 7.03