Fórum Relógio em canvas #186057
03/10/2003
0
Pessoal,
O código abaixo cria um relógio analógico em canvas. Eu preciso alterar este código de modo que apareça o algarismo da hora em vez de um traço. Ex: em vez de mostar ´|´ quero exibir ´12´ e assim por diante. Só preciso exibir as horas, os minutos não precisa !
Alguem pode me ajudar ?
O código abaixo cria um relógio analógico em canvas. Eu preciso alterar este código de modo que apareça o algarismo da hora em vez de um traço. Ex: em vez de mostar ´|´ quero exibir ´12´ e assim por diante. Só preciso exibir as horas, os minutos não precisa !
Alguem pode me ajudar ?
unit relogio;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, Math, StdCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
Label1: TLabel;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
procedure DesenhaRelogio;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
Function Giraponto (Angulo: extended; const Ponto: Tpoint) : Tpoint;
var
Seno, Cosseno: extended;
begin
sincos(Angulo*pi/180, seno, Cosseno);// obtem o seno e Cosseno do angulo
result.x := Trunc(ponto.x*Cosseno + Ponto.y *seno); // x girado
result.y := Trunc(Ponto.y*Cosseno - Ponto.x * seno); // y girado
end;
procedure tform1.DesenhaRelogio;
var
Hora, Mint,Seg,MSeg :Word;
Raio,cx,cy,i :Integer;
Angulo :Extended;
Ponto :TPoint;
begin
with Canvas do begin
FillRect(ClientRect); //limpa a tela
cx := (ClientRect.Right+ClientRect.Left) div 2;
cy := (ClientRect.bottom+ClientRect.Top) div 2;
Raio := Min(ClientRect.Right-ClientRect.Left, ClientRect.Bottom-ClientRect.Top) div 2;
DecodeTime (Time, Hora, Mint, Seg, MSeg); // Quebra hora atual nas partes
Angulo := 30*(3-hora)-Mint div 2; //encontra o angulo do braço das horas
Ponto := GiraPonto(Angulo, Point(Raio div 2,0)); //gira Pontos das horas
Pen.color :=claqua; pen.width :=6;
MoveTo (cx, cy); // Desenha o ponteiro das horas
LineTo (cx+Ponto.x, cy+Ponto.y);
Angulo := (15-Mint)*6; // encontra o angulo do braço dos minutos
Ponto := GiraPonto(Angulo, Point(Raio*3 div 4,0)); //gira Pontos dos minutos
Pen.color := claqua; pen.width := 3;
MoveTo (cx, cy); // desenha ponteiro dos minutos
LineTo (cx+Ponto.x, cy+Ponto.y);
Angulo := (15-Seg)*6; //encontra o angulo do braço dos segundos
Pen.color := clyellow; Ponto := GiraPonto(Angulo, Point(Raio*3 div 4,0));
Pen.width := 1;
MoveTo (cx, cy); // desenha o ponteiro dos segundos
LineTo (cx+Ponto.x, cy+Ponto.y);
Pen.color := clblack; //desenha marcações de minutos
For i := 0 to 59 do begin
if i mod 5 = 0 then
Ponto := point(Raio*9 div 10,0)
else
Ponto := Point(Raio*29 div 30,0);
Ponto:= GiraPonto(6*i, Ponto);
MoveTo (cx+Ponto.x, cy+Ponto.y);
Ponto := Point (Raio, 0);
Ponto:= GiraPonto ( 6*i, Ponto);
LineTo (cx+Ponto.x, cy+Ponto.y);
end;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
DesenhaRelogio;
label1.Caption := Timetostr (time);
end;
end.Rodrigo Costa
Curtir tópico
+ 0
Responder
Posts
03/10/2003
Rodrigo Costa
sobe
Responder
Gostei + 0
06/10/2003
Wbb
O código que você postou não está funcionando. Tente copiá-lo exatamente como está e colar numa nova aplicação. Antes de colar eu inseri o Label e o Timer para tentar resolver e conseguir ver o relógio funcionando, mas não deu certo.
wbb
wbb
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)