Relógio em canvas

Delphi

03/10/2003

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 ?

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

Rodrigo Costa

Curtidas 0

Respostas

Rodrigo Costa

Rodrigo Costa

03/10/2003

sobe


GOSTEI 0
Wbb

Wbb

03/10/2003

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


GOSTEI 0
POSTAR