Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭВМ и ПУ / Лабораторные_работы_по_ЭВМ_и_ПУ._Часть_1.doc
Скачиваний:
27
Добавлен:
04.03.2016
Размер:
585.73 Кб
Скачать

Пример приложения

Ниже приведен текст модуля приложения, отображающего координаты курсора мыши в заголовке формы при его перемещении, рисующего на форме круг при нажатии левой кнопки мыши, перемещающего последний нарисованный круг при нажатии на клавиатуре клавиш управления курсором при нажатой клавише Shift, очищающего форму при нажатии клавиши «Escape».

unit MouseKey_;

interface

uses

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

Dialogs;

type

TfrmMain = class(TForm)

procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

procedure FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure FormCreate(Sender: TObject);

procedure FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

private

{ Private declarations }

public

{ Public declarations }

end;

var

frmMain: TfrmMain;

implementation

var x_glbl, y_glbl:integer;//глобальные переменные для хранения координат

radius:integer;//радиус

{$R *.dfm}

//Обработчик перемещения курсора мыши над формой

procedure TfrmMain.FormMouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

//Отображение коородинат курсора в заголовке формы

frmMain.Caption:='x='+inttostr(x)+', y='+inttostr(y);

end;

//Обработчик нажатия клавиши клавиатуры

procedure TfrmMain.FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

if ssShift in Shift then begin //Если при нажатии удерживалась клавиша Shift

frmMain.Canvas.Pen.Color:=frmMain.Color; //Цвет карандаша = цвету формы

frmMain.Canvas.Brush.Style:=bsSolid; //Сплошная заливка

frmMain.Canvas.Brush.Color:=frmMain.Color;//Цвет заливки = цвету формы

//Закрашивается нарисованный круг

frmMain.Canvas.Ellipse(x_glbl-radius,y_glbl-radius,x_glbl+radius,y_glbl+radius);

case Key of

vk_Down: begin //Если была нажата клавиша "вниз" увеличивается у

if y_glbl<frmMain.Height-radius-25 then y_glbl:=y_glbl+5;

end;

vk_Up: begin //Если была нажата клавиша "вверх" уменьшается у

if y_glbl>radius+4 then y_glbl:=y_glbl-5;

end;

vk_Left: begin //Если была нажата клавиша "влево" уменьшается х

if x_glbl>radius+4 then x_glbl:=x_glbl-5;

end;

vk_Right: begin //Если была нажата клавиша "вправо" увеличивается х

if x_glbl<frmMain.Width—25 then x_glbl:=x_glbl+5;

end;

end;

frmMain.Canvas.Pen.Color:=clRed; //Цвет карандаша - красный

frmMain.Canvas.Brush.Style:=bsSolid; //Сплошная заливка

frmMain.Canvas.Brush.Color:=clBlue; //Цвет заливки - синий

//Отрисовка круга в новом месте

frmMain.Canvas.Ellipse(x_glbl—radius,y_glbl—radius,x_glbl+radius,y_glbl+radius);

end;

if Key=vk_Escape then begin //Если была нажата клавиша "Escape"

frmMain.Canvas.Pen.Color:=frmMain.Color; //Цвет карандаша = цвету формы

frmMain.Canvas.Brush.Style:=bsSolid; //Сплошная заливка

frmMain.Canvas.Brush.Color:=frmMain.Color;//Цвет заливки = цвету формы

//Рисование прямоугольника на всей форме, т.е. очистка канвы

frmMain.Canvas.FillRect(Rect(0,0,frmMain.Width,frmMain.Height));

end;

end;

//Обработчик создания формы

procedure TfrmMain.FormCreate(Sender: TObject);

begin

radius:=10; //Радиус окружности

end;

//Обработчик нажатия кнопки мыши

procedure TfrmMain.FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

frmMain.Canvas.Pen.Color:=clRed; //Цвет карандаша - красный

frmMain.Canvas.Brush.Style:=bsSolid; //Сплошная заливка

frmMain.Canvas.Brush.Color:=clBlue; //Цвет заливки - синий

//Рисование круга

frmMain.Canvas.Ellipse(x-radius,y-radius,x+radius,y+radius);

x_glbl:=x; //Занесение значений координат последнего круга

y_glbl:=y; //в глобальные переменные

end;

end.