Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Unit2;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, GraphUtil, Controls, Forms,
- Dialogs, ExtCtrls;
- type
- TForm1 = class(TForm)
- Timer1: TTimer;
- procedure Timer1Timer(Sender: TObject);
- procedure FormPaint(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure FormResize(Sender: TObject);
- private
- Hour, Minute, Second: Word; {hora corrente}
- XCenter, YCenter, Radius: Integer; {tamanho atual do formulário}
- public
- procedure DrawHand (XCenter, YCenter, Radius,
- BackRadius: Integer; Angle: Real);
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.DFM}
- // Evento OnTimer do componente Timer
- procedure TForm1.Timer1Timer(Sender: TObject);
- var
- HSec: Word; {valor temporário, não utilizado}
- begin
- {obtém a hora do sistema}
- DecodeTime (Time, Hour, Minute, Second, HSec);
- Refresh;
- end;
- // Evento OnPaint do componente Form
- procedure TForm1.FormPaint(Sender: TObject);
- var
- Angle: Real;
- I, X, Y, Size: Integer;
- begin
- {calcula o centro do formulário}
- XCenter := ClientWidth div 2;
- YCenter := ClientHeight div 2;
- if XCenter <> YCenter then
- Radius := YCenter - 10
- else
- Radius := XCenter - 10;
- {0. Desenha Circulo Fundo do Relogio}
- Canvas.Pen.Width := 8;
- //Canvas.Brush.Color := RGB(178, 162, 159);
- //GradientFillCanvas(Canvas,RGB(178, 162, 159), RGB(178, 162, 255), nil, gdVertical);
- Canvas.Pen.Color := $390071;
- Canvas.Brush.Color := $20003F;
- //Canvas.Brush.Style := bsCross;
- //Canvas.Brush.Style := bsClear;
- Canvas.Ellipse (XCenter-Radius-3, YCenter-Radius-3, XCenter+Radius+3, YCenter+Radius+3);
- {0. Desenha o marcador de Minutos}
- Radius := YCenter - 28;
- Canvas.Pen.Width := 1;
- Canvas.Pen.Color := $79777E;
- Canvas.Brush.Color := $79777E;
- Canvas.Brush.Style := bsClear;
- //Size := Radius div 200 + 1;
- Size := 1;
- for I := 0 to 59 do
- begin
- Angle := 2 * Pi * I / 60;
- X := XCenter - Round (Radius * Cos (Angle));
- Y := YCenter - Round (Radius * Sin (Angle));
- Canvas.Ellipse (X - Size, Y - Size, X +
- Size, Y + Size);
- end;
- {0.1 Desenha o marcador de horas}
- Canvas.Pen.Color := $894563;//$6B182E;
- Canvas.Brush.Color := $20003F;//$894563;
- Canvas.Font.Size:=9;
- Canvas.Font.Color:=$894563;
- Canvas.Font.Style:=[fsbold];
- Size := Radius div 50 + 1;
- for I := 1 to 12 do
- begin
- Angle :=(2 * Pi * I / 12) * -1;
- X := XCenter - Round (Radius * Sin (Angle));
- Y := YCenter - Round (Radius * Cos (Angle));
- Canvas.TextOut(X-2,Y-2,inttostr(I));
- //Canvas.Ellipse (X - Size, Y - Size, X +
- //Size, Y + Size);
- end;
- {1. Desenha o ponteiro dos minutos}
- Canvas.Pen.Width := 2;
- Canvas.Pen.Color := $C4C0C8;
- Angle := 2 * Pi * Minute / 60;
- DrawHand (XCenter, YCenter, Radius * 90 div 100, 0, Angle);
- {2. Desenha o ponteiro das horas: percentual dos minutos adicionado à hora para mover o ponteiro suavemente}
- Canvas.Pen.Width := 6;
- Canvas.Pen.Color := $C4C0C8;
- Angle := 2 * Pi * (Hour + Minute / 60) / 12;
- DrawHand (XCenter, YCenter,
- Radius * 75 div 100, 0, Angle);
- {3. Desenha o ponteiro dos segundos}
- Canvas.Pen.Width := 1;
- Canvas.Pen.Color := $8000FF;
- Angle := 2 * Pi * Second / 60;
- DrawHand (XCenter, YCenter, Radius* 90 div 100,
- Radius * 20 div 100, Angle);
- end;
- procedure TForm1.DrawHand (XCenter, YCenter,
- Radius, BackRadius: Integer; Angle: Real);
- begin
- Angle := (Angle + 3*Pi/2);
- Canvas.MoveTo (
- XCenter - Round (BackRadius * Cos (Angle)),
- YCenter - Round (BackRadius * Sin (Angle)));
- Canvas.LineTo (
- XCenter + Round (Radius * Cos (Angle)),
- YCenter + Round (Radius * Sin (Angle)));
- end;
- // Evento OnCreate do Form
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- {lê as horas antes do formulário ser exibido}
- Timer1Timer (self);
- end;
- // Evento onresize do Form
- procedure TForm1.FormResize(Sender: TObject);
- begin
- Refresh;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement