Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿ Como hacer que roten las agujas de un reloj según la hora de mi PC ? (https://www.clubdelphi.com/foros/showthread.php?t=88405)

Ines Rodriguez 02-06-2015 06:03:27

¿ Como hacer que roten las agujas de un reloj según la hora de mi PC ?
 
Hola alguien podria ayudarme a hacer un reloj en delphi. use rotación para las manecillas pero no se como enlazar esas manecillas para que roten segun la hora de mi pc (minutos, horas y segundos) GRACIAS. :) !!!:-|

ecfisa 02-06-2015 06:52:58

Hola Ines, bienvenida a los Foros de Club Delphi :)

Como a todos los que recién ingresan te invitamos a leer nuestra guía de estilo.

Para poder ayudarte sería muy útil que pusieras el código con el que has intentado, o al menos la idea con que pensaste encarar el problema.

Saludos :)

nlsgarcia 02-06-2015 08:39:46

Ines Rodriguez,

Cita:

Empezado por Ines Rodriguez
...¿Como hacer que roten las agujas de un reloj según la hora de mi PC?...

¡Bienvenida al Club Delphi! :D

Revisa esta imagen:



Revisa este código:
Código Delphi [-]
{*********************************************}
{ digitalcoding.com - Delphi Tutorial         }
{ This example provide by - digitalcoding.com }
{ By : Thaminda Wijeratne                     }
{                                             }
{     for more details contact :              }
{          [email protected]         }
{*********************************************}
unit pro36_pas;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure ClockFrame(Sender: TObject);
    procedure UpdateClock(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
  private
    { Private declarations }
    OldH, OldM, OldSX, OldSY, OldMX, OldMY,
    OldHX, OldHY : Integer;
    FirstDraw : Boolean;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.ClockFrame(Sender: TObject);
Var
  A, R, Xo, Yo, X, Y : Integer;
Begin
  { Set center point }
  Xo:=Width Div 2;
  Yo:=Height Div 2;

  If Yo < Xo Then R:=Yo-30 Else R:=Xo-30;

  For A:=0 to 12 Do
  Begin
      X:=Xo+Round(R*Sin(30*A*Pi/180));
      Y:=Yo-Round(R*Cos(30*A*Pi/180));
      Canvas.Brush.Color:=clGreen;
      Canvas.Ellipse(X-4,Y-4,X+4,Y+4);
  End;
End;

procedure TForm1.UpdateClock(Sender: TObject);
Var
  DateTime : TDateTime;
  Xo, Yo, Xs, Ys, Xm, Ym, Xh, Yh, H, M, S, Rs, Rm, Rh : Integer;
begin
  { Get current time }
  DateTime:=Time;

  { Display time in form title }
  Caption:=' '+FormatDateTime('hh:nn:ss AM/PM',DateTime);

  { Set center point }
  Xo:=Form1.Width Div 2;
  Yo:=Form1.Height Div 2;

  { Clock radius }
  Rs:=Yo-50;
  Rm:=Rs;
  Rh:=Rs-50;

  { Extract hours }
  H:=StrToInt(Copy(FormatDateTime('hh AM/PM',DateTime),1,2));
  { Extract minutes }
  M:=StrToInt(FormatDateTime('nn',DateTime));
  { Extract seconds }
  S:=StrToInt(FormatDateTime('ss',DateTime));

  { Set coordinates for seconds }
  Xs:=Xo+Round(Rs*Sin(S*6*Pi/180));
  Ys:=Yo-Round(Rs*Cos(S*6*Pi/180));

  { Set coordinates for minutes }
  Xm:=Xo+Round(Rm*Sin(M*6*Pi/180));
  Ym:=Yo-Round(Rm*Cos(M*6*Pi/180));

  { Set coordinates for hours }
  Xh:=Xo+Round(Rh*Sin((H*30+M/2)*Pi/180));
  Yh:=Yo-Round(Rh*Cos((H*30+M/2)*Pi/180));

  { Erase previous line for seconds }
  If Not FirstDraw Then
  Begin
    Form1.Canvas.Pen.Color:=clBlack;
    Form1.Canvas.Pen.Width:=1;
    Form1.Canvas.MoveTo(Xo,Yo);
    Form1.Canvas.LineTo(OldSX,OldSY);
  End Else
    Form1.Canvas.Pen.Mode:=pmNotXor;

  { Draw seconds line }
  Form1.Canvas.Pen.Color:=clBlack;
  Form1.Canvas.Pen.Width:=1;
  Form1.Canvas.MoveTo(Xo,Yo);
  Form1.Canvas.LineTo(Xs,Ys);
  OldSX:=Xs;
  OldSY:=Ys;

  If FirstDraw Then
  Begin
    { Draw minutes line }
    Form1.Canvas.Pen.Color:=clGreen;
    Form1.Canvas.Pen.Width:=2;
    Form1.Canvas.MoveTo(Xo,Yo);
    Form1.Canvas.LineTo(Xm,Ym);
    OldMX:=Xm;
    OldMY:=Ym;

    { Draw hour line }
    Form1.Canvas.Pen.Color:=clMaroon;
    Form1.Canvas.Pen.Width:=3;
    Form1.Canvas.MoveTo(Xo,Yo);
    Form1.Canvas.LineTo(Xh,Yh);
    OldHX:=Xh;
    OldHY:=Yh;
  End;

  { Refresh minute new position }
  If (OldMX <> Xm) Or (OldMY <> Ym) Then
  Begin
    { Erase previous one }
    Form1.Canvas.Pen.Color:=clGreen;
    Form1.Canvas.Pen.Width:=2;
    Form1.Canvas.MoveTo(Xo,Yo);
    Form1.Canvas.LineTo(OldMX,OldMY);

    { Draw new line }
    Form1.Canvas.MoveTo(Xo,Yo);
    Form1.Canvas.LineTo(Xm,Ym);
    OldMX:=Xm;
    OldMY:=Ym;
  End;

  { Refresh hour new position }
  If (OldHX <> Xh) Or (OldHY <> Yh) Then
  Begin
    { Erase previous one }
    Form1.Canvas.Pen.Color:=clMaroon;
    Form1.Canvas.Pen.Width:=3;
    Form1.Canvas.MoveTo(Xo,Yo);
    Form1.Canvas.LineTo(OldHX,OldHY);

    { Draw new line }
    Form1.Canvas.MoveTo(Xo,Yo);
    Form1.Canvas.LineTo(Xh,Yh);
    OldHX:=Xh;
    OldHY:=Yh;
  End;
End;

procedure TForm1.Timer1Timer(Sender: TObject);
Begin
  UpDateClock(Self);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FirstDraw:=True;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  FirstDraw:=True;
  ClockFrame(Self);
  UpDateClock(Self);
  FirstDraw:=False;
end;

end.
Tomado de : Create graphical analog clock dynamically

Espero sea útil :)

Nelson.

Ines Rodriguez 03-06-2015 05:04:59

nlsgarcia muchas gracias me sirvió demasiado tu código y me aclara muchas dudas ;) :) qP:-)
y ecfisa gracias :D


La franja horaria es GMT +2. Ahora son las 16:24:09.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi