Advertisement
Guest User

Untitled

a guest
Mar 29th, 2015
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 3.95 KB | None | 0 0
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  9.   ExtCtrls;
  10.  
  11. type
  12.  
  13.   { TForm1 }
  14.  
  15.   TForm1 = class(TForm)
  16.     Button1: TButton;
  17.     Button2: TButton;
  18.     Image1: TImage;
  19.     Timer1: TTimer;
  20.     procedure Button1Click(Sender: TObject);
  21.     procedure Button2Click(Sender: TObject);
  22.     procedure FormCreate(Sender: TObject);
  23.     procedure FormPaint(Sender: TObject);
  24.     procedure Timer1Timer(Sender: TObject);
  25.     procedure Clock(clhour,clmin,clsec : TColor);
  26.  
  27.   private
  28.     { private declarations }
  29.   public
  30.     { public declarations }
  31.   end;
  32.  
  33. var
  34.   Form1: TForm1;
  35.   cx,cy:integer;//центр окружности циферблата часов
  36.   r:integer; //радиус для рисок
  37.   hl,ml,sl:integer; //длина часовой мину и сек стр
  38.   h,m,s,ms:word; //текущ знач сист времени
  39.   ha,ma,sa:real; //значение угла наклона
  40.  
  41. implementation
  42.  
  43. {$R *.lfm}
  44.  
  45. { TForm1 }
  46.  
  47. procedure TForm1.Clock(clhour,clmin,clsec : TColor);
  48. Begin
  49.   with Form1.Canvas do
  50.   begin
  51.     Pen.Color:=clhour;
  52.     MoveTo(cx,cy);
  53.     Pen.Width:=3;
  54.     LineTo(cx+Round(hl*sin(ha)),cy-Round(hl*cos(ha)));
  55.     MoveTo(cx,cy);
  56.     Pen.width:=2; //minutes arrow
  57.     LineTo(cx+Round(ml*sin(ma)),cy-Round(ml*cos(ma)));
  58.     MoveTo(cx,cy);
  59.     Pen.Color:=clSec;
  60.     Pen.Width:=1;
  61.     LineTo(cx+Round(sl*sin(sa)),cy-Round(sl*cos(sa)));
  62.   end;
  63. end;
  64.  
  65. procedure TForm1.Button1Click(Sender: TObject);
  66. begin
  67.   close;
  68. end;
  69.  
  70. procedure TForm1.FormCreate(Sender: TObject);
  71. begin
  72.   cx:=form1.ClientWidth div 2;
  73.   cy:=cx;
  74.   r:=cx-24;
  75.   hl:=r-30;
  76.   ml:=r-20;
  77.   sl:=r-10;
  78.   Timer1.Interval:=1000;
  79.   Timer1.Enabled:=false;
  80.   Button2.Caption:='Time';
  81.   Button2Click(sender);
  82.   end;
  83.  
  84. procedure TForm1.FormPaint(Sender: TObject);
  85. var i:integer;
  86. begin
  87.   with form1.canvas do
  88.   begin
  89.     pen.color:=clGreen;
  90.     pen.Width:=3;
  91.     Brush.Color:=clWhite;
  92.     Rectangle(18,20,30+2*r,28+2*r);
  93.     pen.width:=1;
  94.     pen.color:=clSilver;
  95.     for i:=0 to 59 do
  96.     begin
  97.       MoveTo(cx+Round((r-2)*sin(i/30*Pi)),cy-Round((r-2)*cos(i/30*Pi)));
  98.       LineTo(cx+Round((r-1)*sin(i/30*Pi)),cy-Round((r-1)*cos(i/30*Pi)));
  99.     end;
  100.     Pen.Width:=2;
  101.     Pen.Color:=clBlue;
  102.     for i:=0 to 11 do
  103.         begin
  104.           MoveTo(cx+Round((r-9)*sin(i/6*Pi)),cy-Round((r-9)*cos(i/6*Pi)));
  105.           LineTo(cx+Round((r-1)*sin(i/6*Pi)),cy-Round((r-1)*cos(i/6*Pi)));
  106.         end;
  107.     //подпишем цифры
  108.     font.Height:=14;
  109.     font.Color:=clPurple;
  110.     Brush.Color:=clWhite;
  111.     TextOut(cx+r-24,cy-TextHeight('3') div 2,'3');
  112.     TextOut(cx-r+17,cy-TextHeight('9') div 2,'9');
  113.     TextOut(cx-TextWidth('12') div 2,cy-r+TextHeight('12')-3,'12');
  114.     TextOut(cx-TextWidth('6') div 2,cy+r-30,'6');
  115.   end;
  116. end;
  117.  
  118. procedure TForm1.Button2Click(Sender: TObject);
  119. begin
  120.   if Button2.Caption='Time' then
  121.   begin
  122.     form1.Refresh; //очистка формы
  123.     Image1.Visible:=false; //скрываем рисунок
  124.     //преобразуем системное время в формат числа
  125.     DecodeTime(Time,h,m,s,ms);
  126.     //вычисляем углы наклона стрелок
  127.     ha:=(h mod 12)/12*(2*Pi)+(m div 12)/60*(2*Pi);
  128.     ma:=m/60*(2*Pi);
  129.     sa:=s/60*(2*Pi);
  130.     Clock(clBlack,clBlack,clRed);//цвета стрелок
  131.     Button2.Caption:='Stop';
  132.     Timer1.Enabled:=true;
  133.   end
  134.   else
  135.   begin
  136.     Button2.Caption:='Time';
  137.     Clock(clSilver,clSilver,clSilver);//затираем стрелки
  138.     image1.Visible:=true;//показываем заглушку
  139.     Image1.Picture.LoadFromFile('r.bmp');
  140.     Timer1.Enabled:=false;
  141.   end;
  142. end;
  143.  
  144. procedure TForm1.Timer1Timer(Sender: TObject);
  145. begin
  146.   Clock(clWhite,clWhite,clWhite);
  147.   DecodeTime(Time,h,m,s,ms);
  148.   ha:=(h mod 12)/12*(2*Pi)+(m div 12)/60*(2*Pi);
  149.   ma:=m/60*(2*Pi);
  150.   sa:=s/60*(2*Pi);
  151.   Clock(clBlack,clBlack,clRed);
  152. end;
  153.  
  154. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement