|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
27.10.2012, 18:10 | #1 |
Пользователь
Регистрация: 17.12.2011
Сообщений: 14
|
ООП графический объект
помогите решить пожалуйста!
http://pix.academ.org/img/2012/10/27...daaf834a36.jpg http://pix.academ.org/img/2012/10/27...44435614ab.jpg хотя бы 1 рисунок, остальное наверное сам смогу дополнить разобравшись пример UNIT FiguresABC; INTERFACE USES GraphABC, CRT; TYPE { Класс TLocation будет родителем для иерархии графических объектов } TLocation = CLASS { Первыми в объекте перечисляются данные } X,Y : INTEGER; { координаты характерной точки } { За данными описываются применяемые к ним правила } PROCEDURE SetLocation (NewX,NewY : integer); { Задает новое положение характерной точки } PROCEDURE GetLocation (var XLoc, YLoc : integer); { возвращает координаты характерной точки } END; { Конец описания объекта TLocation } TPoint = CLASS(TLocation) { Класс TPoint служит для описания точки. Он является потомком указанного в скобках класса TLocation.} COLOR : Integer; { цвет графической фигуры } CONSTRUCTOR SetPoint(NewX,NewY,NewColor : integer); { задает точку } PROCEDURE SetColor (NewColor : integer); { устанавливает цвет фигуры } FUNCTION GetColor : integer; { возвращает цвет фигуры } PROCEDURE Show; { делает точку видимой } PROCEDURE Hide ; { делает точку невидимой } PROCEDURE Drag (DragBy : integer); END; { Конец описания объекта TPoint } TCircle = CLASS(TPoint) { Класс TCircle служит для описания окружности } Radius : word; { радиус окружности } Constructor Create (NewX,NewY : integer; NewRadius : word; NewColor : integer); { задает окружность } PROCEDURE Show; { делает окружность видимой } PROCEDURE Hide; { делает окружность невидимой } END; { Конец класса TCIRCLE } { ------------------------------------------------ } IMPLEMENTATION PROCEDURE TLocation.SetLocation (NewX,NewY : integer); BEGIN X:=NewX; Y:=NewY; END; { --------------------------------------------------- } PROCEDURE TLocation.GetLocation (var XLoc,YLoc : integer); BEGIN XLoc:=X; YLoc:=Y END; { --------------------------------------------------- } CONSTRUCTOR TPoint.SetPoint(NewX,NewY,NewColor : integer); BEGIN SetLocation(NewX,NewY); SetColor(NewColor) END; { --------------------------------------------------- } PROCEDURE TPoint.SetColor (NewColor : integer); BEGIN Color:=NewColor END; { --------------------------------------------------- } FUNCTION TPoint.GetColor : integer; BEGIN GetColor:=Color END; { --------------------------------------------------- } PROCEDURE TPoint.Show; { делает точку видимой } { реализация правила SHOW для объекта TPoint } BEGIN SetPixel(X,Y,Color); END; { --------------------------------------------------- } PROCEDURE TPoint.Hide; { реализация правила HIDE для объекта TPoint } BEGIN SetPixel(X,Y,BrushColor); END; { --------------------------------------------------- } FUNCTION GetDelta (var DeltaX,DeltaY : integer) : Boolean; { Функция считывает состояние клавиатуры. Если нажата клавиша управления курсором, функция возвращает значение TRUE, при этом в параметрах вызова передаются признаки приращения координат характерной точки. Если нажата клавиша "Ввод", функция возвращает FALSE. Нажатие на любую другую клавишу игнорируется. } var Quit : Boolean; { признак необходимости завершения работы } BEGIN { GetDelta } GetDelta:=true; repeat DeltaX:=0; DeltaY:=0; Quit:=true; case ReadKey of #0 : case ReadKey of { код из расширенного набора } #72 : DeltaY:=-1; { стрелка вверх } #80 : DeltaY:=+1; { стрелка вниз } #77 : DeltaX:=-1; { стрелка влево } #75 : DeltaX:=+1; { стрелка вправо } else Quit:=false { другие клавиши игнорировать } end { #0 }; #13: GetDelta:=false; { клавиша "Ввод" } else Quit:=false; { другие клавиши игнорировать } end { case } until Quit END ; { GetDelta } { --------------------------------------------------- } продолжение ниже |
27.10.2012, 18:10 | #2 |
Пользователь
Регистрация: 17.12.2011
Сообщений: 14
|
PROCEDURE TPoint.Drag(DragBy : integer);
{ Перемещает любую графическую фигуру по экрану } var DeltaX,DeltaY : integer; PosX,PosY : integer; BEGIN { TPoint.Drag } Show; { Показать исходное положение фигуры } while GetDelta(DeltaX,DeltaY) do { цикл перемещения } begin Hide; { погасить изображение фигуры } GetLocation(PosX,PosY); SetLocation(PosX+DeltaX*DragBy,PosY +DeltaY*DragBy); { изменить координаты } Show { показать новое положение фигуры } end END; { TPoint.Drag } { --------------------------------------------------- } CONSTRUCTOR TCircle.Create(NewX,NewY :integer; NewRadius : word; NewColor : integer); BEGIN SetPoint(NewX,NewY,NewColor); Radius:=NewRadius END; { --------------------------------------------------- } PROCEDURE TCircle.Show; var LocColor : word; BEGIN LocColor:=GraphABC.PenColor; GraphABC.SetPenColor(Color); GraphABC.Circle(X,Y,Radius); GraphABC.SetPenColor(LocColor) END; { --------------------------------------------------- } PROCEDURE TCircle.Hide; var LocColor : word; BEGIN LocColor:=GraphABC.PenColor; GraphABC.SetPenColor(RGB(255,255,25 5)); GraphABC.Circle(X,Y,Radius); GraphABC.SetPenColor(LocColor) END; { --------------------------------------------------- } END. { ---------------- END FiguresABC ---------------- } |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
TSR программа через некоторое время после запуска выводит на экран простейший графический объект, позволяя управлять им стрелками. | Custom_L.E. | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 1 | 17.05.2012 16:26 |
Ошибка при создании класса, описывающего графический объект (графика в Borland C) | МихаилБ | Помощь студентам | 7 | 30.06.2011 22:39 |
ООП - получить еще не созданный объект в дочернем классе | Cronos20 | PHP | 7 | 30.11.2010 01:09 |
Паскаль ООП. Примеры программ с использованием ООП | SeЯgey | Помощь студентам | 5 | 13.05.2009 21:55 |