Главная страница
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.041 c
11-1089101164
Nox
2004-07-06 12:06
2005.01.30
KOLEdb: работа с несколькими таблицами


3-1103553098
Lamka
2004-12-20 17:31
2005.01.30
Фильтрация в DBGrid


3-1103906893
Russko
2004-12-24 19:48
2005.01.30
Paradox в InterBase


1-1105640042
Серьезный Сэм
2005-01-13 21:14
2005.01.30
Исходный HTML-код в TWebBrowser


3-1104065212
swinole
2004-12-26 15:46
2005.01.30
Инсталяция BDE