• Tidak ada hasil yang ditemukan

Object Oriented Programming dengan Delphi (

N/A
N/A
Protected

Academic year: 2019

Membagikan "Object Oriented Programming dengan Delphi ("

Copied!
75
0
0

Teks penuh

(1)

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;

(2)

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

(3)

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

(4)

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

(5)

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:

(6)

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.

(7)

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

(8)

procedure TAirplane.TakeOff(Dir : Integer); begin

Heading := Dir; Status := TakingOff; end;

procedure TAirplane.Land; begin

(9)

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

(10)

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

(11)

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

(12)

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.

(13)

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:

(14)

• 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,

(15)

Contoh-contoh pembuatan aplikasi sederhana

Contoh #1

1. 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

(16)

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

(17)

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

(18)

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.

(19)

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;

(20)

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;

(21)

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

(22)

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 }

(23)

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

(24)

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;

(25)

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;

(26)

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

(27)

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

(28)

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

(29)

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.

(30)

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;

(31)

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

(32)

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;_

(33)

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

(34)

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

(35)

• 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

(36)

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:

(37)

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.

(38)

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

(39)

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.

(40)

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

(41)

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

(42)

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

(43)

Membuat Form End untuk Manipulasi Data

Input Data Barang

Buatlah 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

(44)

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

(45)

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.

(46)

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

(47)

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

(48)

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

(49)

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;

(50)

{ 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

(51)

end.

Transaksi Pembelian

Input Data Pembelian

1. 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

(52)

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;

(53)

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:

(54)

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;

(55)

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

(56)

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 Pembelian

Komponen 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

Gambar

gambar disamping:
Tabel Kode Format.

Referensi

Dokumen terkait

Tujuan dari penelitian ini adalah untuk mengetahui model dan hasil prediksi jumlah permintaan keempat varian dodol yang harus diproduksi dalam bulan April dan

Percobaan yang dilakukan yaitu dengan memvariasikan jumlah karakter data teks, file carier, dan posisi penyimpanan informasi.. Pada masing-masing percobaan akan dilihat

o Letakkan timbangan pada meja yang datar dan tidak mudah bergoyang o Lihat posisi jarum atau angka harus menunjukkan ke angka 0.. o Bayi sebaiknya telanjang, tanpa topi, kaus

menunjukan bahwa untuk karakter tinggi tanaman, jumlah daun, jumlah cabang, umur berbunga, jumlah polong berisi, jumlah polong hampa, bobot biji, jumlah biji dan

Berdasarkan hasil dan analisis data menunjukan bahwa tingkat keterampilan menulis teks prosedur siswa kelas X SMA Negeri 1 Ranah Pesisir dengan menggunakan teknik pemodelan untuk

Hasil penelitian ini sebuah sistem yang mampu memberkan informasi dengan jelas serta terotomatisasi dan lebih efektif, untuk mengetahui kebutuhan sistem yang selanjutnya dilakukan