Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.054 c
14-1105528663
Subdigger
2005-01-12 14:17
2005.01.30
xp, registry...


4-1102719140
pipll
2004-12-11 01:52
2005.01.30
Индикатор загрузки процессора


1-1105885062
Piter
2005-01-16 17:17
2005.01.30
Что означают параметры в директивах


3-1104242406
Georji
2004-12-28 17:00
2005.01.30
Добавление поля


3-1103996779
Russko
2004-12-25 20:46
2005.01.30
InterBase не хочет сохранять изменения (





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский