If radiobutton4.Checked then // залика




Реализация движения

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

ПЕРЕМЕЩЕНИЕ. Для перемещения точки из позиции с координатами (X,Y) в позицию с координатами (X1,Y1) надо к координате X добавить dx единиц, а к координате Y - dy единиц:

X1=X+dX;;

Y1=Y+dY.

МАСШТАБИРОВАНИЕ

X1= Round(XC*(1-KX)+KX*X);

(7)

Y1= Round (YC*(1-KY)+KY*Y),

 

где (X,Y) - координаты точки исходного рисунка;

(XC,YC) - координаты центра масштабирования;

KX, KY - коэффициенты масштабирования по горизонтали и вертикали,

 

Округление необходимо, т.к. коэффициенты масштабирования в общем случае величины действительные. При KX >1 и KY >1 рисунок увеличивается в размерах и удаляется от центра масштабирования; при KX <1 и KY <1 рисунок уменьшается в размерах и приближается к центру масштабирования. При KX=KY угол наклона масштабируемого отрезка не меняется.

ВРАЩЕНИЕ. При перемещении точки А с координатами (X,Y) по дуге окружности с центром в точке С с координатами (XC,YC) в точку В с координатами (X1,Y1) новые координаты определяются из формулы:

 

X1=XC+Round((X-XC)*COS(Θ)+(Y-YC)*SIN(Θ))

Y1=YC+Round((Y-YC)*COS(Θ)-(X-XC)*SIN(Θ)),

 

где Θ - угол поворота (положительное направление поворота против часовой стрелки, отрицательное - по часовой стрелке);

Движение моделируется с помощью невизуального компонента Timer, который расположен на странице System палитры компонентов Delphi. Он применяется для запуска процедур, функций и событий через определенные интервалы времени. Интервал определяется значением его свойства Interval, которое подбирает пользователь. В начальный момент времени Timer не используется (его свойство Enabled равно False). Кнопка "ПУСК" активизирует этот компонент (Timer.Enabled:= True), и начинается движение. Кнопка "СТОП" меняет значение свойства Timer.Enabled на False, и движение прекращается.

Implementation

var x1:integer;

procedure TForm1.FormCreate(Sender: TObject); {}

Begin

x1:=0; Timer1.enabled:= false;

end;

procedure TForm1.N1Click(Sender: TObject); {включить}

Begin

Timer1.enabled:= true;

end;

Procedure ris; {рисунок}

Begin

form1.image2.canvas.rectangle(x1,10,x1+10,20);

end;

procedure TForm1.N2Click(Sender: TObject); {выключить}

Begin

Timer1.enabled:= false;

end;

procedure TForm1.Timer1Timer(Sender: TObject); {OnTimer событие}

Begin

ris;

image2.Canvas.pen.color:= clred;

image2.Canvas.brush.color:= clgreen;

x1:=x1+10;

end;

End.


Обработчики событий для мыши.

Используемые типы

 

type TMouseButton = (mbLeft, mbRight, mbMiddle);

тип перечислимый, какая кнопка мыши выбрана

 

type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);

тип множество из кнопок нажатых при использовании мыши

 

type TmouseEvent = Procedure (Sender:Tooject; Button:TmouseButton;

<Shift>:TshiftState; X,Y:integer) of Object;

 

Property TControl OnMouseDoun: TmouseEvent

Свойство класса OnMouseUp :TmouseEvent

Текст программы граф редактора (работа с мышкой)

unit Unit1;

Interface

uses

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

Dialogs, StdCtrls, ExtCtrls, ExtDlgs, ComCtrls, Menus;

 

type

TForm1 = class(TForm)

Image1: TImage;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

RadioButton1: TRadioButton;

RadioButton2: TRadioButton;

RadioButton4: TRadioButton;

RadioButton5: TRadioButton;

RadioButton3: TRadioButton;

RadioButton6: TRadioButton;

OpenPictureDialog1: TOpenPictureDialog;

SavePictureDialog1: TSavePictureDialog;

ColorBox1: TColorBox;

ColorBox2: TColorBox;

Label2: TLabel;

Label3: TLabel;

ColorBox3: TColorBox;

Label4: TLabel;

RadioButton7: TRadioButton;

procedure FormCreate(Sender: TObject);

procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

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

Y: Integer);

procedure N2Click(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure N5Click(Sender: TObject);

procedure N3Click(Sender: TObject);

 

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

 

Implementation

{$R *.dfm}

var x1,y1,x2,y2:integer;

procedure TForm1.FormCreate(Sender: TObject);

Begin

image1.Canvas.Brush.Color:=clwhite;

end;

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

Begin

x1:=x; y1:=y;

image1.Canvas.MoveTo(x1,y1);

if radiobutton4.Checked then // залика

Begin

Image1.Canvas.brush.color:= Colorbox3.selected;

Image1.Canvas.brush.style:= bssolid;



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-05-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: