Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.026 c
1-1106117467
WinLamka
2005-01-19 09:51
2005.01.30
dll и обьекты


6-1100015933
MIchael
2004-11-09 18:58
2005.01.30
Получение списка пользователей


1-1106102811
SerKom
2005-01-19 05:46
2005.01.30
Как показать Hint c текстом из панели StausBar a?


1-1106150726
mr_jack
2005-01-19 19:05
2005.01.30
типы переменных


6-1099644586
Progh
2004-11-05 11:49
2005.01.30
Отправка сообщения на ICQ




   Наверх