Вопрос № 58247: Здравствуйте, уважаемые эксперты! от бессоницы ночью у меня появилась мысль вспомнить паскаль (BP 7.0). стал изучать объектно-ориентированное программирование (именно в паскале, а не в делфи - хочу так!).
суть следующая - создаются какие-либо объ...
Вопрос № 58.247
Здравствуйте, уважаемые эксперты! от бессоницы ночью у меня появилась мысль вспомнить паскаль (BP 7.0). стал изучать объектно-ориентированное программирование (именно в паскале, а не в делфи - хочу так!).
суть следующая - создаются какие-либо объекты, при этом они должны отображатся на экране в графическом режиме. при этом возникает ситуация - при удалении объект с экрана также нужно удалить. вариант, зарисовать его на том же месте только черным цветом, отпадает, потому как пи этом остальные объекты которые находятся на одном месте с ним "портятся". как вариант - при сздании объекта добавлять его в некий список. потом при вызове draw запускать у каждого объекта через этот список его метод отображения.
вопрос - как создать этот список, чтобы через него можно было обратиться к нужному объекту и его методу?
Отправлен: 09.10.2006, 12:34
Вопрос задал: Kito (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: sir henry
Здравствуйте, Kito!
Честно говоря, непонятны Ваши затруднения. Чтобы нарисовать ту-же графическую фигуру на экране фоновым цветом, надо провести те же операции по ее нарисовке, только сменить цвет на фоновый:
FgColor:=GetBkColor; {Так получаем фоновый цвет}
SetColor(FgColor); {Устанавливаем его в качестве цвета рисования}
Bar(...); {Теперь рисуем фигуру}
При этом ничто другое нарисованное на экране не изменяется совершенно, только не забудьте потом цвет рисования вернуть как было. :)
В качестве списка объектов можно предложить (для TP7) TCollection, который позволяет хранить список ссылок на что угодно. Если же у Вас будет строго определенное количество объектов, то в качестве списка удобнее будет использовать массив ссылок:
MyObject: array[0..9] of Pointer;
При этом каждая ячейка массива - это ссылка на объект, а к любому свойству объекта можно обратится так:
Type
TMyObject = object(TObject)
Field1: Integer;
Field2: String;
Constructor Init;
Procedure Proc1;
Function Func1;
End;
PMyObject = ^TMyObject;
Var
MyObjects: array[0..9] of PMyObject;
Begin
...
{Создаем объект}
New(MyObjects[0], Init);
{Теперь обращаемся к полю объекта}
MyObjects[0]^.Field1:=10;
MyObjects[0]^.Field2:='Какое-нибудь гадкое сообщение';
...
End.
************************
Информация к размышлению. Хоть Ваши объекты в списке, хоть не в списке, все равно, при вызове метода Draw для рисования фигуры на экране, Вы будете использовать те же самые графические процедуры и функции, так что Ваша запарка вовсе не в способе хранения объектов.
Ответ отправил: sir henry (статус: Академик) Россия, Красноярск ---- Ответ отправлен: 09.10.2006, 13:16