Образец отчета - Математический факультет БГПУ

advertisement
УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ
«БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ ПЕДАГОГИЧЕСКИЙ
УНИВЕРСИТЕТ ИМЕНИ МАКСИМА ТАНКА»
кафедра прикладной математики и информатики
ОТЧЕТ
по вычислительной практике
Выполнил:
студент 407 группы
математического факультета
Петров И.А.
Руководитель:
преподаватель кафедры
прикладной математики и
информатики
Иванов А.И.
Минск, 2010
ЗАДАНИЕ
Разработать приложение «Подвижные точки», в окне которого
отображается произвольный четырехугольник на клетчатом поле. Вершины
четырехугольника можно перемещать с помощью манипулятора «мышь».
Курсор мыши, при наведении на вершину, изменяет внешний вид, позволяя
перетаскивать точку в любое другое место поля. При перемещении вершины
связанные с ней отрезки, следуя за ней, также изменяют свою длину и
направление. Окно приложения должно иметь строку заголовка с названием
приложения, кнопки управления окном и строку состояния, в которой
отображаются текущие координаты курсора мыши.
РЕЗУЛЬТАТ
Окно работающего приложения имеет следующий вид (рис. 1).
Рис. 1. Окно приложения «Подвижные точки»
Приложение представлено файлом DragPoint.exe.
Рабочие материалы находятся в папке ВП_Петров_405 (вычислительная
практика_фамилия_номер группы).
ЛИСТИНГ
unit MainUnit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms,Dialogs, StdCtrls, ExtCtrls, ComCtrls;
type
TMainForm = class(TForm)
Image: TImage;
StatusBar: TStatusBar;
procedure ImageMouseMove(Sender: TObject;
Shift: TShiftState; X,Y: Integer);
procedure FormCreate(Sender: TObject);
procedure ImageMouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ImageMouseUp(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
procedure Draw(Canvas : TCanvas); // рисовать ломаную
procedure Grids(Canvas : TCanvas); // рисовать сетку
public
end;
{-------------------------------------------------------------}
type
TIntPoint = record
x,y : integer;
end;
TMouseMode = (mNormal, mMove); // режимы использования мыши
{-------------------------------------------------------------}
var
A,B,C,D: TIntPoint;
numb : byte;
// номер выбранной точки
MouseMode: TMouseMode; // режим использования мыши
{-------------------------------------------------------------}
implementation
{-------------------------------------------------------------}
procedure TMainForm.Grids(Canvas : TCanvas);
{ Рисовать сетку }
const
h = 25; // шаг сетки
var
x,y : integer;
begin
with Canvas do begin
Brush.Color:=clWhite;
FillRect(ClipRect); // очистить холст
Pen.Color:= RGB(32,196,168);
(* Рисуем линии *)
x:= 0;
while x <= ClientWidth do begin
MoveTo(x,0); LineTo(x,ClientHeight);
x:= x + h;
end;
y:= 0;
while y <= ClientHeight do begin
MoveTo(0,y); LineTo(ClientWidth,y);
y:= y + h;
end;
end;
end;
{-------------------------------------------------------------}
procedure TMainForm.Draw(Canvas : TCanvas);
{ Рисовать ломаную }
begin
with Canvas do begin
Brush.Color:= clRed;
Ellipse(A.x-3,A.y-3,A.x+3,A.y+3);
Ellipse(B.x-3,B.y-3,B.x+3,B.y+3);
Ellipse(C.x-3,C.y-3,C.x+3,C.y+3);
Ellipse(D.x-3,D.y-3,D.x+3,D.y+3);
Pen.Color:= clBlue;
MoveTo(A.x,A.y);
LineTo(B.x,B.y); LineTo(C.x,C.y);
LineTo(D.x,D.y); LineTo(A.x,A.y);
end;
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
MouseMode:= mNormal; // режим использования мыши
A.x:= 25; B.x:= 125; C.x:= 375; D.x:= 400;
A.y:= 250; B.y:= 75; C.y:= 25; D.y:= 240;
with Image.Picture.Bitmap do begin
Width:=Image.Width; Height:=Image.Height;
Grids(Canvas); // сетка
Canvas.Pen.Mode:= pmNotXor; // нужен этот режим пера
Draw(Canvas); // первоначальная ломаная
end;
end;
{-------------------------------------------------------------}
procedure TMainForm.ImageMouseMove(Sender: TObject;
Shift: TShiftState; X,Y : Integer);
{-------------------------------------------------------------}
function YesPoint(p: TIntPoint) : Boolean;
begin
YesPoint:= (X <= p.x+3) and (X >= p.x-3) and
(Y <= p.y+3) and (Y >= p.y-3);
end;
{------------------------------------------------------------}
begin
StatusBar.Panels[0].Text:= Format(
'Координаты: X = %d, Y = %d',[X,Y]);
if MouseMode = mNormal then begin { обычный режим }
if YesPoint(A) or YesPoint(B) or
YesPoint(C) or YesPoint(D)
then
Screen.Cursor:= crHandPoint // курсор-рука
else begin
Screen.Cursor:= crArrow;
// курсор-стрелка
end
end
else begin { режим перетаскивания }
Draw(Image.Picture.Bitmap.Canvas); // убрать старый рисунок
case numb of
1: begin A.x:= X; A.y:= Y end;
2: begin B.x:= X; B.y:= Y end;
3: begin C.x:= X; C.y:= Y end;
4: begin D.x:= X; D.y:= Y end;
end;
Draw(Image.Picture.Bitmap.Canvas); // новый рисунок ломаной
end
end;
{-------------------------------------------------------------}
procedure TMainForm.ImageMouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
{-------------------------------------------------------------}
function YesPoint(p: TIntPoint) : Boolean;
begin
YesPoint:= (X <= p.x+3) and (X >= p.x-3) and
(Y <= p.y+3) and (Y >= p.y-3);
end;
{-------------------------------------------------------------}
begin
MouseMode:= mMove; // режим использования мыши
{ какая из четырех точек выбрана }
if YesPoint(A) then numb:= 1;
if YesPoint(B) then numb:= 2;
if YesPoint(C) then numb:= 3;
if YesPoint(D) then numb:= 4;
end;
{-------------------------------------------------------------}
procedure TMainForm.ImageMouseUp(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
numb:= 0;
// никакая точка не выбрана
MouseMode:= mNormal; // режим использования мыши
end;
{-------------------------------------------------------------}
end.
ПОЯСНЕНИЯ
На форме размещены два объекта из палитры компонентов: Image для
отображения
рисунка
и
StatusBar для строки состояния.
Объекты наделены свойствами
(рис. 2).
Для создания графических
изображений в области некоторых
компонент, например в нашем
случае TImage,
используется
свойство Canvas.
Класс
TCanvas
имеет
свойства: Pen: TPen устанавливает
цвет, толщину, стиль линий и
границ геометрических фигур;
Brush: TBrush – цвет и шаблон
кисти; Font: TFont – параметры
текста; PenPos: TPoint – выдает
текущую позицию пера; Pixels :
TColor – двухмерный массив,
содержащий цвета пикселей.
С
помощью
Canvas
создается изображение клетчатого
поля для объекта Image, а также
изображения вершин и линий
четырехугольника.
Рис. 2. Свойства объектов Image
При инициализации формы
и StatusBar
выполняются следующие действия:
и т.д.…
Download