
11.09.2015, 10:55
|
Прохожий
|
|
Регистрация: 07.09.2015
Сообщения: 9
Версия Delphi: Delphi 7
Репутация: 10
|
|
После моих стараний получилась вот такая шляпа.
1) как сделать чтоб стрелка двигалась ещё и с постоянным ускорением?
2) как добавить вторую стрелку, чтобы она двигалась относительно первой по тем же законам скорости и ускорения.(То есть должен создаться эффект что одна стрелка постоянно убегает от первой)
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Spin;
type
TForm1 = class(TForm)
PaintBox1: TPaintBox;
Timer1: TTimer;
Button1: TButton;
SpinEdit1: TSpinEdit;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure PaintBox1Paint(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
PaintBox1: TPaintBox;
s: integer; //скорость
r: integer; //Радиус окружности
x0: integer; // Координата х центра окружности
y0: integer; // Координата у центра окружности
a: integer; // угол вращения
implementation
{$R *.dfm}
//отрисовка линии
procedure Line(im:TPaintBox;x,y,x0,y0,c:integer);
begin
with im.Canvas do
begin
brush.Color:=c;
pen.Color:=c;
MoveTo(x0, y0); //начало линии
LineTo(x, y); //координаты x,y (докуда рисуется линия)
end;
end;
//создание формы
procedure TForm1.FormCreate(Sender: TObject);
begin
width:=800;
height:=600;
end;
//Запуск таймера
procedure TForm1.Button1Click(Sender: TObject);
begin
s:=SpinEdit1.Value;
Timer1.Interval:=round(60000/(s*360));
if Timer1.Enabled then
begin
Button1.Caption:='Пуск';
Timer1.Enabled:=false; //Выкл таймер
end
else
begin
Button1.Caption:='Стоп';
Timer1.Enabled:=true; //Вкл таймер
end;
x0:=PaintBox1.Left+PaintBox1.Width div 2-4; //координата х центра окружности
y0:=PaintBox1.Left+PaintBox1.Height div 2-4; //координата у центра окружности
r:=PaintBox1.Width div 2-20; //радиус
a:=270;
end;
//движение стрелки
procedure TForm1.Timer1Timer(Sender: TObject);
var x: integer;
y: integer;
begin
doublebuffered:=true; //уменьшает мерцание
x:=Round(x0+R*cos(a*pi/180)); //параметрическое уравнение для х
y:=Round(y0+R*sin(a*pi/180)); //параметрическое уравнение для у
Line(PaintBox1,x0,y0,x,y,clBtnFace);
a:=a+1;
if a=360 then a:=0;
x:=Round(x0+R*cos(a*pi/180)); //параметрическое уравнение для х
y:=Round(y0+R*sin(a*pi/180)); //параметрическое уравнение для у
Line(PaintBox1,x0,y0,x,y,clBlack);
end;
//Отрисовка квадрата
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
PaintBox1.Canvas.Rectangle(8,8,225,225);
end;
end.
Админ: пользуемся тегами! При рецедиве последуют санкции!
|