MODUL V
APLIKASI JAM DIGITAL DAN ANALOG
A. DESAIN FORM
Dengan menggunakan komponen MainMenu, StaticText serta Timer dan PaintBox, buatlah desain form seperti dibawah ini:
Gambar 5.1. Desain Form Jam.
Susunan menu sebagai berikut :
Tampilan Set Help
Nama Komponen Propert Nilai
Form1 Caption Jam Jaman...
MainMenu1.Analog1 Caption &Analog MainMenu1.Digital1 Caption
Checked &DigitalTrue MainMenu1.Jalan1 Caption
Checked &JalanTrue MainMenu1.Berhenti1 Caption &Berhenti MainMenu1.Tentang1 Caption &Tentang StaticText1 Name
Font.Size Font.Name
lblJAM 72 Garamond
Timer1 Interval 100
PaintBox1
B. SOURCE CODE
xjam,yjam,xmen,ymen,xdet,ydet : integer; procedure JamAnalog(Sender : TObject); procedure JamDigital(Sender : TObject); procedure BingkaiJam;
Kemudian anda ketik isi prosedur tersebut dibagian implementation:
procedure TForm1.JamAnalog(Sender : TObject);
Var AmpJam,AmpMen,AmpDet,Jam,Men,Det,Det100 : word; Begin
// Gambar Jam:
SetMapMode(paintbox1.Canvas.Handle, MM_LOMETRIC);
SetViewPortOrgEx(PaintBox1.Canvas.Handle, PaintBox1.Width div 2, PaintBox1.Height div 2, nil);
If (PaintBox1.Height<PaintBox1.Width) Then AmpDet := PaintBox1.Height div 2 -10 Else
AmpDet := PaintBox1.Width div 2 -10; // Set Panjang Jarum Jam,Menit, dan Detk AmpDet := AmpDet*3 div 2;
AmpMen := AmpDet-20; AmpJam := AmpMen-30;
DecodeTime(Time,Jam,Men,Det,Det100); // catat waktu ini With PaintBox1.Canvas DO
Begin
Pen.Color := clBtnFace;
MoveTo(0,0); LineTo(xdet,ydet); MoveTo(0,0); LineTo(xmen,ymen); MoveTo(0,0); LineTo(xjam,yjam);
xdet := Round(AmpDet*cos(DegToRad(90-det*6))); ydet := Round(AmpDet*sin(DegToRad(90-det*6))); xmen := Round(AmpMen*cos(DegToRad(90-men*6))); ymen := Round(AmpMen*sin(DegToRad(90-men*6))); xJam := Round(AmpJam*cos(DegToRad(90-jam*30))); yJam := Round(AmpJam*sin(DegToRad(90-jam*30))); // Gambar Jarum Detk:
lblJam.Capton := TIMEtoSTR(Time); End;
procedure TForm1.BingkaiJam; Var Amp,Amp1,i :integer; Begin
// Gambar Jam:
SetViewPortOrgEx(PaintBox1.Canvas.Handle, PaintBox1.Width div 2, PaintBox1.Height div 2, nil);
If (PaintBox1.Height<PaintBox1.Width) Then Amp := PaintBox1.Height div 2 -10
Else
Amp := PaintBox1.Width div 2 -10; // Set Panjang Jarum Jam,Menit,Detk: Amp := Amp*3 div 2;
Amp1 := Amp - 10; For i:=0 to 60 Do Begin
If (i mod 5 )=0 Then PaintBox1.Canvas.Pen.Color := clRed Else PaintBox1.Canvas.Pen.Color := clBlack;
PaintBox1.Canvas.MoveTo(Round(Amp*cos(i/30*pi)),Round(Amp*sin(i/30*pi))); PaintBox1.Canvas.LineTo(Round(Amp*cos(i/30*pi)),Round(Amp*sin(i/30*pi))); End;
End;
Sehingga kode lengkapnya terlihat sebagai berikut:
unit Ujam;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, ExtCtrls, Math;
type
TForm1 = class(TForm) MainMenu1: TMainMenu; Tampilan1: TMenuItem; Analog1: TMenuItem; Berhenti1: TMenuItem; Tentang1: TMenuItem; Timer1: TTimer; PaintBox1: TPaintBox; lblJAM: TStaticText;
procedure Analog1Click(Sender: TObject); procedure Digital1Click(Sender: TObject); procedure FormActivate(Sender: TObject); procedure Selesai1Click(Sender: TObject); procedure Jalan1Click(Sender: TObject); procedure Berhenti1Click(Sender: TObject); procedure Tentang1Click(Sender: TObject); private
{ Private declarations }
public
procedure TForm1.JamAnalog(Sender : TObject);
Var AmpJam,AmpMen,AmpDet,Jam,Men,Det,Det100 : word; Begin
// Gambar Jam:
SetMapMode(paintbox1.Canvas.Handle, MM_LOMETRIC);
SetViewPortOrgEx(PaintBox1.Canvas.Handle, PaintBox1.Width div 2, PaintBox1.Height div 2, nil);
If (PaintBox1.Height<PaintBox1.Width) Then AmpDet := PaintBox1.Height div 2 -10 Else
AmpDet := PaintBox1.Width div 2 -10; // Set Panjang Jarum Jam,Menit, dan Detk AmpDet := AmpDet*3 div 2;
AmpMen := AmpDet-20; AmpJam := AmpMen-30;
DecodeTime(Time,Jam,Men,Det,Det100); // catat waktu ini With PaintBox1.Canvas DO
Begin
Pen.Color := clBtnFace;
MoveTo(0,0); LineTo(xdet,ydet); MoveTo(0,0); LineTo(xmen,ymen); MoveTo(0,0); LineTo(xjam,yjam);
xdet := Round(AmpDet*cos(DegToRad(90-det*6))); ydet := Round(AmpDet*sin(DegToRad(90-det*6))); xmen := Round(AmpMen*cos(DegToRad(90-men*6))); ymen := Round(AmpMen*sin(DegToRad(90-men*6))); xJam := Round(AmpJam*cos(DegToRad(90-jam*30))); yJam := Round(AmpJam*sin(DegToRad(90-jam*30))); // Gambar Jarum Detk:
lblJam.Capton := TIMEtoSTR(Time); End;
Var Amp,Amp1,i :integer; Begin
// Gambar Jam:
SetMapMode(paintbox1.Canvas.Handle, MM_LOMETRIC);
SetViewPortOrgEx(PaintBox1.Canvas.Handle, PaintBox1.Width div 2, PaintBox1.Height div 2, nil);
If (PaintBox1.Height<PaintBox1.Width) Then Amp := PaintBox1.Height div 2 -10
Else
Amp := PaintBox1.Width div 2 -10; // Set Panjang Jarum Jam,Menit,Detk: Amp := Amp*3 div 2;
Amp1 := Amp - 10; For i:=0 to 60 Do Begin
If (i mod 5 )=0 Then PaintBox1.Canvas.Pen.Color := clRed Else PaintBox1.Canvas.Pen.Color := clBlack;
PaintBox1.Canvas.MoveTo(Round(Amp*cos(i/30*pi)),Round(Amp*sin(i/30*pi))); PaintBox1.Canvas.LineTo(Round(Amp*cos(i/30*pi)),Round(Amp*sin(i/30*pi))); End;
End;
procedure TForm1.Analog1Click(Sender: TObject); begin
Analog1.Checked := True; Digital1.Checked := False; lbljam.visible := false; Capton := 'Jam Analog'; PaintBox1.Visible := True; Applicaton.ProcessMessages; BingkaiJam;
Timer1.OnTimer := JamAnalog;
end;
procedure TForm1.Digital1Click(Sender: TObject); begin
Digital1.Checked := True; Analog1.Checked := False; lbljam.visible := True; Capton := 'Jam Digital'; PaintBox1.Visible := False; Timer1.OnTimer := JamDigital;
end;
procedure TForm1.FormActivate(Sender: TObject); begin
Timer1.OnTimer := JamDigital;
end;
procedure TForm1.Selesai1Click(Sender: TObject); begin
Close;
procedure TForm1.Jalan1Click(Sender: TObject); begin
Jalan1.Checked := True; Berhent1.Checked := False; Timer1.Enabled := True;
end;
procedure TForm1.Berhenti1Click(Sender: TObject); begin
Jalan1.Checked := False; Berhent1.Checked := True; Timer1.Enabled := False;
end;
procedure TForm1.Tentang1Click(Sender: TObject); begin
Applicaton.MessageBox('Buatan Orang Muslim !','Jam...',64);
end;