unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.ComCtrls, Vcl.StdCtrls, Math;
type
TForm1 = class(TForm)
Panel1: TPanel;
LEditRad: TLabeledEdit;
LabelDS: TLabel;
ButtonMove: TButton;
TrackBarSpeed: TTrackBar;
LabelSpeed: TLabel;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure ButtonMoveClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure TrackBarSpeedChange(Sender: TObject);
procedure LEditRadKeyPress(Sender: TObject; var Key: Char);
procedure FormResize(Sender: TObject);
procedure FormPaint(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
var
RadCircle:integer;
CenterX, CenterY:integer;
PointX, PointY:integer;
Angle:real;
RadPoint:integer;
StepPoint:real;
PointColor:TColor;
PenColor:TColor;
halfSize, Speed:integer;
Range:real;
{$R *.dfm}
procedure TForm1.ButtonMoveClick(Sender: TObject);
begin
if Timer1.Enabled then
begin
ButtonMove.Caption:=' Запустить';
LEditRad.Enabled:= true;
end
else
begin
RadCircle:= StrToInt(LEditRad.Text);
LEditRad.Enabled:= false;
ButtonMove.Caption:=' Остановить';
end;
Timer1.Enabled:= not Timer1.Enabled;
PointX := Trunc(RadCircle * cos(DegToRad(Angle)) + CenterX);
PointY := Trunc(RadCircle * sin(DegToRad(Angle)) + CenterY);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
begin
centerx:=form1.Width div 2;
centery:=form1.Height div 2;
if centerX>centerY then HalfSize:=centerY-150
else HalfSize:=centerX-150;{половина стороны квадрата - берется в EDIT и делится на 2}
Range:=sqrt(2)*HalfSize;
angle:=0;{начальное положение угла}
Speed:=1;{берется с TrackBar}
end;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
Form1.Canvas.Pen.Color:=PenColor;
Form1.Canvas.Brush.Color:=PenColor;
Form1.Canvas.Ellipse(pointX-4,pointY-4,pointX+4,pointY+4);
end;
procedure TForm1.FormResize(Sender: TObject);
begin
CenterX := Form1.Width div 2;
CenterY := (Form1.Height - Panel1.Height) div 2;
end;
procedure TForm1.LEditRadKeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9','.',',',#8])
then Key := #0;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.PenColor:=Form1.Color;
Form1.FormPaint(Sender);
Angle:=Angle+Speed;
pointX:=CenterX+trunc(Range*cos(DegToRad(angle)));
pointY:=CenterY+trunc(Range*sin(DegToRad(angle)));
if pointX>(centerX+halfSize)then pointX:=centerX+halfSize;
if pointX<(centerX-halfSize)then pointX:=centerX-halfSize;
if pointY>(centerY+halfSize)then pointY:=centerY+halfSize;
if pointY<(centerY-halfSize)then pointY:=centerY-halfSize;
Form1.FormPaint(Sender);
Form1.PenColor:=Form1.Color;
end;
procedure TForm1.TrackBarSpeedChange(Sender: TObject);
begin
Timer1.Interval := Trunc(1000 * StepPoint / TrackBarSpeed.Position);
LabelSpeed.Caption:= IntToStr(TrackBarSpeed.Position);
end;
end.
[code][code]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, math, Vcl.Buttons, Vcl.StdCtrls, Vcl.ComCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
Panel1: TPanel;
LEditS: TLabeledEdit;
Button1: TButton;
TrackBar1: TTrackBar;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormOnPaint(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
procedure FormResize(Sender: TObject);
private{Private declarations}
public{Public declarations}
PenColor:TColor;
Angle,centerX,centerY,halfSize,pointX,pointY,Speed:integer;
Range:real;
RadCircle:integer;
StepPoint:real;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if Timer1.Enabled then
begin
Button1.Caption := ' Запустить';
LEditS.Enabled := true;
end
else
begin
RadCircle := StrToInt(LEditS.Text);
LEditS.Enabled := false;
Button1.Caption := ' Остановить';
end;
Timer1.Enabled := not Timer1.Enabled;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
centerx:=form1.Width div 2;
centery:=form1.Height div 2;
if centerX>centerY then HalfSize:=centerY-150
else HalfSize:=centerX-150;{половина стороны квадрата - берется в EDIT и делится на 2}
Range:=sqrt(2)*HalfSize;
angle:=0;{начальное положение угла}
Speed:=1;{берется с TrackBar}
end;
procedure TForm1.FormOnPaint(Sender: TObject);
begin
Form1.Canvas.Pen.Color:=PenColor;
Form1.Canvas.Brush.Color:=PenColor;
Form1.Canvas.Ellipse(pointX-4,pointY-4,pointX+4,pointY+4);
end;
procedure TForm1.FormResize(Sender: TObject);
begin
CenterX := Form1.Width div 2;
CenterY := (Form1.Height - Panel1.Height) div 2;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.PenColor:=Form1.Color;
Form1.FormOnPaint(Sender);
Angle:=Angle+Speed;
pointX:=CenterX+trunc(Range*cos(DegToRad(angle)));
pointY:=CenterY+trunc(Range*sin(DegToRad(angle)));
if pointX>(centerX+halfSize)then pointX:=centerX+halfSize;
if pointX<(centerX-halfSize)then pointX:=centerX-halfSize;
if pointY>(centerY+halfSize)then pointY:=centerY+halfSize;
if pointY<(centerY-halfSize)then pointY:=centerY-halfSize;
Form1.PenColor:=clRed;
Form1.FormOnPaint(Sender);
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
Timer1.Interval := Trunc(1000 * StepPoint / TrackBar1.Position);
Label1.Caption:= IntToStr(TrackBar1.Position);
end;
end.
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.ComCtrls, Vcl.StdCtrls, Math;
type
TForm1 = class(TForm)
Panel1: TPanel;
LEditRad: TLabeledEdit;
LabelDS: TLabel;
ButtonMove: TButton;
TrackBarSpeed: TTrackBar;
LabelSpeed: TLabel;
Timer1: TTimer;
TrackBarPlav: TTrackBar;
Label1: TLabel;
LabelPlav: TLabel;
procedure FormCreate(Sender: TObject);
procedure ButtonMoveClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure TrackBarSpeedChange(Sender: TObject);
procedure LEditRadKeyPress(Sender: TObject; var Key: Char);
procedure TrackBarPlavChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
var
RadCircle:integer;
CenterX, CenterY:integer;
PointX, PointY:integer;
Angle:real;
RadPoint:integer;
StepPoint:real;
PointColor:TColor;
{$R *.dfm}
procedure TForm1.ButtonMoveClick(Sender: TObject);
begin
if Timer1.Enabled then
begin
ButtonMove.Caption:=' Запустить';
LEditRad.Enabled:= true;
end
else
begin
RadCircle:= StrToInt(LEditRad.Text);
LEditRad.Enabled:= false;
ButtonMove.Caption:=' Остановить';
end;
Timer1.Enabled:= not Timer1.Enabled;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Angle := 0;
RadCircle := 100;
RadPoint := 5;
StepPoint := 1;
CenterX := Form1.Width div 2;
CenterY := (Form1.Height - Panel1.Height) div 2;
PointX := CenterX + RadCircle;
PointY := CenterY;
PointColor := clRed;
Canvas.Pen.Color := PointColor;
Canvas.Brush.Color := PointColor;
Canvas.Ellipse(PointX - radPoint,PointY - RadPoint,
PointX + RadPoint, PointY + RadPoint);
end;
procedure TForm1.LEditRadKeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9','.',',',#8])
then Key := #0;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
PointX := Trunc(RadCircle * cos(DegToRad(Angle)) + CenterX);
PointY := Trunc(RadCircle * sin(DegToRad(Angle)) + CenterY);
Canvas.Pen.Color := clred;//Form1.Color;
Canvas.Brush.Color :=clred;// Form1.Color;
Canvas.Ellipse(PointX - RadPoint, PointY - RadPoint,
PointX + RadPoint, PointY + RadPoint);
Angle := Angle + StepPoint;
if Angle >= 360 then Angle := 0;
end;
procedure TForm1.TrackBarPlavChange(Sender: TObject);
var
StepPoint: Integer;
begin
LabelPlav.Caption := IntToStr(TrackBarPlav.Position);
Timer1.Interval := Trunc(1000 * StepPoint / TrackBarPlav.Position);
CenterX := Form1.Width div 2;
CenterY := (Form1.Height - Panel1.Height) div 2;
end;
procedure TForm1.TrackBarSpeedChange(Sender: TObject);
begin
Timer1.Interval := Trunc(1000 * StepPoint / TrackBarSpeed.Position);
LabelSpeed.Caption:= IntToStr(TrackBarSpeed.Position);
CenterX := Form1.Width div 2;
CenterY := (Form1.Height - Panel1.Height) div 2;
end;
end.
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.