Advertisement
jpfassis

Relógio Analógico - Delphi

Apr 1st, 2020
990
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 3.73 KB | None | 0 0
  1. unit Unit2;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, GraphUtil, Controls, Forms,
  7.   Dialogs, ExtCtrls;
  8.  
  9. type
  10.  
  11. TForm1 = class(TForm)
  12. Timer1: TTimer;
  13. procedure Timer1Timer(Sender: TObject);
  14. procedure FormPaint(Sender: TObject);
  15. procedure FormCreate(Sender: TObject);
  16. procedure FormResize(Sender: TObject);
  17. private
  18. Hour, Minute, Second:  Word; {hora corrente}
  19. XCenter, YCenter, Radius: Integer; {tamanho atual do formulário}
  20.  
  21. public
  22. procedure DrawHand (XCenter, YCenter, Radius,
  23. BackRadius: Integer; Angle: Real);
  24. end;
  25.  
  26. var
  27. Form1: TForm1;
  28. implementation
  29. {$R *.DFM}
  30. // Evento OnTimer do componente Timer
  31. procedure TForm1.Timer1Timer(Sender: TObject);
  32. var
  33. HSec: Word; {valor temporário, não utilizado}
  34. begin
  35. {obtém a hora do sistema}
  36. DecodeTime (Time, Hour, Minute, Second, HSec);
  37. Refresh;
  38. end;
  39.  
  40. // Evento OnPaint do componente Form
  41. procedure TForm1.FormPaint(Sender: TObject);
  42. var
  43. Angle: Real;
  44. I, X, Y, Size: Integer;
  45. begin
  46. {calcula o centro do formulário}
  47. XCenter := ClientWidth div 2;
  48. YCenter := ClientHeight div 2;
  49. if XCenter <> YCenter then
  50. Radius := YCenter - 10
  51. else
  52. Radius := XCenter - 10;
  53.  
  54. {0. Desenha Circulo Fundo do Relogio}
  55. Canvas.Pen.Width := 8;
  56. //Canvas.Brush.Color := RGB(178, 162, 159);
  57. //GradientFillCanvas(Canvas,RGB(178, 162, 159), RGB(178, 162, 255), nil, gdVertical);
  58. Canvas.Pen.Color := $390071;
  59. Canvas.Brush.Color := $20003F;
  60. //Canvas.Brush.Style := bsCross;
  61. //Canvas.Brush.Style := bsClear;
  62. Canvas.Ellipse (XCenter-Radius-3, YCenter-Radius-3,  XCenter+Radius+3,  YCenter+Radius+3);
  63.  
  64.  
  65. {0. Desenha o marcador de Minutos}
  66. Radius := YCenter - 28;
  67. Canvas.Pen.Width := 1;
  68. Canvas.Pen.Color := $79777E;
  69. Canvas.Brush.Color := $79777E;
  70. Canvas.Brush.Style := bsClear;
  71. //Size := Radius div 200 + 1;
  72. Size := 1;
  73.  
  74. for I := 0 to 59 do
  75. begin
  76. Angle := 2 * Pi * I / 60;
  77. X := XCenter - Round (Radius * Cos (Angle));
  78. Y := YCenter - Round (Radius * Sin (Angle));
  79. Canvas.Ellipse (X - Size, Y - Size, X +
  80. Size, Y + Size);
  81. end;
  82.  
  83. {0.1 Desenha o marcador de horas}
  84. Canvas.Pen.Color := $894563;//$6B182E;
  85. Canvas.Brush.Color := $20003F;//$894563;
  86. Canvas.Font.Size:=9;
  87. Canvas.Font.Color:=$894563;
  88. Canvas.Font.Style:=[fsbold];
  89. Size := Radius div 50 + 1;
  90. for I := 1 to 12 do
  91. begin
  92. Angle :=(2 * Pi * I / 12) * -1;
  93. X := XCenter - Round (Radius * Sin (Angle));
  94. Y := YCenter - Round (Radius * Cos (Angle));
  95. Canvas.TextOut(X-2,Y-2,inttostr(I));
  96.  
  97. //Canvas.Ellipse (X - Size, Y - Size, X +
  98. //Size, Y + Size);
  99. end;
  100.  
  101.  
  102. {1. Desenha o ponteiro dos minutos}
  103. Canvas.Pen.Width := 2;
  104. Canvas.Pen.Color := $C4C0C8;
  105. Angle := 2 * Pi * Minute / 60;
  106. DrawHand (XCenter, YCenter, Radius * 90 div 100, 0, Angle);
  107.  
  108. {2. Desenha o ponteiro das horas: percentual dos minutos adicionado à hora para mover o ponteiro suavemente}
  109. Canvas.Pen.Width := 6;
  110. Canvas.Pen.Color := $C4C0C8;
  111. Angle := 2 * Pi * (Hour + Minute / 60) / 12;
  112. DrawHand (XCenter, YCenter,
  113. Radius * 75 div 100, 0, Angle);
  114.  
  115. {3. Desenha o ponteiro dos segundos}
  116. Canvas.Pen.Width := 1;
  117. Canvas.Pen.Color := $8000FF;
  118. Angle := 2 * Pi * Second / 60;
  119. DrawHand (XCenter, YCenter, Radius* 90 div 100,
  120. Radius * 20 div 100, Angle);
  121. end;
  122.  
  123. procedure TForm1.DrawHand (XCenter, YCenter,
  124. Radius, BackRadius: Integer; Angle: Real);
  125. begin
  126. Angle := (Angle + 3*Pi/2);
  127. Canvas.MoveTo (
  128. XCenter - Round (BackRadius * Cos (Angle)),
  129. YCenter - Round (BackRadius * Sin (Angle)));
  130. Canvas.LineTo (
  131. XCenter + Round (Radius * Cos (Angle)),
  132. YCenter + Round (Radius * Sin (Angle)));
  133. end;
  134.  
  135. // Evento OnCreate do Form
  136. procedure TForm1.FormCreate(Sender: TObject);
  137. begin
  138. {lê as horas antes do formulário ser exibido}
  139. Timer1Timer (self);
  140. end;
  141.  
  142. // Evento onresize do Form
  143. procedure TForm1.FormResize(Sender: TObject);
  144. begin
  145. Refresh;
  146. end;
  147.  
  148. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement