Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Вниз

Динамический список для объектов разного типа   Найти похожие ветки 

 
_Lucky_   (2006-01-21 10:07) [0]

Как на дельфи организовать динамический список для объектов разного типа, ну т.е. есть объекты CPoint, CRectangle, CTriangle, CCircle and etc, как сделать список в который можно положить любой из них, чтобы потом можно было пробежатся по списку и выполнить pObject.Paint например, каждый объект будет знать чего рисовать.
М.б. есть статьи на тему. Как делать список, стек или дерево понятно, но только для объектов определенного типа, а как сделать для любого?


 
cyborg ©   (2006-01-21 10:14) [1]

Делай эти объекты потомками абстрактного объекта, с виртуальными общими функциями (Paint и т.д.), тогда Object.Paint можно будет вызывать у всех объектов.


 
cyborg ©   (2006-01-21 10:14) [2]

Забыл уточнить, что в списке все объекты у тебя будут типа предка.


 
Кефир87 ©   (2006-01-21 14:24) [3]

TListItem = record
 container : TObject;
 next,prev:PListItem;
end;

...
if (p^.container is TMyClass) then (p^.container as TMyClass).Method;

Тупо. Первое что на ум пришло


 
XProger ©   (2006-01-21 18:01) [4]


PObject = ^CObject;
CObject = class
 Next : PObject;
 procedure Paint; virtual; abstract;
end;

CPoint = class(CObject)
 procedure Paint; override;
end;

...
var
 list : PObject;

implementation

procedure CPoint.Paint;
begin
 lalala
end;

procedure Add(obj: CObject);
begin
 obj.Next := list;
 list := obj;
end;

....
// Где-то в коде
Add(CPoint.Create);
Add(CRectangle.Create);
Add(CCircle.Create);

// и перерисовка всех объектов
p := list;
while p <> nil do
begin
 p^.Paint;
 p := p^.Next;
end;

Ошибки не исключены, но суть должна быть понятна... (это то, о чём говорил cyborg)


 
_Lucky_   (2006-01-22 10:20) [5]

Оке, всем спасибо, суть понятно, думаю дальше разберусь.


 
П7   (2006-01-22 14:46) [6]


> XProger ©   (21.01.06 18:01) [4]

Использую классы нет нужды делать указатель на класс. (:


CObject = class
 Next : СObject;
 procedure Paint; virtual; abstract;
end;

CPoint = class(CObject)
 procedure Paint; override;
end;

var
 list : СObject;

implementation

procedure CPoint.Paint;
begin
lalala
end;

procedure Add(obj: CObject);
begin
 obj.Next := list;
 list := obj;
end;

// Где-то в коде
Add(CPoint.Create);
Add(CRectangle.Create);
Add(CCircle.Create);

// и перерисовка всех объектов
p := list;
while p <> nil do
begin
 p.Paint();
 p := p.Next;
end;


Так оно красивей смотрится. (:


 
Кефир87 ©   (2006-01-22 15:09) [7]

А ведь точно? Смысл делать указатель на указатель? 8))


 
XProger ©   (2006-01-22 18:31) [8]

Кефир87, это чтобы перевести на Object не проблемантично было ;)


 
П7   (2006-01-22 21:02) [9]


> XProger ©   (22.01.06 18:31) [8]

Чего? (:



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.039 c
9-1137705526
Аццкий_рыцарь:)
2006-01-20 00:18
2006.10.29
Освещение в DelphiX...


2-1160620435
Ursula
2006-10-12 06:33
2006.10.29
События формы и кнопки


2-1160996448
Zancik
2006-10-16 15:00
2006.10.29
Слайд-шоу


15-1160129427
Gata S
2006-10-06 14:10
2006.10.29
Как узнать к каким файлам обращается программа?


2-1161006472
Ksan
2006-10-16 17:47
2006.10.29
Синтаксис





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский