Pengertian Class dan Object
Pengertian Class
Class merupakan tipe data yang didefinisikan oleh user, yang mempunyai prilaku dan beberapa operasi (behavior). Sebuah class dapat mempuyai beberapa data internal (data abstraction=penyembunyian data sehingga user tidak dapat mengaksesnya) dan beberapa method dalam format procedure atau function dan biasanya menjelaskan karakteristik umum dan prilaku beberapa object yang sama. Contoh suatu class adalah sebagai berikut:
Class yang telah didefinsikan merupakan class TManusia. Class TManusia mempunyai attribut dan operasi. Tanda (-),(+),(#) mempunyai arti sebagai level akses dari class:
• Level private (-), berarti setiap atribut atau operasi hanya bisa di akses oleh class yang bersangkutan saja.
• Level protected (#), berarti setiap atribut atau operasi dapat diakses oleh class itu sendiri atau dapat pula di akses oleh class turunannya.
• Level public (+), berarti setaip atribut atau operasi dapat diakses oleh semua class dan diluar class yang bersangkutan.
Deklarasi kelas dituliskan setelah kata kunci “interface”, dan definisi clas tersebut ditulis setelah kata kunci “implementation”.
Contoh dalam program Delphi adalah sebagai berikut:
unit manusia; interface uses SysUtils; type
TManusia=class private
{Data field Atribut} FNama: string;
FWarnaKulit: string; FUsia:integer;
FKelamin:boolean;
function GetLabelKelamin: string;
procedure SetWarnaKulit(const Value: string); protected
public
{Methods} procedure Makan; procedure Berjalan; procedure Berlari;
property Nama: string read FNama write FNama;
property Usia: integer read FUsia write FUsia;
property Kelamin: boolean read FKelamin write FKelamin; property LabelKelamin: string read GetLabelKelamin; end;
implementation { Manusia }
procedure TManusia.Berjalan; begin
writeln(Nama+ ' sedang berjalan...!'); end;
procedure TManusia.Berlari; begin
writeln(Nama+ ' sedang berlari...!'); end;
function TManusia.GetLabelKelamin: string; var
s:string; begin
if FKelamin then s:='Pria' else
s:='Wanita'; Result:=s; end;
procedure TManusia.Makan; begin
writeln(Nama+' sedang makan duren monthong...!'); end;
procedure TManusia.SetWarnaKulit(const Value: string); begin
FWarnaKulit := Value; end;
end.
Pengertian Object
Object adalah instansi dari class atau variable dari tipe data yang telah didefinsikan oleh class. Object adalah entitas yang actual, ketika program dijalankan object mengambil memori untuk dirinya. Hubungan antara class dan object dapat di samakan dengan hubungan antara tipe data dan variable. Contoh object yang menggunakan class TManusia:
program Project2; {$APPTYPE CONSOLE} uses
SysUtils,
manusia in 'manusia.pas'; var
Mince: TManusia; Rina: TManusia; begin
{ TODO -oUser -cConsole Main : Insert code here } Otong:=TManusia.Create;
Mince:=TManusia.Create; Rina:=TManusia.Create; Otong.Nama:='Otong'; Mince.Nama:='Mince'; Rina.Nama:='Rina';
//writeln('Nama : '+ Otong.FNama); FNama tidak dapat diakses diluar class (private)
Otong.Berjalan; Mince.Makan; Rina.Berlari; readln;
Otong.Free; Mince.Free; Rina.Free; end.
Output:
Otong sedang berjalan...!
Mince sedang makan duren monthong...! Rina sedang berlari...!
Object Otong,Mince dan Rina menginstansikan dari class TManusia. Untuk dapat menggunakan object-object tersebut, terlebih dahulu harus mengambil memori dengan mengoperasi fungsi “Create”. Kemudian dari object tersebut dapat diakses operasi maupun atribut yang mempunyai level “public”. Setelah object digunakan, diharuskan melepas memori yang telah digunakan oleh masing-masing object dengan perintah “Free”,
Catatan: Operasi Create dan Free sudah didefinisikan oleh class TObject yang secara otomatis di class TManusia merupakan turunan dari class TObject oleh Delphi sendiri.
Method
Method dapat disamakan dengan prosedur dan fungsi (procedure and function) yang memiliki parameter lengkap dan mengacu pada object itu sendiri.
Constructor
Destructor
Destructor merupakan kebalikan dari constructor, biasanya digunakan untuk membebaskan memori yang telah digunakan olah anggota class. Destructor merupakan method special yang secara otomatis dipanggil sesaat sebelum object dihancurkan. Contoh penggunaan constructor dan destructor pada class TManusia adalah sebagai berikut:
...
protected public
constructor Create(N:String); destructor Destroy;override; procedure Makan;
procedure Berjalan; procedure Berlari; ...
Implementasi program:
...
constructor TManusia.Create(N: String); begin
inherited Create; Nama:=N;
end;
destructor TManusia.Destroy; begin
inherited; end;
...
Penggunaan class oleh object:
Otong:=TManusia.Create('Otong'); Mince:=TManusia.Create('Mince'); Rina:=TManusia.Create('Rina');
Self
Self merupakan pointer yang menunjuk instansi dari class di dalam memori dan sebagai parameter ekstra tersembunyi yang dibutuhkan saat pembuatan beberapa object pada class yang sama. Contoh penggunaan Self:
unit MyRect; interface type
TMyRect = class private
Left : Integer; Top : Integer; Right : Integer; Bottom : Integer; Text : string; public
procedure SetRect(ALeft, ATop, ARight, ABottom : Integer); constructor Create;
constructor CreateVal(ALeft, ATop, ARight, ABottom : Integer); destructor Destroy; override;
end;
implementation { TMyRect }
constructor TMyRect.Create; begin
Left:=0;Right:=0; Top:=0;Bottom:=0; Text:='';
end;
constructor TMyRect.CreateVal(ALeft, ATop, ARight, ABottom: Integer); begin
Left:=Aleft;Right:=ARight; Top:=Atop;Bottom:=ABottom; end;
destructor TMyRect.Destroy; begin
inherited; end;
function TMyRect.GetHeight: Integer; begin
Result:=Bottom-Top; end;
function TMyRect.GetWidth: Integer; begin
Result:=Self.Right-Self.Left; end;
procedure TMyRect.SetRect(ALeft, ATop, ARight, ABottom: Integer); begin
Left:=Aleft;Right:=ARight; Top:=Atop;Bottom:=ABottom; end;
end.
Overloaded
Pascal object mendukung adanya overload function dan method, yaitu kita dapat membuat lebih dari satu suatu fungsi dengan nama yang sama tetapi mempunyai parameter yang berbeda. Aturan dalam pembuatan overload function atau method adalah:
• Setiap penulisan dari method harus diikuti dengan kata kunci “overload”.
• Perbedaan harus dari jumlah atau tipe parameternya atau keduanya. Tipe pengembalian tidak dapat digunakan untuk membedakan antar method.
Contoh:
uses sysutils; type
TDate = class private
FDate: TDatetime; public
procedure SetValue(y,m,d:integer);overload; procedure SetValue(NewDate:Tdatetime);overload; function GetValue:TDatetime;
end;
implementation { TDate }
procedure TDate.SetValue(y, m, d: integer); begin
FDate:=EncodeDate(y,m,d); end;
function TDate.GetValue: TDatetime; begin
Result:=FDate; end;
procedure TDate.SetValue(NewDate: Tdatetime); begin
FDate:=NewDate; end;
end.
Encapsulation
Penjelasan encapsulation dapat diartikan dengan penyembuyian data oleh class yang bersangkutan dan kita tidak dapat mengaksesnya secara langsung, tetapi dengan perantara interface yang dibuat dengan method atau property yang mempunyai level public.
unit AirplaneU;
procedure TakeOff(Dir : Integer); virtual; procedure Land; virtual;
public
constructor Create(AName : string; AKind : Integer = Airliner); function SendMessage(Msg : Integer; var Response : string; Spd : Integer; Dir : Integer; Alt : Integer) : Boolean;
function GetStatus(var StatusString : string) : Integer; overload; virtual;
function GetStatus : Integer; overload; function GetSpeed : Integer;
constructor TAirplane.Create(AName : string; AKind : Integer); begin
procedure TAirplane.TakeOff(Dir : Integer); begin
Heading := Dir; Status := TakingOff; end;
procedure TAirplane.Land; begin
Result := False; end
else Land; MsgReport : begin
GetStatus(Response); Exit;
end; end;
if Result then
Response := Name + ': Roger.'; end;
function TAirplane.GetStatus(var StatusString : string) : Integer; begin
StatusString := Format('%s, Altitude: %d, Heading: %d, ' + 'Speed: %d', [Name, Altitude, Heading, Speed]);
Result := Status; end;
function TAirplane.GetStatus : Integer; begin
Result := Status; end;
function TAirplane.GetSpeed : Integer; begin
Result := Speed; end;
function TAirplane.GetHeading : Integer; begin
Result := Heading; end;
function TAirplane.GetAltitude : Integer; begin
Result := Altitude; end;
function TAirplane.GetName : string; begin
Result := Name; end;
end.
Inheritance
akses “protected” atau “public”. Keyword “virtual” merupakan method dinamis yang mengarahkan pointer ke virtual method table (VMT). Contoh:
TMilitaryPlane = class(TAirplane) private
TheMission : string; Status:string;
constructor Create(AName : string; AType : Integer);
function GetStatus(var StatusString : string) : Integer; override; protected
procedure TakeOff(Dir : Integer); override; procedure Land; override;
public
function GetStatusString:string; procedure Attack; virtual;
procedure SetMission(Misi:string); virtual; end;
TCommercialPlane= class(TAirplane) private
Passenger: integer; Destination:string; Status:string;
function GetStatus(var StatusString : string) : Integer; override; protected
function GetPassenger:integer; public
procedure GoPlane;virtual;
function GetStatusString:string;
procedure SetPassenger(P:integer);virtual; procedure SetDestination(Dest:string);virtual; end;
{ TMilitaryPlane }
procedure TMilitaryPlane.Attack; begin
Status:=Format('%s attack %s',[Name,TheMission]); end;
constructor TMilitaryPlane.Create(AName: string; AType: Integer); begin
inherited Create(AName,Atype); end;
function TMilitaryPlane.GetStatus(var StatusString: string): Integer; var
s:string; i:integer; begin
i:=inherited GetStatus(s); s:=s+','+StatusString; Result:=i;
end;
function TMilitaryPlane.GetStatusString: string; begin
procedure TMilitaryPlane.Land; begin
inherited; end;
procedure TMilitaryPlane.SetMission(Misi:String); begin
TheMission:=Misi; end;
procedure TMilitaryPlane.TakeOff(Dir: Integer); begin
inherited; end;
{ TCommercialPlane }
function TCommercialPlane.GetPassenger: integer; begin
result:=Passenger; end;
function TCommercialPlane.GetStatus(var StatusString: string): Integer; begin
result:=inherited GetStatus(Status); end;
function TCommercialPlane.GetStatusString: string; begin
Result:=Status; end;
procedure TCommercialPlane.GoPlane; begin
Status:=Status+Format('I''ve take %d passenger to %s', [Passenger,Destination]);
end;
procedure TCommercialPlane.SetDestination(Dest: string); begin
Destination:=Dest; end;
procedure TCommercialPlane.SetPassenger(P: integer); begin
Passenger:=p; end;
Overriding Method
Overriding merupakan penggantian method dari class dasar oleh class turunannya.
Keyword is dan as
program Project1; {$APPTYPE CONSOLE} uses
SysUtils,
MyRect in 'MyRect.pas',
AirplaneU in 'AirplaneU.pas'; var
Plane: TAirplane; F15:TMilitaryPlane; B555: TCommercialPlane; begin
{ TODO -oUser -cConsole Main : Insert code here } B555:=TCommercialPlane.Create('Boing 555');
B555.SetPassenger(10);
b555.SetDestination('Marocco'); F15:=TMilitaryPlane.Create('F15'); F15.SetMission('White House'); Plane:=B555;
if Plane is TMilitaryPlane then begin
(Plane as TMilitaryPlane).Attack;
writeln((Plane as TMilitaryPlane).GetStatusString); end
else begin
(Plane as TCommercialPlane).GoPlane;
writeln((Plane as TCommercialPlane).GetStatusString); end;
Plane:=F15;
if Plane is TMilitaryPlane then begin
(Plane as TMilitaryPlane).Attack;
writeln((Plane as TMilitaryPlane).GetStatusString); end
else begin
(Plane as TCommercialPlane).GoPlane;
writeln((Plane as TCommercialPlane).GetStatusString); end;
F15.Free; B555.Free; readln; end.
Output:
I've take 10 passenger to Marocco F15 attack White House
Sumber Pustaka:
Marco Cantù, 2001, Mastering Delphi 6, Sybex Inc, Alameda, San Francisco.
Integrated Developer Environment (IDE)
Delphi 7.0
IDE Delphi
IDE Delphi mempunyai beberapa bagian utama yaitu:
• Main Menu dan Toolbar
• Component palette
• Form Designer
• Code Editor
• Object Inspector
• Code Explorer
• Project Manager
Project merupakan file yang mengumpulkan file-file yang bekerja sama dalam membentuk aplikasi (exe) atau dynamic link library (dll) yang berdiri sendiri.
Project Group merupakan kuumpulan dari beberapa project.
Pada saat membuat project baru, Delphi membuat file minimal empat buah yang terdiri dari:
• main form unit
• main form resource file
• project resource file
Tipe-tipe file yang digunakan oleh Delphi
Extension Description.pas The Object Pascal source files. There will be one for each unit, as well as any other source files that you add to the project.
.dfm The form file. It is a description of the form and all its components. Each form has its own .dfm file.
.dsk The project desktop file. This file keeps track of the way the desktop appeared when you last saved (or closed) the project. All the open windows' sizes and positions are saved so that when you reopen the project it looks the same as you left it. This file is created only if you turn on the option to save your desktop (Environment Options dialog box).
.dof The project options file. This file contains the project options as set in the Project Options dialog.
.exe The final executable program.
.cfg The project configuration file. This file primarily contains the current compiler and linker settings for the project.
.dcu The compiled binary object files. These are the files that the compiler produces when it compiles your Object Pascal units.
.dpr The project source file.
.res The compiled binary resource file.
Ilustrasi bagaimana Delphi mengkompilasi source code dan menghubungkannya dengan form sehingga membentuk file executable.1
1 Marco Cantù, 2001,
Contoh-contoh pembuatan aplikasi sederhana
Contoh #11. Desain sebuah form yang terdiri dari tujuh label, enam edit dan sebuah button.
2. Ubah properti Caption pada Label1 sampai Label7 dengan nama: Informasi Biaya, Kode, Rincian Biaya, Pendaftaran, Pendidikan, Ujian Lokal dan Total Biaya.
3. Ubah properti Name pada komponen button1 dengan nama: btnProses.
4. Ubah properti Name pada komponen Edit1 dampai Edit6 dengan nama: edKode, edDaftar, edDidik, edUjian dan edTotal.
5. Kosongkan property Text untuk semua komponen Edit.
6. Ubah properti Font pada Label1 (“Informasi Biaya”) menjadi Arial – Bold – 12. 7. Simpan File unit dengan nama FContoh1.pas dan file project PContoh1.dpr. Kode:
procedure TForm1.btnProsesClick(Sender: TObject); begin
if edKode.Text='OKP' then begin
edJurusan.Text:='Operator Komputer Praktis'; edDaftar.Text:='25000';
edDidik.Text:='550000'; edUjian.Text:='125000'; end
else if edKode.Text='KAP' then begin
edJurusan.Text:='Komputer Akuntansi & Perpajakan'; edDaftar.Text:='50000';
edDidik.Text:='750000'; edUjian.Text:='175000'; end
else if edKode.Text='AMP' then begin
edJurusan.Text:='Administrasi Manajemen & Perkantoran'; edDaftar.Text:='50000';
edDidik.Text:='750000'; edUjian.Text:='150000'; end
edJurusan.Text:='Program Intensive Terpadu'; edDaftar.Text:='25000';
edDidik.Text:='650000'; edUjian.Text:='125000'; end;
edTotal.Text:=inttostr(strtoint(edDaftar.Text)+ strtoint(edDidik.Text)+ strtoint(edUjian.Text));
end;
Contoh #2
1. hapus komponen label Kode dan edKode.
2. tambahkan komponen Group Box dan empat komponen RadioButton dalam komponen Group Box.
3. atur posisi dan ukuran komponen tersebut, ubah properti Caption GroupBox1 dengan Kode Jurusan.
4. Ubah property Caption komponen RadioButton1 sampai dengan RadioButton4 dengan: OKP, PIT, KAP, AMP.
Kode:
procedure TForm1.btnProsesClick(Sender: TObject); begin
if RadioButton1.Checked then begin
edJurusan.Text:='Operator Komputer Praktis'; edDaftar.Text:='25000';
edDidik.Text:='550000'; edUjian.Text:='125000'; end
else if RadioButton2.Checked then begin
edJurusan.Text:='Komputer Akuntansi & Perpajakan'; edDaftar.Text:='50000';
edDidik.Text:='750000'; edUjian.Text:='175000'; end
begin
edJurusan.Text:='Administrasi Manajemen & Perkantoran'; edDaftar.Text:='50000';
edDidik.Text:='750000'; edUjian.Text:='150000'; end
else begin
edJurusan.Text:='Program Intensive Terpadu'; edDaftar.Text:='25000';
edDidik.Text:='650000'; edUjian.Text:='125000'; end;
edTotal.Text:=inttostr(strtoint(edDaftar.Text)+ strtoint(edDidik.Text)+ strtoint(edUjian.Text));
end;
Contoh #3
1. Buat form yang terdiri dari Label, Memo, Button dan ComboBox.
2. Simpan nama file unit dengan FContoh3.pas dan file project dengan nama PContoh.dpr.
3. Ubah porperti Items komponen ComboBox1 dan ketik teks daftar pilihan Gemblonx, Combro, Asinan, Misro, Timus, pada jendela String List Editor, dan kosongkan property Text.
4. Ubah property Name ComboBox1 dengan nama cboMakanan
5. Ubah property Name dan Caption komponen Button1 dengan teks Keluar.
6. Ubah property Lines komponen Memo1 dan hapus teks Memo1 pada jendela String Editor List.
Kode:
procedure TForm1.KeluarClick(Sender: TObject); begin
Close; //Application.Terminate; end;
procedure TForm1.cboMakananChange(Sender: TObject); begin
Memo1.Lines.Clear;
Memo1.Lines.Add('KILAS INFO MAKAN:'); case cboMakanan.ItemIndex of
4: Memo1.Color:=clLime; end;
if cboMakanan.ItemIndex=0 then
Memo1.Lines.Add(cboMakanan.Text+' kesukaanku.') else if cboMakanan.ItemIndex=1 then
Memo1.Lines.Add(cboMakanan.Text+' favoritku.') else if cboMakanan.ItemIndex=2 then
Memo1.Lines.Add(cboMakanan.Text+' sayangku.') else if cboMakanan.ItemIndex=3 then
Memo1.Lines.Add(cboMakanan.Text+' manisku.') else
Memo1.Lines.Add(cboMakanan.Text+' idamanku.'); end;
Semua contoh dikutip dari:
MADCOMS, 2003, Pemrograman Borland Delphi 7 (Jilid 1), Andi Yogyakarta.
Sumber Pustaka:
Marco Cantù, 2001, Mastering Delphi 6, Sybex Inc, Alameda, San Francisco.
Class dan Object (Lanjutan)
Membuat Komponen secara dinamis
implementation uses stdctrls; {$R *.dfm}
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
btn:=TButton.Create(self); inc(btn_index);
btn.Name:='btn'+inttostr(btn_index); btn.Parent:=self;
btn.Left:=X; btn.Top:=Y;
btn.Width:=btn.Width+50;
btn.Caption:=Format('Button %d di [%d,%d]',[btn_index,X,Y]); end
else if Shift=[ssRight] then begin
if btn_index>0 then begin
Comp:=FindComponent('btn'+inttostr(btn_index)); (Comp as TButton).Free;
dec(btn_index); end;
end; end;
procedure TForm1.FormCreate(Sender: TObject); begin
btn_index:=0; end;
Contoh class TDate
unit FDateClass; interface
procedure SetDay(const Value: Integer); procedure SetMonth(const Value: Integer); procedure SetYear(const Value: Integer); public
constructor Create;overload;
procedure SetValue(NewDate:TDatetime);overload; function LeapYear: Boolean;
procedure Increase(Num: Integer=1); procedure Decrease(Num: Integer=1); function GetText:String;
property Year: Integer read GetYear write SetYear; property Month: Integer read GetMonth write SetMonth; property Day: Integer read GetDay write SetDay;
end;
implementation
uses SysUtils,DateUtils; { TDate }
constructor TDate.Create(y, m, d: integer); begin
FDate:=EncodeDate(y,m,d); end;
constructor TDate.Create; begin
FDate:=Date; end;
procedure TDate.Decrease(Num: Integer); begin
FDate:=FDate-Num; end;
function TDate.GetDay: Integer; begin
Result:=DayOf(FDate); end;
function TDate.GetMonth: Integer; begin
Result:=MonthOf(FDate); end;
function TDate.GetText: String; begin
result:=DateToStr(FDate); end;
function TDate.GetYear: Integer; begin
Result:=YearOf(FDate); end;
procedure TDate.Increase(Num: Integer); begin
FDate:=FDate+Num; end;
function TDate.LeapYear: Boolean; begin
Result:=IsInLeapYear(FDate); end;
FDate:=RecodeDay(FDate,Value); end;
procedure TDate.SetMonth(const Value: Integer); begin
FDate:=RecodeMonth(FDate,Value); end;
procedure TDate.SetValue(NewDate: TDatetime); begin
FDate:=NewDate; end;
procedure TDate.SetValue(y, m, d: integer); begin
FDate:=EncodeDate(y,m,d); end;
procedure TDate.SetYear(const Value: Integer); begin
FDate:=RecodeYear(FDate,Value); end;
end.
Program View Date
procedure TForm1.FormCreate(Sender: TObject);
begin
theDay:=TDate.Create(2006,1,27); LabelDate.Caption:=theDay.GetText; end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
theDay.Free; end;
procedure TForm1.btnIncreaseClick(Sender: TObject);
begin
theDay.Increase;
LabelDate.Caption:=theDay.GetText; end;
procedure TForm1.btnDecreaseClick(Sender: TObject); begin
theDay.Decrease;
LabelDate.Caption:=theDay.GetText; end;
procedure TForm1.btnAdd10Click(Sender: TObject); begin
theDay.Increase(10);
LabelDate.Caption:=theDay.GetText; end;
procedure TForm1.btnSub10Click(Sender: TObject); begin
LabelDate.Caption:=theDay.GetText; end;
procedure TForm1.btnLeapClick(Sender: TObject); begin
if theDay.LeapYear then LabelDate.Caption:='TRUE' else
LabelDate.Caption:='FALSE'; end;
Delphi’s Object Reference Model
Dalam OOP, mendeklarasi variable dari tipe class akan membuat instansi dari class tersebut (Object Reference Model). Variable tersebut, contohnya “theDay“, tidak punya nilai object, sedangkan variable tersebut memiliki reference atau pointer yang mengindikasi
lokasi memori dimana object disimpan. Masalahnya adalah pada saat mendeklarasikan variable. Kita tidak membuat object dalam memori. Sehingga kita harus menuliskannya secara manual.
theDay:=TDate.Create(2006,1,27);
Assigning Objects
Perhatikan contoh di bawah ini:procedure TForm1.btnTodayClick(Sender: TObject); var
NewDate: TDate; begin
NewDate:=TDate.Create; theDay:=NewDate;
LabelDate.Caption:=theDay.GetText; end;
Kode ini hanya akan mengcopy alamat memory dari NewData ke variable theData dan tidak mengcopy datanya. Sehingga hal ini menyebabkan terjadinya memory sampah yang tidak di kendalikan oleh object apapun karena belum dilepaskan. Maka cara yang terbaik adalah:
procedure TForm1.btnTodayClick(Sender: TObject); begin
theDay.Free;
theDay:=TDate.Create;
LabelDate.Caption:=theDay.GetText; end;
Polymorphism
Inherit (Menurunkan) dari Class yang ada
TNewDate=class(TDate) public
function GetText: string; end;
{ TNewDate }
Result:=FormatDateTime('dddddd',FDate); end;
Inheritance dan Kompatibilitas Tipe
interface
constructor TDog.Create; begin
FKind:='Dog'; end;
{ TAnimal }
constructor TAnimal.Create; begin
FKind:='Animal'; end;
function TAnimal.GetKind: string;
begin
Result:=FKind; end;
Override dan Definisi ulang Method
Untuk mendefinisi ulang method statis kita dapat menambahkan method baru di sub class dengan parameter yang sama, dan untuk method virtual dapat di tambahkan method baru dengan parameter yang sama dan diikuti kata kunci “override”.
procedure TForm1.FormCreate(Sender: TObject); begin
MyAnimal:=TAnimal.Create; end;
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
if MyANimal<>nil then begin
FreeAndNil(MyANimal); MyAnimal:=TAnimal.Create; end;
end;
procedure TForm1.RadioButton2Click(Sender: TObject);
begin
if MyANimal<>nil then begin
FreeAndNil(MyANimal); MyAnimal:=TDog.Create; end;
end;
procedure TForm1.Button1Click(Sender: TObject); begin
Label1.Caption:=MyAnimal.GetKind; end;
MyClass = class public
procedure One;virtual;
procedure Two; {static method} end;
MySubClass =class(MyClass) public
procedure One; override; procedure Two;
end;
procedure MySubClass.One; begin
Abstract Method
Method abstrak digunakan jika definisi dari method tersebut hanya dilakukan oleh subclass dari class yang bersangkutan.
interface
function Eat: string;virtual;abstract; private
function Voice: string;override; function Eat: string;virtual; end;
TCat = class (TAnimal) public
constructor Create;
function Voice: string;override; function Eat: string;virtual; end;
implementation { TDog }
constructor TDog.Create; begin
FKind:='Dog'; end;
function TDog.Eat: string; begin
result:=FKind+' is eating a bone.'; end;
function TDog.Voice: string; begin
result:='Arrfff'; end;
{ TAnimal }
constructor TAnimal.Create; begin
FKind:='Animal'; end;
function TAnimal.GetKind: string;
procedure TForm1.FormCreate(Sender: TObject);
begin
MyAnimal:=TCat.Create; end;
procedure
TForm1.RadioButton1Click(Sender: TObject);
begin
if MyANimal<>nil then begin
FreeAndNil(MyANimal); MyAnimal:=TCat.Create; end;
if MyANimal<>nil then begin
FreeAndNil(MyANimal); MyAnimal:=TDog.Create; end;
end;
begin
Result:=FKind; end;
{ TCat }
constructor TCat.Create; begin
FKind:='Cat'; end;
function TCat.Eat: string; begin
Result:=FKind+ ' is eating a fish.'; end;
function TCat.Voice: string; begin
Result:='Meeooooongg'; end;
Contoh #1 (ListBox)
1. Tambahkan komonen ListBox dalam form
2. Ubah property komponen ListBix dengan ketentuan:
a. Ubah property Items dan ktik daftar teks: MS-Word, Excel, Access, Power Point dan MS-Outlook.
b. Ubah property Name dengan lbProgram.
3. Tambahkan satu komponen ComboBox di sembarang tempat dalam form, dengan ketentuan properti sebagai berikut:
a. Ubah property Items dan ketik teks daftar piliha:
• Program Pengolah Kata: surat-surat, buku-buku, makalah, paper, laporan,skripsi dll.
• Program Pengolah data dalam bentuk tabel, perhitungan angka/rumus,grafik dan pengolah data dalam bentuk database, dll.
• Program Pengolah database. Untuk membuat lembar kerja form interaktif, input data, laporan dalambentuk tabel dll.
• Program Presentasi data & gambar, biasa digunakan sebagai alat presentasi dengan OHP di dalam rapat/seminar, dll.
• Program Pengolah data dalam bentuk pengiriman surat/e-mail dalam suatu jaringan komputer intranet/internet.
b. Kosongkan property Text, ubah Name menjadi cboInfo dan Visible menjadi FALSE 4. Klik dua kali komponen lbProgram dan ketik kode sebagai berikut:
procedure TForm1.lbProgramClick(Sender: TObject); begin
Memo1.Clear;
0: Memo1.Color:=clRed; 1: Memo1.Color:=clYellow; 2: Memo1.Color:=clGreen; 3: Memo1.Color:=clLime; 4: Memo1.Color:=clMaroon; end;
if lbProgram.ItemIndex = 0 then Memo1.Lines.Add(cboInfo.Items[0]) else if lbProgram.ItemIndex = 1 then Memo1.Lines.Add(cboInfo.Items[1]) else if lbProgram.ItemIndex = 2 then Memo1.Lines.Add(cboInfo.Items[2]) else if lbProgram.ItemIndex = 3 then Memo1.Lines.Add(cboInfo.Items[3]) else if lbProgram.ItemIndex = 4 then Memo1.Lines.Add(cboInfo.Items[4]); end;
procedure TForm1.btnExitClick(Sender: TObject); begin
Application.Terminate; end;
Contoh #2 (CheckBox)
1. Tambahkan komponen GroupBox dan empat buah komponen CheckBox ke dalam GroupBox.
2. Ubah property Caption dari GroupBox1 dengan tulisan “Format Teks”, serta komponen CheckBox1 sampai CheckBox4 dengan “Teks Tebal”, “Teks Miring”, “Teks Besar”, dan “Teks Kecil”. 3. Tambahkan Komponen Button dan ganti
property Name dengan “btnProses” dan Caption dengan “Proses”.
4. Klik dua kali pada Button Proses, kemudian ketik kode di bawah ini:
procedure
TForm1.btnProsesClick(Sender: TObject);
begin
Memo1.Font.Style:=[]; Memo1.Font.Name:='Bookman Old Style';
if CheckBox1.Checked then
Memo1.Font.Style:=Memo1.Font. Style+[fsBold];
if CheckBox2.Checked then
if CheckBox3.Checked then
Memo1.Font.Size:=Memo1.Font.Size+2; if CheckBox4.Checked then
Memo1.Font.Size:=Memo1.Font.Size-2; end;
Contoh #3 (MainMenu & Popup Menu)
1. Buat aplikasi baru dan tambahkan komponen MainMenu dan PopUpMenu. Simpan aplikasi dengan nama file UMenu.pas dan nama file project PMenu.dpr.
2. Pilih perintah MainMenu dan untuk membuka lembar kerja Menu Designer, kita dapat menggunakan salah satu perintah berikut:
a. Klik ganda pada komponen MainMenu
b. Klik kanan pada komponen MainMenu dan pilih perintah Menu Designer c. Klik tombol builder pada baris property Items.
3. Ketik sebuah item menu “&Warna” pada baris property Caption dalam Object Inspector. Karakter “&” untuk menyatakan karakter menu short cut, di mana pada tampilan menu karakter W akan bergaris bawah.
4. Dengan cara yang sama lengkapi rancangan menu seperti di samping ini.
5. Tambahkan komponen Edit untuk mengaplikasikan penggunaan fungsi dari masing-masing item menu.
6. Langkah selanjutnya adalah pengisian baris program pada item menu. Klik dua kali item menu PopupMenu
jika masih berada di dalam lembar kerja atau klik terlebih dahulu item menu jika berada di dalam lembar kerja form designer.
procedure TForm1.Merah1Click(Sender: TObject); begin
Edit1.Color:=clRed; end;
procedure TForm1.Kuning1Click(Sender: TObject); begin
Edit1.Color:=clYellow; end;
procedure TForm1.Hijau1Click(Sender: TObject); begin
Edit1.Color:=clGreen; end;
procedure TForm1.Biru1Click(Sender: TObject); begin
Edit1.Color:=clBlue; end;
procedure TForm1.Besar1Click(Sender: TObject); begin
Edit1.Font.Size:=Edit1.Font.Size+2; end;
procedure TForm1.Kecil1Click(Sender: TObject); begin
Edit1.Font.Size:=Edit1.Font.Size-2; end;
procedure TForm1.ebal1Click(Sender: TObject); begin
Edit1.Font.Style:=Edit1.Font.Style+[fsBold]; end;
procedure TForm1.Miring1Click(Sender: TObject); begin
Edit1.Font.Style:=Edit1.Font.Style+[fsItalic]; end;
7. Langkah pembuatan PopUpMenu hampir sama dengan MainMenu. Buatlah deretan menu untuk PopUpMenu berikut: Teks Merah, Teks Kuning, Teks Hijau, Teks Biru, Teks Regular dan Keluar.
8. Kemudian ubah property PopupMenu pada Form1 dengan PopupMenu1. Kode untuk PopUp Adalah:
procedure TForm1.eksKuning1Click(Sender: TObject);
begin
procedure TForm1.eksMerah1Click(Sender: TObject); begin
Edit1.Font.Color:=clRed; end;
procedure TForm1.eksHijau1Click(Sender: TObject); begin
Edit1.Font.Color:=clGreen; end;
procedure TForm1.teksBiru1Click(Sender: TObject); begin
Edit1.Font.Color:=clBlue; end;
procedure TForm1.eksRegular1Click(Sender: TObject); begin
Edit1.Font.Style:=[]; end;
procedure TForm1.Keluar1Click(Sender: TObject); begin
Application.Terminate; end;
Semua contoh dikutip dari:
MADCOMS, 2003, Pemrograman Borland Delphi 7 (Jilid 1), Andi Yogyakarta.
Sumber Pustaka:
Marco Cantù, 2001, Mastering Delphi 6, Sybex Inc, Alameda, San Francisco.
KOMPONEN DELPHI 1
ActionList
Komponen ini berisi daftar aksi yang dapat digunakan bersama-sama dengan komponen dan control lain.
1. Klik komponen ActionList dan letakkan pada lembar kerja Form Designer.
2. Klik kanan object ActionList dan pilih perintah Action List Editor dari daftar menu popup yang ditampilkan atau dengan bias juga dengan klik ganda object tersebut.
3. Klik tombol drop down New Action untuk mulai membuat daftar aksi.
4. New Action, item menu yang digunakan untuk menambahkan sebuah aksi baru dalam daftar dengan cara membuat dan menentukan perintah sendiri.
5. Buat Action baru dengan ketentuan sebagai berikut: Category Window: WindowClose;
Category Edit: EditCopy, EditCut, EditPaste.
6. Kemudian buat komponen TextBox dan Button seperti pada gambar disamping:
7. Kosongkan property Text untuk kedua komponen Edit.
8. Ubah property Action untuk keempat komponen Button tersebut di atas dengan ketentuan:
• Pilih aksi EditCut untuk Button1
• Pilih aksi EditCopy untuk Button2
• Pilih aksi EditPaste untuk Button3
• Pilih aksi WindowClose untuk Button4
9. Tulis kode dengan cara klik ganda daftar aksi pada kotak action list dengan ketikan kode program sebagai berikut:
procedure TForm1.EditCopyExecute(Sender: TObject); begin
Edit1.SelectAll;
Edit1.CopyToClipboard; end;
procedure TForm1.EditCutExecute(Sender: TObject); begin
Edit1.SelectAll; Edit1.CutToClipboard; Edit1.Clear;
end;
procedure TForm1.EditPasteExecute(Sender: TObject); begin
Edit2.Clear;
Edit2.SetFocus; end;
procedure TForm1.WindowCloseExecute(Sender: TObject); begin
Application.Terminate; end;
MaskEdit
1. Letakkan empat komponen MaskEdit, empat Label dan dua Button pada form.
2. Ubah property Label dan Button dengan ketentuan:
• Ubah property Caption untuk komponen Label1 sampai Label4 dengan teks Kode Barang, Kode Jual, Tanggal Jual dan Kota Tujuan.
• Ubah Properti Caption untuk komponen Button1 dan Button2 dengan teks Proses dan Keluar. 3. Buat kode format (mask) kompone
MaskEdit dengan klik kanan komponen MaskEdit dan pilih perintah Input Mask Edit dari menu popup yang ditampilkan.
• Input Mask, digunakan untuk mendefinisikan kode format (mask) untuk kotak edit. Penulisan mask terbagi dalam tiga bagian field yang dipisahkan oleh karakter titik koma.
• Character For Blanks menyatakan karakter yang dipakai sebagai pengisi spasi atau ruang kosong di dalam mask.
• Save Literal Characters adalah kotak cek yang digunakan untuk menginsdikasikan apakah karakter literal dari mask akan disimpan di dalam data.
• Test Input digunakan untuk menguji mask yang telah dibentuk pada bagian input mask. Kotak teks ini menampilkan mask seperti tampilan pada form.
• Sample Masks adalah bagian yang menampilkan pilihan mask yang disediakan Delphi yang dapat digunakan pemakai.
• Masks digunakan untuk menampilkan pilihan bentuk penulisan mask dari suatu Negara tertentu.
Tabel Kode Format.
Kode Keterangan > Kode yang menyatakan bahwa semua karakter yang mengikutinya akan diubah
menjadi huruf besar sampai ditemukan karakter >.
< Kode yang menyatakan bahwa semua karakter yang mengikutinya akan diubah menjadi huruf kecil sampai ditemukan karakter <.
<> Kode yang menyatakan bahwa tidak ada pemeriksaan penulisan huruf besar dan kecil dan data diformat sesuai dengan data saat diinputkan
literal
L Kode yang menyatakan bahwa posisi yang diwakili oleh penulisan kode ini hanya menerima data karakter, yaitu A-Z atau a-z
l Kode yang menyatakan bahwa posisi yang diwakili oleh penulisan kode ini hanya menerima data karakter, tetapi tidak harus ada atau boleh dikosongkan A Kode yang menyatakan bahwa posisi yang diwakili oelh penulisan kode ini
hanya dapat menerima data karakter dan angka (A-Z,a-z, dan 0-9).
a Kode yang menyatakan bahwa posisi yang diwakili oelh penulisan kode ini hanya dapat menerima data karakter dan angka (A-Z,a-z, dan 0-9), tetpai tidak harus ada atau boleh kosong.
C Kode yang menyatakan bahwa posisi yang diwakili oleh penulisan kode ini dapat menerima sembarang karakter.
c Kode yang menyatakan bahwa posisi yang diwakili oleh penulisan kode ini dapat menerima sembarang karakter, tetapi tidak harus ada atau boleh dikosongkan 0 Kode yang menyatakan bahwa posisi yang diwakili oleh penulisan kode ini dapat
menerima data angka, yaitu 0-9
9 Kode yang menyatakan bahwa posisi yang diwakili oleh penulisan kode ini dapat menerima data angka, yaitu 0-9, tetapi tidak harus ada atau boleh dikosongkan # Kode yang menyatakan bahwa posisi yang diwakili oleh penulisan kode ini dapat
menerima data angka, yaitu 0-9, tanda minus dan plus, tetapi tidak harus ada atau boleh dikosongkan
: Kode yang digunakan untuk memisahkan penulisan data waktu, yaitu jam, menit dan detik
/ Kode yang digunakan untuk memisahkan penulisan data tanggal, yaitu: tanggal, bulan dan tahun
; Kode yang digunakan untuk memisahkan tiga bagian field dalam kotak teks Input Mask
- Kode yang digunakan untuk menyisipkan spasi dalam teks secara otomatis. Karakter literal adalah karakter-karakter lain yang tidak tercantum dalam table di atas. Karakter literal akan ditambahkan secara otomatis dan kursor akan melewatinya pada saat proses input data. Karakter literal khusus akanditampilkan jika penulisannya didahului oleh \.
4. MaskEdit1 untuk input Kode Barang: >LL\-00;1;_
Karakter pertama dan kedua harus berisi data teks, karakter ketiga dan keempat harus berisi angka, dan angka 1 pada posisi field ke-2 menunjukan bahwa karakter literal “-“ termasuk dalam data sehingga data input Kode Barang terdiri dari 5 karakter.
5. MaskEdit2 untuk data input kode Jual: >L\-0\-L;0;_
Karakter pertama dan ketiga harus berisi teks, karakter kedua harus berisi data angka, dan angka 0 pada posisi field ke-2 menunjukkan bahwa dua karakter literal “-“ tidak termasuk dalam data sehingga data input Kode Jual terdiri dari 3 karakter.
6. MaskEdit3 untuk dara input Tanggal Jual: !99/99/0000;1;_
Kode terdiri dari 15 kode l kecil yang menunjukan bahwa data input untuk Kota Tujuan maksimal 15 karakter. Karakter pertama akan diubah menjadi huruf besar sedangka karakter kedua dan seterusnya diubah menjadi huruf kecil.
CheckListBox
1. Buatlah aplikasi baru dengan menambahkan komponen CheckListBox dan beberapa komponen lain.
2. Pilih komponen CheckList dan klik tombol Elipsis (…) pada properti Items untuk memasukkan daftar pilihan yang akan ditampilkan: Cetak Tebal, Cetak Miring, Cetak Garis, Cetak Coret, Warna Latar, Warna Font, Jenis Font dan Ukuran Font.
3. Ketik Kode berikut pada event OnClick di komponen CheckListBox:
procedure TForm1.CheckListBox1Click(Sender: TObject); begin
if CheckListBox1.State[0]=cbChecked then Edit1.Font.Style:=Edit1.Font.Style+[fsBold] else
Edit1.Font.Style:=Edit1.Font.Style-[fsBold]; if CheckListBox1.State[1]=cbChecked then
Edit1.Font.Style:=Edit1.Font.Style+[fsItalic] else
Edit1.Font.Style:=Edit1.Font.Style-[fsItalic]; if CheckListBox1.State[2]=cbChecked then
Edit1.Font.Style:=Edit1.Font.Style-[fsUnderline]; if CheckListBox1.State[3]=cbChecked then
Edit1.Font.Style:=Edit1.Font.Style+[fsStrikeOut] else
Edit1.Font.Style:=Edit1.Font.Style-[fsStrikeOut]; if CheckListBox1.State[4]=cbChecked then
begin
COmboBox1.Visible:=true; Label1.Visible:=true; end
else begin
COmboBox1.Visible:=false; Label1.Visible:=false; end;
if CheckListBox1.State[5]=cbChecked then begin
COmboBox2.Visible:=true; Label2.Visible:=true; end
else begin
COmboBox2.Visible:=false; Label2.Visible:=false; end;
if CheckListBox1.State[6]=cbChecked then begin
COmboBox3.Visible:=true; Label3.Visible:=true; end
else begin
COmboBox3.Visible:=false; Label3.Visible:=false; end;
if CheckListBox1.State[7]=cbChecked then begin
COmboBox4.Visible:=true; Label4.Visible:=true; end
else begin
COmboBox4.Visible:=false; Label4.Visible:=false; end;
end;
4. Definisikan property untuk komponen lain dengan ketentuan:
• Ubah property Caption untuk Label1 sampai Label4 dengan teks Warna Latar, Warna Font, Jenis Font dan Ukuran Font
• Ubah property Caption untuk komponen Button1 dengan teks “Keluar”.
• Hapus Caption untuk ComboBox
• Ubah Properti Visible menjadi False untuk komponen Label1-Label4 dan ComboBox1-ComboBox4
• IsiProperti Items ComboBox1 dengan teks Merah, Kuning, Hijau dan Biru. Kode untuk event OnChange:
case ComboBox1.ItemIndex of 0: Edit1.Color:=clred; 1: Edit1.Color:=clYellow; 2: Edit1.Color:=clGreen; 3: Edit1.Color:=clBlue; end;
• IsiProperti Items ComboBox2 dengan teks Merah, Kuning, Hijau dan Biru. Kode untuk event OnChange:
case ComboBox2.ItemIndex of 0: Edit1.Font.Color:=clred; 1: Edit1.Font.Color:=clYellow; 2: Edit1.Font.Color:=clGreen; 3: Edit1.Font.Color:=clBlue; end;
• IsiProperti Items ComboBox3 dengan teks Arial, Courer, Roman, Comic Sans. Kode untuk event OnChange
case ComboBox3.ItemIndex of 0: Edit1.Font.Name:='Arial';
1: Edit1.Font.Name:='Courier New'; 2: Edit1.Font.Name:='Times New Roman'; 3: Edit1.Font.Name:='Comic Sans MS'; end;
• IsiProperti Items ComboBox3 dengan teks 12, 16, 20 dan 24. Kode untuk event OnChange
if ComboBox4.ItemIndex>-1 then
Edit1.Font.Size:=strtoint(ComboBox4.Text);
6. Ketik kode pada komponen Button1 di event OnClick:
procedure TForm1.KeluarClick(Sender: TObject); begin
Close; end;
TrackBar
1. Buat aplikasi dengan menggunakan beberapa komponen seperti Shape1 dan ubah Name menjadi Kotak, tambahkan komponen Label sebanyak tujuh dengan Caption masing-masing: Lebar, Tinggi, Merah, Hijau dan Biru.
2. Tambahkan pula komponen Button sebanyak dua dan ubah name manjadi Ulang dan Keluar.
3. Tambahkan komponen Edit
4. Tambahkan komponen TrackBar sebanyak tujuh dan ubah Name-nya menjadi trkLebar, trkTinggi, trkMerah, trkHijau dan trkBiru.
5. Untuk komponen trkLebar dan trkTinggi, ubah property Max dengan nilai 200
6. Untuk komponen trkMerah, trkHijau dan trkBiru, ubah property Max dengan nilai 255. 7. Tuliskan kodenya sebagai berikut:
procedure TForm1.trkLebarChange(Sender: TObject); begin
edLebar.Text:=IntTostr(trkLebar.Position); Kotak.Width:=trkLebar.Position;
end;
procedure TForm1.trkTinggiChange(Sender: TObject); begin
edTinggi.Text:=IntToStr(trkTinggi.Position); Kotak.Height:=trkTinggi.Position;
end;
procedure TForm1.trkMerahChange(Sender: TObject); begin
edMerah.Text:=IntTostr(trkMerah.Position);
Kotak.Brush.Color:=RGB(trkMerah.Position,trkHijau.Position,trkBiru.Posi tion);
end;
procedure TForm1.trkHijauChange(Sender: TObject); begin
edHijau.Text:=IntTostr(trkHijau.Position);
Kotak.Brush.Color:=RGB(trkMerah.Position,trkHijau.Position,trkBiru.Posi tion);
end;
procedure TForm1.trkBiruChange(Sender: TObject); begin
edBiru.Text:=IntTostr(trkBiru.Position);
Kotak.Brush.Color:=RGB(trkMerah.Position,trkHijau.Position,trkBiru.Posi tion);
end;
procedure TForm1.KeluarClick(Sender: TObject); begin
Close; end;
procedure TForm1.UlangClick(Sender: TObject); begin
trkLebar.Position:=0; trkTinggi.Position:=0; trkMerah.Position:=0; trkHijau.Position:=0; trkBiru.Position:=0; end;
Semua contoh dikutip dari:
PEMROGRAMAN DATABASE
Arsitektur Database Delphi
Fitur-fitur ringkasan database
Tool Kegunaan
Data Access components Access databases, tables, stored procedures, and custom component editors. Data Control components Provide user interface to database tables.
Database Desktop (DBD) Create, index, and query Paradox and dBASE tables, and SQL databases. Access and edit data from all sources.
Database
Database terdiri dari tabel-tabel, dimana tiap tabel berisi kolom-kolom yang membentuk record atau baris.
Sumber data Delphi
Data source Description File extension
Paradox Tables created with Paradox or Database Desktop.
Each table is in a separate file.
.DB
dBASE Tables created with dBASE or Database Desktop.
Each table is in a separate file.
.DBF
ASCII files Tables created with Database Desktop. Each table is
in a separate file.
.TXT
Local InterBase Server Database created with InterBase Windows ISQL.Multiple tables in a single database file.
.GDB
SQL Database Server: Oracle, Sybase,Microsoft SQL Server, Informix, InterBase
Database created with server-specific tools, or the DBD, accessed across network with SQL Links. Delphi Client/Server Edition only.
Depends on server
ODBC data sources Databases such as Microsoft Access, Btrieve, FoxPro,
etc.
Depends on data source
Komponen Data Access
Komponen ini merupakan komponen yang digunakan untuk mengakses database, diantaranya terdiri dari:
Komponen Borland Database Engine (BDE)
Komponen Fungsi
DataSource
Komponen penghubung antara komponen Data Access dengan komponen Visual Data Aware
ClientDataSet
Komponen untuk mengimplementasikan suatu cache dataset dalam memori
DatasetProvider
Menyandikan data dalam paket yang dapat dikirim ke client dan menerima perubahan yang diterima dari client
XMLTransform
Mengubah dokumen XML dalam suatu paket data atau sebuah paket data XML ke sebuah dokumen XML dengan struktur yang berbeda. XMLTransfromProvider
Menyediakan data dari sebuah Dokumen XML ke suatu dataset client atau XML broker dan menetapkan perubahan dari dataset client atau XML broker kembali ke sumber dokumen XML
XMLTransformClient
Mengubah data dari suatu provider ke dalam dokumen XML dan menetapkan perubahan dalam form suatu dokumen XML ke suatu komponen provider.
Komponen Fungsi
Table
Komponen yang digunakan sebagai Data Source yang mengakses record dari table
Query
Komponen yang digunakan sebagai data source yang mengakses record dari table berdasarkan perintah SQL
StoredProc
Komponen yang digunakan sebagai data source yang mengakses record dari table berdasarkan perintah store procedure untuk database server
Database
Komponen yang digunakan untuk membuat hubungan client/server dengan sebuah database dalam sebuah session
Session
Komponen yang digunakan untuk membuat suatu session dalam aplikasi database tingkat-ganda
BatchMove
Komponen yang digunakan memindahkan seluruh record/field dari suatu table ke table lain dengan cepat
UpdateSQL
Komponen yang digunakan untuk menjalankan perintah SQL seperti INSERT, UPDATE, DELETE dan lain-lain
NestedTable
Komponen-komponen ini digunakan untuk menghubungkan database dengan driver dari Borland Database Engine. Diantaranya adalah:
Komponen Data Controls
Komponen-komponen ini digunakan sebagai alat komunikasi antara pemakai dengan Data Source yang diletakan pada bagian Form. Diantaranya adalah:
Contoh Kasus
Sistem Penjualan Barang
Membuat file database
1. Pilih menu Tools->DatabaseDekstop, kemudian pilih menu Working Directory, untuk menentukan direktori/folder sebagai tempat file-file database diletakkan.
3. Kemudian isilah field dan tipenya.
Field yang diisi maksimal 25 karakter, dan field type yang disediakan adalah A (Alphanumerik), N (Numerik), $ (Money), S (Short), I (Long Integer), D (Date), T (Time), M (Memo), F (Formatted Memo), G (Graphic) dan L (Logical).
Pada kolom Key, digunakan untuk menentukan kunci primer (primery key) dengan menekan tombol apa saja pada kolom tersebut sehingga ditandai dengan *.
4. Untuk membuat index, pilih pilihan Secondary Indexes pada ComboBox Tabel Properties, kemudian klik tombol define., dan pilih field yang akan di buatkan index. Simpan indexnya dengan nama yang berbeda dengan fieldnya.
5. Simpan nama tabel tersebut dengan nama “barang” 6. Buatlah tabel-tabel berikut dengan cara yang sama.
a. Pembelian
Buat index sekunder dengan ketentuan sebagai berikut: Nama Index Field Kunci
b. Suplier
Buat index sekunder dengan ketentuan sebagai berikut: Nama Index Field Kunci
NamaSpl Nama c. TempBeli
d. ReturPembelian
Buat index sekunder dengan ketentuan sebagai berikut: Nama Index Field Kunci
KdBrg KodeBarang KdBrgTgl KodeBarang,TglRetur NoRet NoRetur
Buat index sekunder dengan ketentuan sebagai berikut: Nama Index Field Kunci
KdBrgTgl KodeBarang,TglBon KdBrgNoBon KodeBarang,NoBon NoTglKdBrg NoBon,TglBon,KodeBarang f. TempJual
g. ReturPenjualan
Buat index sekunder dengan ketentuan sebagai berikut: Nama Index Field Kunci
Membuat Form End untuk Manipulasi Data
Input Data BarangBuatlah form dengan tampilan di bawah ini, dan simpan form tersebut dengan nama FFormInputBarang ke lokasi yang sama dengan database yang telah dibuat sebelumnya.
Kemudian, tulis kode program pada Form ini:
private
{ Private declarations } IsAppend: boolean;
function FindKey(kode:string):boolean; procedure DisplayData;
FormInputBarang: TFormInputBarang; implementation
{$R *.dfm}
procedure TFormInputBarang.btnCloseClick(Sender: TObject); begin
Close; end;
procedure TFormInputBarang.DisplayData; begin
edKodeBrg.Text:=tblBarang['KODE']; edNama.Text:=tblBarang['NAMA']; cboSatuan.Text:=tblBarang['SATUAN']; edHBeli.Text:=tblBarang['HARGABELI']; edHJual.Text:=tblBarang['HARGAJUAL']; end;
Komponen Properti Nilai
Form1 Name
Caption
FormInputBarang Input Data Barang Edit1 Name CharCase edKodeBrg ecUpperCase
Edit 2 Name edNama
ComboBox1 Name Style cboSatuan csDropDownList
Edit3 Name edHBeli
Edit4 Name edHJual
procedure TFormInputBarang.doHapus; begin
if MessageDlg('Anda yakin akan menghapus data ini?' ,mtConfirmation, [mbYes,mbNo],0)=mryes then
begin
procedure TFormInputBarang.doSimpan; begin
ShowMessage('Data sudah disimpan!'); except
on e: Exception do
ShowMessage(e.Message); end;
end;
function TFormInputBarang.FindKey(kode: string): boolean; begin
result:=tblBarang.Locate('KODE',kode,[]); end;
procedure TFormInputBarang.GetData; begin
tblBarang.FieldByName('KODE').AsString:=edKodeBrg.Text; tblBarang.FieldByName('NAMA').AsString:=edNama.Text; tblBarang.FieldByName('SATUAN').AsString:=cboSatuan.Text; tblBarang.FieldByName('HARGABELI').AsString:=edHBeli.Text; tblBarang.FieldByName('HARGAJUAL').AsString:=edHJual.Text; end;
procedure TFormInputBarang.FormShow(Sender: TObject); begin
tblBarang.Open; end;
procedure TFormInputBarang.btnSaveClick(Sender: TObject); begin
doSimpan; end;
procedure TFormInputBarang.btnDeleteClick(Sender: TObject); begin
procedure TFormInputBarang.edKodeBrgChange(Sender: TObject); begin
if edKodeBrg.Text<>'' then begin
if FindKey(edKodeBrg.Text) then begin
IsAppend:=false; DisplayData; end
else begin
IsAppend:=true; doClear;
end; end; end;
procedure TFormInputBarang.FormCreate(Sender: TObject); begin
edKodeBrg.Clear; doClear;
cboSatuan.Items.Add('PCS'); cboSatuan.Items.Add('LUSIN'); cboSatuan.Items.Add('ROL'); cboSatuan.Items.Add('BOX'); cboSatuan.ItemIndex:=0; end;
procedure TFormInputBarang.FormClose(Sender: TObject; var Action: TCloseAction);
begin
tblBarang.Close; end;
procedure TFormInputBarang.doClear; begin
edNama.Clear; edHBeli.Clear; edHJual.Clear; cboSatuan.Text:=’’; end;
end.
private
FormBrowseBarang: TFormBrowseBarang; implementation
{$R *.dfm}
procedure TFormBrowseBarang.btnCloseClick(Sender: TObject); begin
tblBarang.Close; Close;
end;
procedure TFormBrowseBarang.doHapus; begin
if MessageDlg('Anda yakin akan menghapus data ini?' ,mtConfirmation, [mbYes,mbNo],0)=mryes then
tblBarang.Delete; end;
procedure TFormBrowseBarang.FormCreate(Sender: TObject); begin
tblBarang.Open; edKodeBrg.Clear; edNama.Clear; end;
procedure TFormBrowseBarang.edKodeBrgChange(Sender: TObject); begin
tblBarang.IndexName:='';
tblBarang.FindNearest([edKodeBrg.Text]); end;
procedure TFormBrowseBarang.edNamaChange(Sender: TObject); begin
tblBarang.IndexName:='NamaBrg';
tblBarang.FindNearest([edNama.Text]); end;
procedure TFormBrowseBarang.btnDeleteClick(Sender: TObject); begin
doHapus; end;
end.
Komponen Properti Nilai
Form1 Name
Caption
FormBrowseBarang Browse Barang
Edit1 Name Button2 Name Caption btnClose Tutup Table1 Name TableName tblBarang barang.db DataSource1 Name
Dataset
dsBarang tblBarang
Input Data Suplier
FormInputSuplier: TFormInputSuplier; implementation
{$R *.dfm}
{ TFormInputSuplier }
procedure TFormInputSuplier.DisplayData; begin
edKodeSpl.Text:=tblSuplier.FieldByName('KODESUPLIER').AsString; edNama.Text:=tblSuplier.FieldByName('NAMA').AsString;
edAlamat.Text:=tblSuplier.FieldByName('ALAMAT').AsString; edKota.Text:=tblSuplier.FieldByName('KOTA').AsString; edKontak.Text:=tblSuplier.FieldByName('KONTAK').AsString; edTelepon.Text:=tblSuplier.FieldByName('TELEPON').AsString; end;
procedure TFormInputSuplier.doHapus; begin
if MessageDlg('Anda yakin akan menghapus data ini?', mtConfirmation, [mbYes,mbNo],0)=mryes then
begin
tblSuplier.Delete;
Komponen Properti Nilai
Form1 Name
Caption
FormInputSuplier Input Data Barang
Edit1 Name
CharCase
edKodeSuplier ecUpperCase
Edit 2 Name edNama
Edit3 Name edAlamat
Edit4 Name edKota
Edit5 Name edKontak
Edit6 Name edTelepon
if not tblSuplier.IsEmpty then DisplayData;
end; end;
procedure TFormInputSuplier.doSimpan; begin
ShowMessage('Data sudah disimpan!'); except
on e: Exception do
ShowMessage(e.Message); end;
end;
function TFormInputSuplier.FindKey(kode: string): boolean; begin
result:=tblSuplier.Locate('KODESUPLIER',kode,[]); end;
procedure TFormInputSuplier.GetData; begin
tblSuplier.Fields[0].AsString:=edKodeSpl.Text; tblSuplier.Fields[1].AsString:=edNama.Text; tblSuplier.Fields[2].AsString:=edAlamat.Text; tblSuplier.Fields[3].AsString:=edKota.Text; tblSuplier.Fields[4].AsString:=edKontak.Text; tblSuplier.Fields[5].AsString:=edTelepon.Text; end;
procedure TFormInputSuplier.btnCloseClick(Sender: TObject); begin
Close; end;
procedure TFormInputSuplier.FormShow(Sender: TObject); begin
tblSuplier.Open; end;
procedure TFormInputSuplier.FormClose(Sender: TObject; var Action: TCloseAction);
begin
tblSuplier.Close; end;
procedure TFormInputSuplier.btnSaveClick(Sender: TObject); begin
end;
procedure TFormInputSuplier.btnDeleteClick(Sender: TObject); begin
doHapus; end;
procedure TFormInputSuplier.FormCreate(Sender: TObject); begin
edKodeSpl.Clear; doClear;
end;
procedure TFormInputSuplier.edKodeSplChange(Sender: TObject); begin
if edKodeSpl.Text<>'' then begin
if FindKey(edKodeSpl.Text) then begin
IsAppend:=false; DisplayData; end
else begin
IsAppend:=true; doClear;
end; end; end;
procedure TFormInputSuplier.doClear; begin
edNama.Clear; edAlamat.Clear; edKota.Clear; edKontak.Clear; edTelepon.Clear; end;
{ TFormBrowseSuplier }
procedure TFormBrowseSuplier.doHapus; begin
if MessageDlg('Anda yakin akan menghapus data ini?' ,mtConfirmation, [mbYes,mbNo],0)=mryes then
tblSuplier.Delete; end;
procedure TFormBrowseSuplier.FormClose(Sender: TObject; var Action: TCloseAction);
begin
tblSuplier.Close; end;
procedure TFormBrowseSuplier.btnCloseClick(Sender: TObject); begin
Close; end;
procedure TFormBrowseSuplier.btnDeleteClick(Sender: TObject); begin
doHapus; end;
procedure TFormBrowseSuplier.FormCreate(Sender: TObject); begin
tblSuplier.Open; edKodeSpl.Clear; edNama.Clear; end;
procedure TFormBrowseSuplier.edKodeSplChange(Sender: TObject); begin
tblSuplier.IndexName:='';
tblSuplier.FindNearest([edKodeSpl.Text]); end;
procedure TFormBrowseSuplier.edNamaChange(Sender: TObject); begin
tblSuplier.IndexName:='NamaSpl';
tblSuplier.FindNearest([edNama.Text]); end;
Komponen Properti Nilai Form1 Name Caption FormBrowseSuplier Browse Data Suplier Edit1 Name CharCase edKodeSpl ecUpperCase
Edit 2 Name edNama Table1 Name TableName tblSuplier supplier.db DataSource1 Name Dataset dsSuplier tblSuplier
end.
Transaksi Pembelian
Input Data Pembelian1. Klik ganda pada Komponen tblTempBeli sehingga menampilkan FieldEditor, kemudian klik kanan dan pilih Add all fields.
2. Klik ganda pada DBGrid1 sehingga menampilkan Columns Editor, kemudian klik icon Add All Fields.
Komponen Properti Nilai
Form1 Name
Caption
FormInputPembelian Input Data Pembelian ComboBox1 Name Style cboSuplier csDropDownList
Edit1 Name
CharCase
edNoFaktur ecUpperCase DateTimePicker1 Name tglFaktur
Button1 Name Faktur Baru Button3 Name Caption btnSimpan Simpan Table1 Name TableName tblSuplier supplier.db
Table2 Name Table4 Name TableName tblBarang barang.db DataSource1 Name
Dataset
dsSuplier tblSuplier DataSource2 Name
Dataset
dsPembelian tblPembelian DataSource3 Name
Dataset
dsTempBeli tblTempBeli
DBGrid1 DataSource dsTempBeli
3. Kemudian tulis kode pada blok private, seperti di bawah ini:
private
{ Private declarations } procedure doOpenTable; procedure doCloseTable; procedure doSimpanHdr;
procedure doGeneratesuplier; procedure doGenerateBarang; public
4. Tekan CTRL+SHIFT+C, dan tuliskan kode seperti di bawah ini:
procedure TFormInputPembelian.doCloseTable; begin
tblSuplier.Close; tblPembelian.Close; tblTempBeli.Close; tblBarang.Close; end;
procedure TFormInputPembelian.doOpenTable; begin
tblSuplier.Open; tblPembelian.Open; tblTempBeli.Open; tblBarang.Open; end;
procedure TFormInputPembelian.doSimpanHdr; begin
tblSuplier.First;
tblSuplier.MoveBy(cboSuplier.ItemIndex); tblPembelian.Append;
tblPembelian.FieldByName('KODESUPLIER').AsString:=tblSuplier['KODESUPLI ER'];
tblPembelian.FieldByName('NOFAKTUR').AsString:=edNoFaktur.Text;
tblPembelian.FieldByName('TGLFAKTUR').AsDateTime:=tglFaktur.DateTime; tblPembelian.Post;
end;
procedure TFormInputPembelian.doGenerateBarang; begin
DBGrid1.Columns[0].PickList.Clear; tblBarang.First;
while not tblBarang.Eof do begin
procedure TFormInputPembelian.doGeneratesuplier; begin
cboSuplier.Clear; tblSuplier.First;
while not tblSuplier.Eof do begin
cboSuplier.Items.Add(tblSuplier.fieldbyname('NAMA').AsString); tblSuplier.Next;
5. Pilih komponen tblTempBeli, klik ganda pada Events BeforePost, dan tulis kode seperti di bawah ini:
procedure TFormInputPembelian.tblTempBeliBeforePost(DataSet: TDataSet); begin
tblTempBeli.FieldByName('NOFAKTUR').AsString:=edNoFaktur.Text; end;
6. Klik ganda tblTempBeli untuk menampilkan Fields Editor, kemudian pilih Field KODEBARANG kemudian klik ganda pada Events OnChange, dan ketik kode berikut:
procedure TFormInputPembelian.tblTempBeliKODEBARANGChange (Sender: TField);
var
kode:string; begin
kode:=tblTempBeli.fieldbyname('KODEBARANG').AsString; if tblBarang.Locate('KODE',kode,[]) then
begin
tblTempBeli.fieldbyname('NAMA').AsString:=tblBarang['NAMA']; tblTempBeli.fieldbyname('SATUAN').AsString:=tblBarang['SATUAN'];
tblTempBeli.fieldbyname('HARGABELI').AsCurrency :=tblBarang['HARGABELI'];
end; end;
kemudian pilih Field BANYAK, dan klik ganda pada Events OnChange, dan tulis kode berikut:
procedure TFormInputPembelian.tblTempBeliBANYAKChange(Sender: TField); var
byk:Integer; hbeli:currency; begin
byk:=tblTempBeli.FieldByName('BANYAK').AsInteger;
hbeli:=tblTempBeli.FieldByName('HARGABELI').AsCurrency; tblTempBeli.FieldByName('TOTAL').AsCurrency:=byk*hbeli; end;
7. Klik ganda pada komponen edNoFaktur dan Tulis kode berikut:
procedure TFormInputPembelian.edNoFakturChange(Sender: TObject); begin
tblTempBeli.Filtered:=false;
tblTempBeli.Filter:='NOFAKTUR='+QuotedStr(edNoFaktur.Text); tblTempBeli.Filtered:=true;
if edNoFaktur.Text<>'' then begin
DBGrid1.Enabled:=true; DBNavigator1.Enabled:=true end
else begin
DBGrid1.Enabled:=false; DBNavigator1.Enabled:=false; end;
end;
8. Tuliskan kode pada Events OnClick pada masing-masing Button btnSimpan, btnClose, btnNew:
if edNoFaktur.Text='' then
raise Exception.Create('No Faktur harus diisi!'); doSimpanHdr;
btnSimpan.Enabled:=false; DBNavigator1.Enabled:=true; end;
procedure TFormInputPembelian.btnCloseClick(Sender: TObject); begin
close; end;
procedure TFormInputPembelian.btnNewClick(Sender: TObject); begin
edNoFaktur.Clear;
btnSimpan.Enabled:=true; end;
9. Tuliskan kode berikut pada FormShow dan FormClose:
procedure TFormInputPembelian.FormShow(Sender: TObject); begin
doOpenTable;
doGeneratesuplier; doGenerateBarang; end;
procedure TFormInputPembelian.FormClose(Sender: TObject; var Action: TCloseAction);
begin
doCloseTable; end;
1. Pilih komponen quPembelian, pada properties SQL, tuliskan perintah sebagai berikut:
SELECT a.NoFaktur, TglFaktur,
KodeSuplier, KodeBarang, HargaBeli, Banyak
FROM pembelian as a , tempbeli as b
WHERE b.NoFaktur=a.NoFaktur ORDER BY TglFaktur
2. Tulis kode seperti di bawah ini:
procedure TFormBrowsePembelian.btnCloseClick(Sender: TObject); begin
Close; end;
procedure TFormBrowsePembelian.FormClose(Sender: TObject; var Action: TCloseAction);
begin
quPembelian.Close; end;
procedure TFormBrowsePembelian.FormShow(Sender: TObject); begin
quPembelian.Open; end;
3. Tulis deklarasi procedure doHapus pada blok private dan berikan pada Events OnClick pada btnHapus:
procedure TFormBrowsePembelian.doHapus; var
NoFak:string; begin
if MessageDlg('Anda yakin akan menghapus data ini?', mtConfirmation, [mbYes,mbNo],0)=mrno then
exit;
if not quPembelian.IsEmpty then begin
NoFak:=quPembelian.fieldByName('NOFAKTUR').AsString; if quHapus.Active then
quHapus.Active:=false; quHapus.SQL.Clear;
quHapus.SQL.Add('DELETE FROM tempbeli WHERE NOFAKTUR=' +QuotedStr(NoFak));
Komponen Properti Nilai
Form1 Name Caption FormBrowsePembelianBrowse Pembelian Button1 Name
quHapus.ExecSQL; quHapus.SQL.Clear;
quHapus.SQL.Add('DELETE FROM pembelian WHERE NOFAKTUR=' +QuotedStr(NoFak));
quHapus.ExecSQL; quPembelian.Refresh; end;
end;
procedure TFormBrowsePembelian.btnHapusClick(Sender: TObject); begin
doHapus; end;
Retur Pembelian
Input Retur PembelianKomponen Properti Nilai
Form1 Name
Caption
FormInputReturBeli Input Retur Pembelian
GroupBox1 Caption <Data Pembelian yang dikembalikan> GroupBox2 Caption <Retur Pembelian>
ComboBox1 Name cboNoFaktur
ComboBox1 Name cboKodeBrg
Edit1 Name edTglFaktur
Edit2 Name edNamaBrg
Edit3 Name edBanyak
Edit4 Name edHbeli
Edit5 Name edNoRetur
Edit6 Name edRtrBanyak
DateTimePicker1 Name tglRetur Button1 Name Caption btnSimpan Simpan Button2 Name Caption btnClose Tutup
Table1 Name
TableName
tblReturpembelian returpembelian.db
Query1 Name quFaktur