Программирование на С++ - eDrive

Программирование на С++ - eDrive Программирование на С++ - eDrive

edrive.narod.ru
from edrive.narod.ru More from this publisher
24.11.2014 Views

30 В файле кода модуля определить статическую функцию Clear класса Shape, управляющую удалением изображения из элемента Image: void Shape::Clear () { { Form1–>Image1–>Canvas–>Brush–>Color = clWhite; TRect myRect = Rect (0, 0, Form1–>Image1–>Width, Form1–>Image1–>Height); Form1–>Image1–>Canvas–>FillRect (myRect); } 2. Производный класс-образец. В том же файле заголовка модуля объявить производный класс Circle: class Circle : Shape { int cx, cy, rad; public: Circle (int x, int y, int r, TColor p, TColor b) : cx (x), cy (y), rad (r), Shape (p, b) {} void Draw (); void Move (int x, int y); void Fill (); }; В конструкторе класса переменные x, y и r задают координаты центра и радиус окружности, а p и b – цвета линии и заливки, передаваемые конструктору базового класса. Функция Draw рисует окружность, Move перемещает ее, а Fill закрашивает. В файле кода модуля надо определить эти методы класса Circle: void Circle::Draw () { Form1–>Image1–>Canvas–>Pen–>Color = penColor; TRect myRect = Rect (cx – rad/2, cy – rad/2, cx + rad/2, cy + rad/2); Form1–>Image1–>Canvas–>Ellipse (myRect); } void Circle::Move (int x, int y) { cx += x; cy += y; } void Circle::Fill () { Form1–>Image1–>Canvas–>Brush–>Color = brushColor; Form1–>Image1–>Canvas–>FloodFill (cx, cy, penColor, fsBorder); } 3. Применение класса Circle. В классе формы объявить указатель на объект базового класса: Shape *myShape; в конструкторе создать соответствующий объект: myShape = (Shape*) new Circle (100, 150, 10, clGray, clYellow);

31 а в деструкторе удалить его: delete myShape; В форму проекта поместить элемент рисования Image, необходимые поля и три кнопки. Обработчик первой из них очищает канву и рисует: Shape::Clear (); myShape–>Draw (); обработчик второй смещает рисунок на расстояния, указанные в полях: Shape::Clear (); myShape–>Move (StrToInt (Edit1–>Text), StrToInt (Edit2–>Text)); myShape–>Draw (); а обработчик третьей закрашивает фигуру: myShape–>Fill (); 4. Разработка и применение заданного класса. В дополнение к классу Circle разработать производный от Shape класс предусмотренной вариантом фигуры и выполнить все операции – рисование, закрашивание и перемещение – одновременно для двух объектов: окружности и заданной фигуры. Для рисования рекомендуются такие методы класса Canvas, как Polyline, Polygon, Rectangle, RoundRect, Ellipse. Задачи 1. Используя компонент ColorBox, предоставить пользователю возможность задания цвета закрашивания. 2. Организовать рисование фигур из начальной позиции, а не из текущих координат. 3. Реализовать перемещение закрашенных фигур. 4. Ограничить область движения фигур границами канвы. 5. Реализовать раздельное движение фигур вместо совместного движения. 6. Исключить ввод пользователем некорректных данных в поля. Работа 13. Потоки Задание Для знакомства с многопоточным приложением создать проект, в котором бесконечное число раз рисуется фигура, заданная в табл. 1, с переменными размерами и координатами и с информацией о количестве нарисованных фи-

31<br />

а в деструкторе удалить его:<br />

delete myShape;<br />

В форму проекта поместить элемент рисования Image, необходимые поля<br />

и три кнопки. Обработчик первой из них очищает канву и рисует:<br />

Shape::Clear ();<br />

myShape–>Draw ();<br />

обработчик второй смещает рисунок <strong>на</strong> расстояния, указанные в полях:<br />

Shape::Clear ();<br />

myShape–>Move (StrToInt (Edit1–>Text), StrToInt (Edit2–>Text));<br />

myShape–>Draw ();<br />

а обработчик третьей закрашивает фигуру:<br />

myShape–>Fill ();<br />

4. Разработка и применение заданного класса. В дополнение к классу Circle<br />

разработать производный от Shape класс предусмотренной вариантом фигуры<br />

и выполнить все операции – рисование, закрашивание и перемещение<br />

– одновременно для двух объектов: окружности и заданной фигуры. Для<br />

рисования рекомендуются такие методы класса Canvas, как Polyline, Polygon,<br />

Rectangle, RoundRect, Ellipse.<br />

Задачи<br />

1. Используя компонент ColorBox, предоставить пользователю возможность<br />

задания цвета закрашивания.<br />

2. Организовать рисование фигур из <strong>на</strong>чальной позиции, а не из текущих коорди<strong>на</strong>т.<br />

3. Реализовать перемещение закрашенных фигур.<br />

4. Ограничить область движения фигур границами канвы.<br />

5. Реализовать раздельное движение фигур вместо совместного движения.<br />

6. Исключить ввод пользователем некорректных данных в поля.<br />

Работа 13. Потоки<br />

Задание<br />

Для з<strong>на</strong>комства с многопоточным приложением создать проект, в котором<br />

бесконечное число раз рисуется фигура, задан<strong>на</strong>я в табл. 1, с переменными<br />

размерами и коорди<strong>на</strong>тами и с информацией о количестве <strong>на</strong>рисованных фи-

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!