Crie um projeto em Delphi, com o nome que desejar, insira um Timer no projeto e mude a cor do formulário para clBtnHighlight, Declare as seguintes variáveis globais :
wHour, wMinuto, wSegundo : Word;
xCentro, yCentro, Rad : integer;
No evento Timer1Timer do Timer, modifique ele para que fique da seguinte forma :
procedure TForm1.Timer1Timer(Sender: TObject);
var
wSec : Word;
begin
DecodeTime(Time, wHour, wMinuto, wSegundo, wSec);
Refresh;
end;
Crie o procedimento abaixo:
procedure TForm1.DrawHand(xCentro, yCentro, Rad, BackRad: Integer;
Angulo: Real);
begin
Angulo := (Angulo +3 * Pi / 2);
Canvas.MoveTo(xCentro - Round(BackRad * Cos(Angulo)),
yCentro - Round(BackRad * Sin(Angulo)));
Canvas.LineTo(xCentro - Round(Rad * Cos(Angulo)),
yCentro - Round(Rad * Sin(Angulo)));
end;
No formulário, na propriedade FormPaint, ajuste ela para que fique da seguinte maneira :
procedure TForm1.FormPaint(Sender: TObject);
var
Angulo : real;
i, x, y, size : integer;
begin
xCentro := ClientWidth div 2;
yCentro := ClientHeight div 2;
if xCentro > yCentro then
Rad := yCentro - 10
else
Rad := xCentro - 10;
// Desenha o marcador de horas :)
Canvas.Pen.Color := clYellow;
Canvas.Brush.Color := clYellow;
size := Rad div 50 +1;
for I := 0 to 11 do
begin
Angulo := 2 * Pi * i / 12;
x := xCentro - Round(Rad * cos (Angulo));
y := yCentro - Round(Rad * sin (Angulo));
Canvas.Ellipse(X - size, Y - size, X + size, Y + size);
end;
// Desenha o ponteiro de minutos...
Canvas.Pen.Width := 2;
Canvas.Pen.Color := clBlue;
Angulo := 2 * Pi * wMinuto / 60;
DrawHand(xCentro, yCentro, Rad * 90 div 100, 0, Angulo);
// Desenha o ponteiro da Hora
Angulo := 2 * Pi * (wHour + wMinuto / 60) / 12;
drawHand(xCentro, yCentro, Rad * 70 div 100, 0, Angulo);
// Desenha o ponteiro dos segundos
Canvas.Pen.Width := 1;
Canvas.Pen.Color := clRed;
Angulo := 2 * Pi * wSegundo / 60;
drawHand(xCentro, yCentro, Rad, Rad * 30 div 100, Angulo);
end;
Ainda no Formulário, na propriedade FormCreate, insira o seguinte código :
Timer1Timer(Self);
E na propriedade "FormResize":
Refresh;
O código do formulário ficará da seguinte maneira
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, 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
wHour, wMinuto, wSegundo : Word;
xCentro, yCentro, Rad : integer;
public
procedure DrawHand( xCentro, yCentro, Rad, BackRad : Integer; Angulo : Real);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.DrawHand(xCentro, yCentro, Rad, BackRad: Integer;
Angulo: Real);
begin
Angulo := (Angulo +3 * Pi / 2);
Canvas.MoveTo(xCentro - Round(BackRad * Cos(Angulo)),
yCentro - Round(BackRad * Sin(Angulo)));
Canvas.LineTo(xCentro - Round(Rad * Cos(Angulo)),
yCentro - Round(Rad * Sin(Angulo)));
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
wSec : Word;
begin
DecodeTime(Time, wHour, wMinuto, wSegundo, wSec);
Refresh;
end;
procedure TForm1.FormPaint(Sender: TObject);
var
Angulo : real;
i, x, y, size : integer;
begin
xCentro := ClientWidth div 2;
yCentro := ClientHeight div 2;
if xCentro > yCentro then
Rad := yCentro - 10
else
Rad := xCentro - 10;
// Desenha o marcador de horas :)
Canvas.Pen.Color := clYellow;
Canvas.Brush.Color := clYellow;
size := Rad div 50 +1;
for I := 0 to 11 do
begin
Angulo := 2 * Pi * i / 12;
x := xCentro - Round(Rad * cos (Angulo));
y := yCentro - Round(Rad * sin (Angulo));
Canvas.Ellipse(X - size, Y - size, X + size, Y + size);
end;
// Desenha o ponteiro de minutos...
Canvas.Pen.Width := 2;
Canvas.Pen.Color := clBlue;
Angulo := 2 * Pi * wMinuto / 60;
DrawHand(xCentro, yCentro, Rad * 90 div 100, 0, Angulo);
// Desenha o ponteiro da Hora
Angulo := 2 * Pi * (wHour + wMinuto / 60) / 12;
drawHand(xCentro, yCentro, Rad * 70 div 100, 0, Angulo);
// Desenha o ponteiro dos segundos
Canvas.Pen.Width := 1;
Canvas.Pen.Color := clRed;
Angulo := 2 * Pi * wSegundo / 60;
drawHand(xCentro, yCentro, Rad, Rad * 30 div 100, Angulo);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1Timer(Self);
end;
procedure TForm1.FormResize(Sender: TObject);
begin
Refresh;
end;
end
Feito isso o relógio está pronto