Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Unit1;
- {$mode objfpc}{$H+}
- interface
- uses
- Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
- ExtCtrls;
- type
- { TForm1 }
- TForm1 = class(TForm)
- Button1: TButton;
- Button2: TButton;
- Image1: TImage;
- Timer1: TTimer;
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure FormPaint(Sender: TObject);
- procedure Timer1Timer(Sender: TObject);
- procedure Clock(clhour,clmin,clsec : TColor);
- private
- { private declarations }
- public
- { public declarations }
- end;
- var
- Form1: TForm1;
- cx,cy:integer;//центр окружности циферблата часов
- r:integer; //радиус для рисок
- hl,ml,sl:integer; //длина часовой мину и сек стр
- h,m,s,ms:word; //текущ знач сист времени
- ha,ma,sa:real; //значение угла наклона
- implementation
- {$R *.lfm}
- { TForm1 }
- procedure TForm1.Clock(clhour,clmin,clsec : TColor);
- Begin
- with Form1.Canvas do
- begin
- Pen.Color:=clhour;
- MoveTo(cx,cy);
- Pen.Width:=3;
- LineTo(cx+Round(hl*sin(ha)),cy-Round(hl*cos(ha)));
- MoveTo(cx,cy);
- Pen.width:=2; //minutes arrow
- LineTo(cx+Round(ml*sin(ma)),cy-Round(ml*cos(ma)));
- MoveTo(cx,cy);
- Pen.Color:=clSec;
- Pen.Width:=1;
- LineTo(cx+Round(sl*sin(sa)),cy-Round(sl*cos(sa)));
- end;
- end;
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- close;
- end;
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- cx:=form1.ClientWidth div 2;
- cy:=cx;
- r:=cx-24;
- hl:=r-30;
- ml:=r-20;
- sl:=r-10;
- Timer1.Interval:=1000;
- Timer1.Enabled:=false;
- Button2.Caption:='Time';
- Button2Click(sender);
- end;
- procedure TForm1.FormPaint(Sender: TObject);
- var i:integer;
- begin
- with form1.canvas do
- begin
- pen.color:=clGreen;
- pen.Width:=3;
- Brush.Color:=clWhite;
- Rectangle(18,20,30+2*r,28+2*r);
- pen.width:=1;
- pen.color:=clSilver;
- for i:=0 to 59 do
- begin
- MoveTo(cx+Round((r-2)*sin(i/30*Pi)),cy-Round((r-2)*cos(i/30*Pi)));
- LineTo(cx+Round((r-1)*sin(i/30*Pi)),cy-Round((r-1)*cos(i/30*Pi)));
- end;
- Pen.Width:=2;
- Pen.Color:=clBlue;
- for i:=0 to 11 do
- begin
- MoveTo(cx+Round((r-9)*sin(i/6*Pi)),cy-Round((r-9)*cos(i/6*Pi)));
- LineTo(cx+Round((r-1)*sin(i/6*Pi)),cy-Round((r-1)*cos(i/6*Pi)));
- end;
- //подпишем цифры
- font.Height:=14;
- font.Color:=clPurple;
- Brush.Color:=clWhite;
- TextOut(cx+r-24,cy-TextHeight('3') div 2,'3');
- TextOut(cx-r+17,cy-TextHeight('9') div 2,'9');
- TextOut(cx-TextWidth('12') div 2,cy-r+TextHeight('12')-3,'12');
- TextOut(cx-TextWidth('6') div 2,cy+r-30,'6');
- end;
- end;
- procedure TForm1.Button2Click(Sender: TObject);
- begin
- if Button2.Caption='Time' then
- begin
- form1.Refresh; //очистка формы
- Image1.Visible:=false; //скрываем рисунок
- //преобразуем системное время в формат числа
- DecodeTime(Time,h,m,s,ms);
- //вычисляем углы наклона стрелок
- ha:=(h mod 12)/12*(2*Pi)+(m div 12)/60*(2*Pi);
- ma:=m/60*(2*Pi);
- sa:=s/60*(2*Pi);
- Clock(clBlack,clBlack,clRed);//цвета стрелок
- Button2.Caption:='Stop';
- Timer1.Enabled:=true;
- end
- else
- begin
- Button2.Caption:='Time';
- Clock(clSilver,clSilver,clSilver);//затираем стрелки
- image1.Visible:=true;//показываем заглушку
- Image1.Picture.LoadFromFile('r.bmp');
- Timer1.Enabled:=false;
- end;
- end;
- procedure TForm1.Timer1Timer(Sender: TObject);
- begin
- Clock(clWhite,clWhite,clWhite);
- DecodeTime(Time,h,m,s,ms);
- ha:=(h mod 12)/12*(2*Pi)+(m div 12)/60*(2*Pi);
- ma:=m/60*(2*Pi);
- sa:=s/60*(2*Pi);
- Clock(clBlack,clBlack,clRed);
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement