Новичок
Профиль
Группа: Участник
Сообщений: 1
Регистрация: 16.3.2006
Репутация: нет Всего: нет
|
Вот код программы. Вентилятор должен быстро двигаться (то есть переключение скоростей).. до меня не доходит как это рганизовать Код | unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Matrices2D, ExtCtrls;
type TForm1 = class(TForm) Timer1: TTimer; Timer2: TTimer; procedure FormCreate(Sender: TObject); procedure FormPaint(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Timer2Timer(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char);
private { Private declarations } public { Public declarations } end; function Perevorot(per:double):double;
const fi=Pi/2; fip=Pi/30; var b : boolean; sk:double; Form1: TForm1; Vl1 : array[0..3] of TVertex =( (250,250,1), (320,300,1), (390,250,1), (250,250,1));
N: array [1..4] of TPoint=( (x:300;y:335), (x:300;y:550), (x:200;y:550), (x:200;y:335)); P1 : TTransform =( (1,0,0), (0,1,0), (-250,-250,1)); P2 : TTransform =( (1,0,0), (0,1,0), (250,250,1)); R : TTransform =( (1,0,0), (0,1,0), (0,0,1)); R1 : TTransform =( (1,0,0), (0,1,0), (0,0,1));
T: TTransform; T1: TTransform;
implementation
{$R *.dfm} function Perevorot (per:double): double;
Var f:double;
begin f:=pi/per; R1[0,0]:=cos(f); R1[0,1]:=sin(f); R1[1,0]:=-sin(f); R1[1,1]:=cos(f); CombineTransform(T1,P1,R1); CombineTransform(T1,T1,P2); end;
procedure TForm1.FormCreate(Sender: TObject); begin sk:=0.00300; b:=true; perevorot(sk); R[0,0]:=cos(fi); R[0,1]:=sin(fi); R[1,0]:=-sin(fi); R[1,1]:=cos(fi); CombineTransform(T,P1,R); CombineTransform(T,T,P2); R1[0,0]:=cos(fip); R1[0,1]:=sin(fip); R1[1,0]:=-sin(fip); R1[1,1]:=cos(fip); CombineTransform(T1,P1,R1); CombineTransform(T1,T1,P2);
end;
procedure TForm1.FormPaint(Sender: TObject); var Lep1: array[0..3] of TVertex; i : integer; begin with canvas do begin Ellipse(150,150,350,350); PolyLine(N); font.Name := 'Verdana'; font.Size:=10; TextOut(50,50,'Стрелка вверх - включить вентилятор,'); TextOut(50,68, 'Стрелка вниз - выключение вентилятора!'); TextOut(50,86,'1 и 2 - увелечение скорости.'); end; for i:=0 to 3 do begin Lep1[i]:=Vl1[i]; end;
for i:=1 to 4 do Begin ApplyTransform(Lep1, Lep1, T); with canvas do begin PolyBezier([Point(round(Lep1[0,0]),round(Lep1[0,1])), Point(round(Lep1[1,0]),round(Lep1[1,1])), Point(round(Lep1[2,0]),round(Lep1[2,1])), Point(round(Lep1[3,0]),round(Lep1[3,1]))]); end; end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin ApplyTransform(Vl1,Vl1,T1); OnPaint(self);
end;
procedure TForm1.Timer2Timer(Sender: TObject); begin if (b=true) and (sk>0.1) then sk:=sk-0.3 else if (b=false) and (sk<0.150) then sk:=sk+0.3; if (b=false) and (sk>0.140) then begin Timer1.Enabled:=false; Timer2.Enabled:=false; end; end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if key='1' then begin b:=true; Timer1.Enabled:=true; Timer2.Enabled:=true; end;
if key='2' then begin b:=false; Timer1.Enabled:=false; Timer2.Enabled:=false; end; perevorot(sk); end;
end.
|
Это сообщение отредактировал(а) Girder - 16.3.2006, 12:40
|