08 August 2011

Membuat Jam Analog dengan Delphi 7


unit UJam;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
procedure GerakJarumJam;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
i:byte;
Diameter:integer;
Angka, JariJam, JariMenit, JariDetik, TebalGaris, UkuranHuruf : byte;
implementation
{$R *.dfm}
procedure TForm1.GerakJarumJam;
var
jam,menit,detik,milidetik:word;
begin
self.Refresh; //merefresh form
DecodeTime(Now,jam,menit,detik,milidetik);
{mendekode atau menjabarkan waktu sekarang menjadi jam, menit, detik dan milidetik}
//Untuk jarum detik
Canvas.Pen.Color:=clRed;
Canvas.Pen.Width:=2;
Canvas.MoveTo(Diameter div 2,Diameter div 2);
Canvas.LineTo(
(Diameter div 2)-round(
jariDetik*sin(-detik*pi/30)),
(Diameter div 2)-round(
jariDetik*cos(-detik*pi/30)));
// Untuk jarum menit
Canvas.Pen.Color:=clBlack;
Canvas.Pen.Width:=3;
Canvas.MoveTo(Diameter div 2,Diameter div 2);
Canvas.LineTo(
(Diameter div 2)-round(
jariMenit*sin(-menit*pi/30-detik*pi/1800)),
(Diameter div 2)-round(
jariMenit*cos(-menit*pi/30-detik*pi/1800)));
// Untuk jarum jam
Canvas.Pen.Color:=clBlack;
Canvas.Pen.Width:=4;
Canvas.MoveTo(Diameter div 2,Diameter div 2);
Canvas.LineTo(
(Diameter div 2)-round(
jariJam*sin(-jam*pi/6-menit*pi/360)),
(Diameter div 2)-round(
jariJam*cos(-jam*pi/6-menit*pi/360)));
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
GerakJarumJam; {memanggil procedure GerakJarumJam}
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Self.BorderStyle:=bsNone; //Agar form tidak memiliki border
{Setting untuk ukuran jam}
ClientWidth := 150; {menentukan lebar form}
ClientHeight:= ClientWidth; {menentukan tinggi form}
Diameter := ClientWidth; {menentukan diameter jam}
jariJam := 45; {menentukan panjang jarum jam}
jariMenit := 60; {menentukan panjang jarum menit}
JariDetik := 70; {menentukan panjang jarum detik}
//Tentukan posisi angka
for i:=1 to 12 do
{diulang sebanyak angka jam yaitu 12}
begin
TLabel.Create(Self).Name:=’angka’+IntToStr(i);
with TLabel(FindComponent(‘angka’+IntToStr(i))) do
begin
Height:=10;
Width:=15;
Parent:=Self;
Font.Size:=6;
Font.Color:=clBlack;
Font.Style:=[fsBold];
Alignment:=taCenter;
Caption:=IntToStr(i);
Transparent:=true;
Left:=((Diameter-Width) div 2)-round((jariDetik-6)*sin(-i*pi/6));
Top:=((Diameter-Height) div 2)-round((jariDetik-6)*cos(-i*pi/6));
end;
end;
//Buat form jadi bulat
SetWindowRgn(self.Handle, CreateEllipticRgn(0,0,ClientWidth,ClientHeight), true);
end;
end.

0 komentar: