АЯиП отчеты по лабам (кроме 24) (Отчет17)

Посмотреть архив целиком

Лабораторная работа 17.

Delphi. Программирование с использованием классов. Графика. Обработка события от нажатия клавиши мыши.




Задача: Разработать иерархию классов Delphi. Использовать виртуальный метод, наследование конструкторов, свойства. Разместить определение классов в отдельном модуле. Класс, позволяющий рисовать окружность некоторого размера с центром в точке, определенной нажатием левой клавиши мыши. Класс, позволяющий рисовать квадрат того же размера с центром в точке, определенной нажатием правой клавиши мыши.

Параметры задаются с использованием интерфейсных элементов.

В отчете показать иерархии используемых классов Delphi и разработанных классов, граф состояния пользовательского интерфейса и объектную декомпозицию.


Объектная декомпозиция:




Активизировать

1 1

Главное окно

приложения


Квадрат


Круг


2 2


3 3 3 3





  1. Создать и нарисовать

  2. Изменить размер

  3. Уничтожить



Граф состояния интерфейса:





Главное

окно приложения













Диаграмма классов:



Текст программы:



unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, ComCtrls;

type

TForm1 = class(TForm)

Image1: TImage;

Button1: TButton;

Button2: TButton;

Edit1: TEdit;

Label1: TLabel;

procedure Button1Click(Sender: TObject);

procedure FormActivate(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure ImageMouseDown(Sender: TObject; Button:TMouseButton;Shift:TShiftState;X,Y:Integer);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

uses Unit2;

Var A:TVidFig; x,y,FRadius:Word;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

Close;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Image1.Canvas.Rectangle(-100,-100,1000,1000);

end;

procedure TForm1.FormActivate(Sender: TObject);

begin

Image1.Canvas.Brush.Color:=clWhite;

Image1.Canvas.Pen.Color:=clBlack;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

Image1.Canvas.Brush.Color:=clWhite;

Image1.Canvas.Pen.Color:=clBlack;

Edit1.Text:='20';

end;

procedure TForm1.ImageMouseDown(Sender: TObject; Button:TMouseButton;Shift:TShiftState;X,Y:Integer);

begin

A.Free;

if Button=mbLeft then

begin

A:=TKrug.Create(Image1,X,Y,strtoint(Edit1.Text),Image1.Canvas.Pen.Color);

end;

if Button=mbRight then

begin

A:=TKvadrat.Create(Image1,X,Y,strtoint(Edit1.Text),Image1.Canvas.Pen.Color);

end;

end;

initialization

finalization A.Free;

end.




unit Unit2;

interface

uses extctrls,Graphics;

Type TVidFig=class

private x,y,FRadius:Word;

FColor:TColor; Image:TImage;

procedure Razmer(rr:word);

procedure Clear;

public

Constructor Create(aImage:TImage;xx,yy,rr:Word;aColor:TColor);

Procedure Ris; virtual; abstract;

Property Radius:Word write Razmer;

end;

TKrug=class(TVidFig)

public Procedure Ris; override;

end;

TKvadrat=class(TVidFig)

public Procedure Ris; override;

end;

implementation

uses Unit1;

constructor TVidFig.Create;

begin

inherited Create;

Image:=aImage;

x:=xx;

y:=yy;

FRadius:=rr;

Ris;

end;

procedure TVidFig.Razmer;

begin Clear;

FRadius:=rr;

Ris;

end;

procedure TVidFig.Clear;

begin

Ris;

end;


procedure TKrug.Ris;

begin

Image.Canvas.Pen.Color:=FColor;

Image.Canvas.Ellipse(x-FRadius,y-FRadius,x+FRadius,y+FRadius);

end;

procedure TKvadrat.Ris;

begin

Image.Canvas.Pen.Color:=FColor;

Image.Canvas.Rectangle(x-FRadius, y-FRadius,x+FRadius,y+FRadius);

end;

end.







Случайные файлы

Файл
~1.DOC
49011.rtf
13322.rtf
84779.rtf
15350.doc




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.