Membuat jam digital di Delphi sangatlah mudah. Lalu bagaimana jika kita ingin membuat jam analog? Ikuti tutorial berikut ini!
Aplikasi yang akan kita buat, hampir mirip seperti Jam pada Windows. Hasilnya akan jadi seperti ini
Buat sebuah proyek baru pada Delphi
Buat variabel berikut di atas implementation (di bawah nama form)
i:byte;
Diameter:integer;
Angka, JariJam, JariMenit, JariDetik, TebalGaris, UkuranHuruf : byte;
Diameter:integer;
Angka, JariJam, JariMenit, JariDetik, TebalGaris, UkuranHuruf : byte;
Karena angka akan dibuat secara otomatis, tambahkan unit StdCtrls pada uses (di bawah interface). Sehingga kita bisa menggunakan komponen TLabel dan konntrol standar Delphi lainnya
Tambahkan skrip/kode berikut pada event onCreate dari form
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}
{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);
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);
Buat prosedur GerakJarumJam seperti ini :
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}
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)));
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)));
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;
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;
Tambahkan sebuah Timer dan masukkan skrip/kode berikut pada event onTimer dari Timer1
GerakJarumJam; {memanggil procedure GerakJarumJam}
Jalankan aplikasi dengan menekan tombol F9
Adapun kode selengkapnya adalah sebagai berikut
unit UJam;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
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;
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;
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}
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)));
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)));
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;
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;
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}
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;
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.
Catatan :
Anda dapat menambahkan PopUp menu untuk menutup aplikasi. Anda juga dapat mengembangkannya menjadi sebuah aplikasi yang lebih kompleks lagi
Selamat mencoba!!
Anda dapat menambahkan PopUp menu untuk menutup aplikasi. Anda juga dapat mengembangkannya menjadi sebuah aplikasi yang lebih kompleks lagi
Selamat mencoba!!
Tidak ada komentar:
Posting Komentar