Anda di halaman 1dari 157

INFORMASI PEMROGRAMAN

DELPHI

Informasi Pemrograman Delphi i


Delphi adalah salah satu tool pemrograman visual yang
memberikan kemudahan kepada programmer untuk
membangun perangkat lunak. Borland Delphi didukung oleh
supplier pihak ketiga yang menyediakan komponen-komponen
yang dibutuhkan oleh para programmer.

Delphi merupakan tool pemrograman yang menganut event


drivent konsep, dimana programmer dalam membangun
program tinggal merespon pada event dari komponen yang di
kehendaki. Tetapi juga Delphi menyediakan console, vcl untuk
pemrograman terstruktur. Delphi juga memberikan kemudahan
dalam mengakses basis data dan pembuatan laporan.

Banyak sekali yang dapat diungkapkan dari Delphi, tetapi pada


modul ini, yang akan dibahas adalah : IDE, Mendesain Sebuah
Form, Konsep Event Drivent, Variable, Constanta, Type Record,
Statement Percabangan, Statement Perulangan, Konsep
DataBase, Pemrograman Database dan Pembuatan Laporan.

Penyajian modul ini adalah mini konsep dan banyak latihan,


karena modul ini merupakan modul praktek dan merupakan
pelengkap dari materi perkuliahan pemrograman visual.

Informasi Pemrograman Delphi ii


Daftar isi

Pengantar
Daftar Isi
Modul I : Cara Bekerja Delphi
Modul II : Integrated Developent Environment
Modul III : Mendesain Sebuah Form
Modul IV : Konsep Event Driven
Modul V : Variable, Konstanta dan Type Record
Modul VI : Struktur Dasar Selection
Modul VII : Struktur Dasar Loop
Modul VIII : Bekerja Dengan Banyak Form
Modul IX : Pemrograman Basis Data (Beck End)
Modul X : Pemrograman Basis Data (Front End)
Modul XI : Structure Query Laguage
Modul XII : Report

Informasi Pemrograman Delphi iii


MODUL I
CARA DELPHI BEKERJA

Apakah Delphi itu?


 Delphi (IDE) adalah sebuah Visual Interface antara Anda
(the User) dan Komputer anda (yang berjalan diatas
Windows ).
 Delphi menterjemahkan Visual Components (Buttons,
Panels,..) yang ada pada Form kedalam sebuah kode-kode
komputer (pseudo in Unit1.dfm) yang mendefinisikan
bagaimana dibentuknya form dan komponennya termasuk
juga propertinya.

Saat anda menambahkan Components pada Form1 dan


merubah nilai properti, Delphi akan membuat (pseudo) code
(dalam Unit1.dfm) untuk mendefinikan apa yang anda lakukan.
Secara normal, ANDA TIDAK DIHARAPKAN MENGUBAHNYA
Unit1.dfm File; Anda hanya bekerja pada Form1 secara Visual.
Ini yang dinamakan bahasa pemrograman Visual (Visual
Programming)

Saat anda mengkompilasi program, apa yang terjadi?


 Delphi akan memanggil file .dpr file (file proyek anda)
 Delphi meminta program yang ada dalam proyek tersebut
dan file dpr memberikan sbb :
uses
Forms,
Unit1 in ‘Unit1.pas’ {Form1};

Informasi Pemrograman Delphi 1


 Delphi meminta, Apa yang dilakukan pertama kali ? .dpr
file memberikan sbb :

begin
Application.Initialize;
Application.CreateForm(Tform1, Form1);
Application.Run;
end.

FILE yang ada dalam Delphi:


1) *.dpr adalah file proyek yang dibuat berisi program kecil
untuk :
• mendefinisikan Unit yang ada dalam file proyek
• menginisialisasi data
• membangun form
• menjalankan aplikasi
uses
Forms,
Unit1 in ‘Unit1.pas’ {Form1};
begin
Application.Initialize;
Application.CreateForm(Tform1, Form1);
Application.Run;
end.

2) *.pas adalah unit-unit (pascal code file), bisa terdiri satu atau
banyak file
3) *.dfm adalah file definisi Form (special pseudo code file),
bisa terdiri satu atau banyak file

Informasi Pemrograman Delphi 2


object Form1: Tform1
Left = 200
Top = 108
Width = 696
Height = 480
Caption = ‘Form1’
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = ‘MS Sans Serif’
Font.Style = []
PixelsPerInch = 96
TextHeight = 13
object Button1: Tbutton
Left = 176
Top = 116
Width = 75
Height = 25
Caption = ‘Button1’
TabOrder = 0
end
end

MODUL II

Informasi Pemrograman Delphi 3


INTEGRATED DEVELOPMENT ENVIRONMENT

Tampilan utama interface Delphi terdiri dari beberapa bagian


yang kesemuanya merupakan bagian yang saling mendukung,
tempilan tersebut disebut dengan IDE. IDE dalam Delphi adalah
sebagai berikut :

Componen
Palete

Form
Design

Code
Editor

Menu bar
Speed
Toolbar

Object
Inspector

Kegunaan masing-masing bagian adalah:


1. Menu bar adalah untuk membantu pemrogram dalam
menyelesaikan desain sistem (program), segala kebutuhan
untuk menunjang pemrograman dapat ditelusuri dari menu
bar. Misalnya, menyimpan unit, project dan lain-lain.
2. Speed Toolbar adalah untuk memudahkan pemrogram
dalam menyelesaikan programnya, speed menu terdiri dari
perintah yang sering digunakan, seperti : menyimpan

Informasi Pemrograman Delphi 4


project, unit, menjalankan program, mengganti tampilan
dari desian form ke kode editor dasn sebaliknya, melihat
unit yang ada dalam project dan lain-lain.
3. Componen Palete adalah bagian dari Delphi yang
menyediakan kumpulan komponen yang dapat digunakan
dalam mendesain form. Componen Palete ini terbagi
berdasarkan katagori tersediri, diantaranya:
a. Standard yaitu komponen yang sering digunakan,
seperti: label, edit, button dan lain-lain.
b. Aditional yaitu kmponen yang merupakan tambahan
dari katagori standard, komponen dalam katagori ini
diantaranya: BitBTn, SpeedButton, MaskEdit,
StringGrid dan lain-lain
c. Win32 yaitu kumpulan untuk pemrograman 32 bit,
komponen dalam katagori ini adalah : TabControl,
PageControl, ImageList, ProgressBar, UpDown dan
lain-lain
d. System, DatAccess, DataControl, Ado dan lain-lain.
4. Object Inspector adalah bagian Delphi yang berisi Properti
dari suatu komponen yang sedang aktif, dan kumpulan
Event yang dapat dilakukan terhadap suatu komponen.
5. Form Design adalah tempat dimana pemrogram
melakukan aksinya untuk menampilkan interfacing anatar
user dan komputer. Pada form inilah komponen-komponen
dari Component Palete diletakan.
6. Code Editor adalah sisi belakang dari sebuah sistem. Dia
berisi koe-kode program yang berkaitan dengan suatu
raksi terhadap event dari suatu komponen.

Informasi Pemrograman Delphi 5


Object Inspector

Class atau
type data

Nama Object
yang sedang
aaktif

Cetakan yang
akan ditampilkan
diform

Nama Object yang akan


digunakan dalam
pemrograman

object inspector adalah suatu bagian dari IDE untukmengatur


properties dari suatu object dalam moda design time. Item yang
ditunjuk adalah item-item yang sering diubah. Dalam object
inspector terdapat dua bagian, yaitu : properties kegunaannya
untuk mengatur properties dari suatu object. Dan event adalah
suatu kejadian yang dapat dikenakan terhadap object: bagian
event adalah seperti berikut:

Informasi Pemrograman Delphi 6


Nama
Class

Salah satu kejadian yang dapat


dikenakan pada object tersebut

Nama
Object

Beberapa komponen yangsering digunakan dalam mata kuliah


ini:

Label: digunakan sebagai alat Output, biasanya tulisan-


tulisan yang tidak akan diproses lebih lanjut.

Edit : digunakan untuk alat input data dan juga dapat


digunakan untuk menampilkan data di layar

Button : digunakan sebagai tombol perintah misalnya


untuk tombol Proses dan lain-lain

Checkbox : digunakan sebagai pilihan dimana pilihan


tersebut dapat dipilih lebih dari satu pilihan, misalnya
hobby

Radiobutton : digunakan sebagai pilihan dimana pilihan


tersebut hanya dapat dipilih satu pilihan saja, misalnya
jenis kelamin

Informasi Pemrograman Delphi 7


Listbox : digunakan untuk mendaftar sesuatu yang lebih
dari satu, Listbox tidak dapat diinput secara interaksi
langsung

Combobox: merupakan perpaduang antara edit dan listbox,


dengan demikian combobox dapat diisi secara langsung
atau dari pilihan daftar yang tersedia

Groupbox : digunakan untuk mengelompokan komponen


kedalam suatu kotak

Radiogroup : digunakan untuk mengelopokan Radiobutton


kedalam suatu kotak dan dapat diakses dengan
mengunakan index

Panel : digunakan sebagai landasar untuk komponen


lainnya. Panel digunakan untuk mempercantik tampilan

Bitbtn : hampir sama dengan button, tetapi bitbtn


dapat digunakan untuk keperluan khusus, seperti close,
ignore dan lain-lain

Main Menu : digunakan untuk membuat menu fulldown

PopUp Menu : digunakan untuk membuat popup menu

Image : digunakan untuk menamplikan gambar

Informasi Pemrograman Delphi 8


Datasource : Digunakan untuk koneksi ke table yangtelah
ditunjuk oleh komponen tabel

Table : digunakan untuk koneksi ke database, biasanya


melalui nama alias

query : digunakan untuk menyaring informasi dari tabel

Database: digunakan untuk koneksi ke database

DBGrid ; digunakan untuk menampilkan data dari table


dalam bentuk sheet

DBNavigator : digunakan untuk menelusuri tabel

DBEdit : digunakan untuk menampilkan data dari table.

Masih banyak lagi komponen yang dapat digunakan oleh


mahasiswa untuk lebih memperdalam bahasa pemrograman
Delphi. Untuk hal itu silahkan belajar sendiri dengan komponen
tersebut.

Informasi Pemrograman Delphi 9


MODUL III
MENDESAIN SEBUAH FORM

Dalam pemrograman visual ada pembalikan kaidah


pemrograman jika dibandingkan dengan kaidah pemrograman
non-visual. Programmer dapat mendesain output dari suatu
program, kemudian merancang yang menjadi input, apa yang
menjadi output dan megaimana proses yang terjadi.
Untuk keperluan tersebut Delphi menyediakan suatu TOOLS
yang disebut Component Palete yang terdiri beberapa katagori.
Setiap katagori terdiri dari beberapa komponen (object) yang
dapat ditempelkan pada form.

selain Component Palete, Delphi menyediakan Object Inspector,


yang berfungsi untuk mendefinisikan nilai atau atribut suatu
komponen.
Pada awalnya setiap komponen memiliki nilai standard masing-
masing, tugas pemrogram adalah apakan nilai standard tersebut
akan diganti atau tidak.

Informasi Pemrograman Delphi 10


Nilai standars dari
komponen form

Mendesain Sebuah Form

Form adalah tempat dimana komponen tetempelkan, dan form


adalah alat antarmuka antara sistem dan pemakai. Ada
beberapa cara untuk mendesainsebuah form:
1. a. pilih salah satu komponen dari kompunen palete
sehhingga komponen tersebut seperti dipijit

Komponent yang dipilih

Informasi Pemrograman Delphi 11


b. bawa pointer mouse pada form dimana komponen
tersebut akan diletakan, kemudian klik dan drag tombol
mouse kiri membentuk sebuah kotak sebesar ukuran
komponen yang diinginkan.
c. Pada saat komponen tersebut dipilih, pemrogram dapat
mengganti properties dari komponen tersebut pada
item yang ingin diubah pada Object Inspector.
2. a. Klik ganda tombol mouse kiri pada komponen yang
akan ditempelkan
b. Komponen tersebut akan tertempel pada form
ditengah-tengah form.
c. Pindahkan posisinya sesuai kebutuhan, dan ubahkan
propertiesnya sesuai kebutuhan juga.

Komponen yang sedang dipilih

Merapikan Komponen

Pengaturan letak komponen terkadang sangat sulit agar supaya


terlihat rapi, jika dilakukan secara manual. Untuk keperluan
perapian tersebut Delphi menyediakan sarana yang mengenai:

1. ukuran kompnen
2. spasi antara komponen
3. perapian komponen
4. dan lain-lain

Informasi Pemrograman Delphi 12


Merubah ukuran komponen secara general

1. pilih semua komponen yang akan diubah ukurannya


dengan syarat hasilnya semua ukuran dari
komponenyang dipilih adalah sama.
2. klik kanan pilih size, maka akan muncul kotak dialog
sebagai berikut:

3. pilih option yang dikehendaki, apakah akan merubah


pajang atau tinggi.
4. option yang tersedia, adalah:
a. tidak ada perubahan
b. merubah semua ukuran komponen yang terpilih
sama dengan ukuran kmponen tang terkecil
c. merubah semua ukuran komponen yang terpilih
sama dengan ukuran kmponen tang terbesar
d. merubah semua ukuran komponen yang terpilih
secara manual
e. jika option telah dipilih, klik tombol OK

Informasi Pemrograman Delphi 13


Sebelum diubah ukurannya. Setelah diubah
ukurannya

Merubah perapian komponen

1. pilih semua komponen yang akan diubah perapiannya


2. klik kanan pilih align, maka akan muncul kotak dialog
sebagai berikut:

3. pilih option yang dikehendaki


4. option yang tersedia, adalah:
a. tidak ada perubahan
b. rata kiri
c. rata tengah
d. rata kanan
e. jarak antar komponen sama
f. tengah-tengan window

Informasi Pemrograman Delphi 14


sebelum dirapi kan setelah dirapikan

Informasi Pemrograman Delphi 15


MODUL IV
KONSEP EVENT DRIVEN

Pemrograman visual merupanan pemrograman yang


berorientasi pada Object. Setiap Object memiliki karakteristik
dan memiliki kelakuan (Method). Untuk mengolah atau
memanipulasi karakteristik suatu object, pemrogram dapat
melakukannya dengan dua cara, yaitu : pertama pada saat
mendesain form, object yang ditempelkan pada form tersebut
dapat dimanipulasi karakteristiknya melalaui jendela Object
Inspector. Ker\dua: pada saat program dijalankan. Manipulasi
seperti ini harus menggunakan prosedur.
Selain karakteristik object juga memunyai kelakuan (event)
artinya kalakuan apa saja yang dapat dikenakan pada object
tersebut, misalnya object Button memiliki event onclick, onenter
dan lain-lain. Dengan adanya event tersebut, pemrogram tidah
haus membuat kode program untuk setiap event. Tetapi hanya
event-event yang akan dipakai dalam suatu program sjan yang
ditanggapi. Hal tersebut diatas dapat diartikan ada aksi (onclick,
onenter) ada reaksi (suatu program yang dibuat oleh
pemrogram untuk menanggapi jika salah satu event pada suatu
object). Istilah aksi dan reaksi itu dikenal dengan event drivent.
Hasil dari event-m drivent adalah sebuah prosedur. Cara
membuat suatu event dari object adalah:
1. Pilih object yang akan dibuat event-nya
2. Pilih tabulasi Event pada kotak Object Inspector
3. Klik ganda pada even yang dikehendaki
4. hasilnya adalah :

Informasi Pemrograman Delphi 16


Object
Prosedur yang tercipta

Event yang akan ditanggapi

Dalam kode program yang tercipta adalah:

Nama class dari form yang aktive

Parameter

Nama Event

Nama Object

Bagian tubuh dari prosedur tempat


pemrogram membuat kode program untuk
menanggapi event

Bagian tubuh prosedur, adalah tempat membuat kode program


guna menenggapi event dari object tersebut. Delphi dalam hal
ini memberikan kemudahan dengan wizard-nya. Pemrogram
hanya mengetikan nama object dan titik, maka Delphi akan
menampilkan semua properties dan method yang dimiliki oleh
object tersebut.

Informasi Pemrograman Delphi 17


Contohnya prosedur didalam gambar tercipta untuk menangapi
jika onject button diklik.
Dalam tubuh prosedur, ketikan form1 ( akan mengganti judul
form dengan tulisan tertentu), kemudian ketikan titik, maka
akan muncul wizard seperti terlihap pada gambar. Untuk
membuat judul form , properties yang harus diganti adalah
Caption. Kecikan c, maka baris active pada wizard akan
mengarah pada baris yang huruf awalnya c, pindahkan baris
active ke tulisan caption kemudian tekan spacebar pada
keyboarxd. Hasilnya adalah:

Form1.Caption=’Latihan Satu’;
Jika program dijalankan, pada saat tombol button dilkik, judul
form berubah menjadi ‘Latihan Satu’.

Program yang terbentuk dalam pemrograman Delphi terdiri dari


project dan unit. Yang kita oleh adalah unit, dan project
merupakan kumpulan unit-unit seperti :

program Project1;
uses Nama Program
Forms, Bagian uses untuk memanggil unit1
Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

begin
Application.Initialize;
Bagian utama
Application.CreateForm(TForm1, Form1);

Informasi Pemrograman Delphi 18


Application.Run;
end.

Sedangkan unit-unit dalam Delphi strukturnya adalah:

unit Unit1;

Nama Unit
interface
uses
Digunakan untuk
memanggil munit
Windows, Messages, SysUtils, Classes, Graphics,
klain yang
Controls, Forms, Dialogs, StdCtrls; diperlukan

type
Class form
TForm1 = class(TForm)
Button1: TButton;
Object yang ditempel pada form
procedure Button1Click(Sender: TObject);
private Prototype prosedur
{ Private declarations }
public Untuk deklarasi
variable,prosedur lokal
{ Public declarations }
end;
Untuk deklarasi
variable,prosedur public

var Untuk deklarasi variable


Form1: TForm1;

implementation

{$R *.DFM}

Informasi Pemrograman Delphi 19


procedure TForm1.Button1Click(Sender: TObject);
begin Tubuh dari prosedur

Form1.
end;
end.

Informasi Pemrograman Delphi 20


MODUL V
VARIABLE, CONSTANTA, TYPE RECORD

Pembuatan program kadang memerlukan suatu tempat


sementara untuk menampung suatu nilai untuk perhitungan
selanjutnya atausebelum disimpan. Alat penampuny suatu nilai
disebut dengan variable.
Variable dapat bersifat global artinya dapat dipakai diseluruh
program atau dapat bersifat lokal artinya variable tersebut
hanya hidup dalam suatu prosedur atau fungsi saja, setelah
keluar dari prosedur atau fungsi maka variable tersebut tidak
dikenal. Setiap variable memiliki type data, assumsi penulis
Mahasiswa telah mengenal berbagai type data pada mata kuliah
sebelumnya, sehingga tidak akan dibahas disini.
Untuk mendeklarasikan suatu variable, sintaknya adalah:

Var nama_variable : type data;

Letak pendeklarasian tergantung pada sifat dari variable


tersebut, jika bersifat global, variable dideklarasikan dibaeah
type dan jika bersifat lokal, variable dideklarasikan dalam
prosedur atau fungus sebelum begin.

Program yang baik adalah program yang jika dibaca oleh orang
lain, maka orang tersebut mengerti alur dari program tersebut.
Salah satu cirri program yang baik adalah tidak ada angka
didalamnya. Permasalahannya, misalnya ada suatu rumus yang
memerlukan suatu angka sebagai elemen dari rumus tersebut
dan angka tersebut sering digunakan.

Informasi Pemrograman Delphi 21


Untuk menangani hal tersebut, maka angka tersebut diberi
nama, dan nama tersebut bersifat tetap selama program
berjalan. Nama seperti diatas disebut dengan konstanta. Jadi
konstanta bernilai tetap selama program berjalan. Deklarasi
konstanta adalah :

Const nama_konstanta := nilai;

Seperti variable konstanta dapat bersifat global dan bersefat


lokal.

Delphi telah menyediakan type data standard seperti intger, real


dan lain-lain, tetapi kadang-kadang pemrogram membutuhkan
suatu type data ciptaannya sendiri untuk mendukung
programnya. Pada dasarnya setiap terjadi penciptaan form,
Delphi menciptakan type dara form yang merupakaan turunan
dari class TForm. Yang didalam type form tersebut terdiri dari
object yang ditempelkan pada form tersebut, sepertu label, edit,
button dan lain-lain.
Diluar itu pemrogram dapat menciptakan type data sendiri
misalnya tipe record atau tipe data yang lain. Sintak
mendeklarasikan type adalah:

Type nama tipe = class type


Deklarasi object
End;

Sedangkan deklarasi type record adalah:

Informasi Pemrograman Delphi 22


type
nama_type = record
deklarasi variable;
end;

Informasi Pemrograman Delphi 23


Contoh deklarasi type

type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Button1: TButton;
private
{ Private declarations }
public
{ Public declarations }
end;

Contoh deklarasi type record

type

TPoint = record
X : Single;
Y: Single;
end;

dengan deklarasi type tersebut kita telah mempunyai tipe data


yang baru, dengan demikian kita dapat mendeklarasikan
variable terhadap type date tersebut.

Contoh:

Informasi Pemrograman Delphi 24


Var
Point: Tpoint;
Form1:Tform1;

Informasi Pemrograman Delphi 25


MODUL VI
STATEMENT DASAR SELECTION

Ada tiga bahasan penting dalam pemrograman. Yang


merupakan dasar dari penguasaan pemrograman itu sendiri.
Materi yang akan dibahas pada bagian ini adalah :
1. Pernyataan sequensial
2. Pernyataan percabangan
3. Pernyataan perulangan

Pernyataan sequensial
Program adalah seatu kumpulan pernyataan yang akan
dieksekusi secara terurut dari pernyataan yang pertama sampai
pernyataan yang terakhir.
Pernyataan sequensial adalah pernyataan setandard artinya
pernyataan yang akan dieksekusi secara berturut-turut.
Contoh:

X:=2;
Y:=8;
Z:=X*Y;
Write(Z);

Dari kumpulan pernyataan tersebut, pernyataan X:=2 akan


dieksekusi pertama kemudian pernyataan yang ada dibawahnya
dan seterusnya sampai pernyataan terakhir yaitu write(Z);.

Informasi Pemrograman Delphi 26


Pernyataan Percabangan
dalam suatu program tidak hanya terdapat pernyataan
sequensial saja tetapi kadang kala ada pernyataan yang tidak
mengeksekusi pernyataan berikutnya tetapi loncat pada
pernyataan yang ada pada baris tertentu sesuai dengan kondisi
saat itu. Pernyataan yang memungkinkan pelompatan eksekusi
disebut pernyataan percabangan. Ada beberapa pernyataan
percabangan, diantaranya adalah:
 pernyataan IF
 pernyataan Case

Pernyataan IF
Pernyataan IF digunakan untuk mencabang urutan eksekusi
sesuai kondisi yang ada. Ada beberapa macam pernyataan IF,
yaitu:

IF…Then.

Sintaknya adalah
If Kondisi then
Pernyataan jika kondisi memenuhi;

Jika pernyataan lebih dari satu baris, maka harus diawali dengan
Begin dan diekhiri dengan End.

Contoh :

Informasi Pemrograman Delphi 27


If x>90 then

Begin
Hasil := (x+5)*y;
Y := y-10;
End;

Dengan pernyataan If tersebut maka pernyataan diantara Begin


dan End hanya akan dieksekusi jika x>90, dan jika x<=90 maka
eksekusi berikutnya adalah pada pernyataan setelah end.

IF … Then … Else

Sintaknya adalah

If kondisi then
Pernyataan jika kondisi memenuhi
Else
Pernyataan jika kondisi tidak memenuhi;

Jika pernyataan lebih dari satu baris, maka harus diawali dengan
Begin dan diekhiri dengan End.
Pernyataan setelah then tidak boleh diakhiri dengan titik koma.

Contoh:

If x > 90 then

Informasi Pemrograman Delphi 28


begin
Hasil:=x + y –5;
Y:=y-10;
End
Else
begin
Hasil:=x – y + 5
Y := y-10;
End;

Pernyataan If juga hanya menampung dua kondisi yaitu benar


atau salah, jika ada suatu kondisi yang meiliki banyak
kemungkinan, pernyataan IF dapat menanganinya dalam bentuk
If bersarang atau If dalam If.
Sintaknya adalah :

If kondisi then
If kondisi then
Pernyataan benar
Else
Pernyataan salah2
Else
Pernyataa salah1;
Atau
If kondisi then
Pernyataan benar1
Else
If kondisi then
Pernyataan benar2

Informasi Pemrograman Delphi 29


Else
If kondisi then
Pernyataan benar3
Else
Pernyataan salah;

Karena pernyataan If hanya menampung dua kemungkinan, jika


ada N kemungkinan maka jumlah if adalah N-1.
Pernyataan If tyangterakhir dapat disederhanakan dengan
menggunakan pernyataan Case

Pernyataan Case
Pernyataan Case adalah untuk menyelseaikan kemungkinan
yang lebih dari dua, misalnya konversi bulan dalansatu tahun (1
adalah januari, 2 adalah pebruari danseterusnya).
Sintaknya adalah ;

Case kondisi of
Case Kondisi1:
Pernyataan1;
Case kondisi2 :
Pernyataan2;



else
pernyataan jika salah;
end;

Informasi Pemrograman Delphi 30


Contoh

read (I);
case I of
1..5: Caption := 'Low';
6..9: Caption := 'High';
0, 10..99: Caption := 'Out of range';
else
Caption := '';
end;

Informasi Pemrograman Delphi 31


MODUL VII
STETEMENT DASAR LOOP

penyataan perulangan adalah pernyataan yang memungkinkan


suatu eksekusi yang berulang pada suatu pernyatan. Ada
beberapa pernyataan perulangan adalah sebagai berikut:
1. Penyataan For
2. Pernyataan While
3. Pernyataan Repeat

Pemrogram harus jeli memilih pernyataan perulangan ini, kapan


harus menggunakan pernyataan For, kapan menggunakan
pernyataan While dan kapan menggunakan pernyataan Repeat.
Secara garis besar ada dua katagori pernyataan perulangan
yaitu perulangan yang yang sudah tentu jumlah
perungangannya dan perulangan yang keluar dari perulangan
berdasarkan kondisi tertentu. Sehingga jumlah perulangannya
tidak diketahui.
Perulangan yang jumlah perulangannya sudah tentu adalah :
FOR … DO dan perulangan yang berdasarkan kondisi adalah
While dan Repeat

FOR…DO

Sintaknya adalah :

For Counter:=Awal to Akhir do


Pernyataan yang diulang;

Informasi Pemrograman Delphi 32


Perulangan ini bersifat increment adrinya dimulai dari counter
yang kecil sampai batas dimana batas akhir lebbih besar dari
batas akhir-1. jika ingin melakukan perulangan menurun, maka
sintaknya adalah:

For Counter:= Awal DownTo Akhir do


Pernyataan yang diulang;

Dimana Counter adalah variable pencacah


Awal adalah batas awal dan akhir adalah batas akhir
perulangan, dengan mengetahui batas awal dan atas akhrnya
maka jumlah perulangan adalah akhir-awal.

Contoh:

Hasil=0;
For I:=1 to 10 do
Hasil:=hasil+I;

Program tersebut untuk menghitung


1+2+3+4+5+6+7+8+9+10 yang disimpan pada variable hasil.

While … Do

Berbeda dengan For … Do, jumlah perulangan pada while tidah


diketahui. Eksekusi akan keluar dari perulanga jika suatu kondisi
tidak terpenuhi. Jadi pernyataan While akan melakukan
perulangan selama keadaan atau kondisi benar.

Informasi Pemrograman Delphi 33


Sintaknya adalah :

While Kondisi Do
Pernyataan yang diulang;

Dengan sintak seperti itu, jumlah minimum perulangan adalah


NOL.
Pernyataan for jika dikonversi ke While menjadi :
counter :=Awal;
while counter <= Akhir do
begin
Pernyataan yang diulang;
Counter:=Counter+1;
end;

Contoh:
Awal:=1;
Counter:=Awal;
While Counter<=Akhir do
Begin
Hasil:=Hasil+Awal;
Counter:=Counter+1;
End;

Repeat

Informasi Pemrograman Delphi 34


Pernyataan Repeat hampir sama dengan pernyataan While
tetapi jumlah minimum perulangan adala SATU karena
pengujian dalam pernyataan Repeat berada diakhir. Sintak
pernyataan Repeat adalah :

Repeat
Pernyataan yang diulang;
Until kondisi;

Perulangan akan terjadi selama kondisi salah.

Informasi Pemrograman Delphi 35


MODUL VIII
BEKERJA DENGAN BANYAK FORM

Dalam pembuatan program atau sistem di dunia nyata


kebanyakan program terdiri dari banyak form sebagai unit dan
dikoordinasikan oleh form utama. Untuk membuat atau
menambah form ke dalam aplikasi adalah dengan cara pilih
menu

File> Form, atau klik tool

Hal-hal yang perlu diperhatikan dalam program dengan banyak


form, adalah sebagai berikut:
1. pengaktifan form lain dari suatu form.
2. penutupan form saat tidak diperlukan lagi.

Pengaktifan form dapat dilakukan dengan perintah:


1. <nama form>.show, perintah ini digunakan untuk
mengaktifkan form, dan hasilnya from yang aktif dapat di-
desible untuk kebali mengaktifkan form yang ada di
belakangnya.
2. <nama form>.showmodal, perintah ini untuk
mengaktifkan form, dan hasilnya form yang aktif akan
selalu on top.
Sedangkan untuk menutup sebuah form untuk kembali ke form
pemanggil dalat dilakukan dengan perintah: <nama
form>.close.

Informasi Pemrograman Delphi 36


Contoh

Berikut adalah form-form dalam sebuah project:


Form Utama:

Form Penjumlahan Form Perkalian

Form Pengurangan Form Operasi string

Komponen dan properties yang diperlukan


Form1
Component Properties Value
Label1 Caption Contoh Operasi dengan
mengunakan banyak form
Label2 Caption Hasil penjumlahan
Label3 Caption Hasil Pengurangan
Label4 Caption Hasil Perkalian
Label5 Caption Total
Label6 Caption Hasil Operasi String
Name LblHasil
Button1 Caption Total
Edit1 Name Edhjumlah

Informasi Pemrograman Delphi 37


Edit2 Name EdhKurang
Edit3 Name EdhKali
Edit4 Name Edtotal

Form2
Component Properties Value
Label1 Caption BilA
Label2 Caption BilB
Bitbtn1 Kind bkOK
Bitbtn Kind bkNo

Form3
Component Properties Value
Label1 Caption BilA
Label2 Caption BilB
Bitbtn1 Kind bkOK
Bitbtn Kind bkNo

Form4
Component Properties Value
Label1 Caption BilA
Label2 Caption BilB
Bitbtn1 Kind bkOK
Bitbtn Kind bkNo

Form5
Component Properties Value
Radiogroup1 Caption Olahraga
Items Lari
Catur
Renang
Bitbtn1 Kind bkOK
Bitbtn Kind bkNo

Kode program untuk membuat aplikasi tersebut adalah:

Informasi Pemrograman Delphi 38


unit Unitutama;

procedure TForm1.Exit1Click(Sender: TObject);


begin
close;
end;

procedure TForm1.Penjumlahan1Click(Sender: TObject);


var
bila,bilb : integer;
begin
form2 :=Tform2.create(self);
Form2.showmodal;

if (form2.modalresult=mrok) then
begin
with form2 do
begin
bila:=strtoint(edit1.text);
bilb:=strtoint(edit2.text);
end;
edhjml.text:=inttostr(bila+bilb);
end
else
edhjml.text:='0';

form2.free;
end;

Informasi Pemrograman Delphi 39


procedure TForm1.Perkalian1Click(Sender: TObject);
var
bila,bilb : integer;
begin
form3 :=Tform3.create(self);
Form3.showmodal;

if (form3.modalresult=mrok) then
begin
with form3 do
begin
bila:=strtoint(edit1.text);
bilb:=strtoint(edit2.text);
end;
edhkali.text:=inttostr(bila*bilb);
end
else
edhkali.text:='0';
form3.free;
end;

procedure TForm1.Pengurangan1Click(Sender: TObject);


var
bila,bilb : integer;
begin
form4 :=Tform4.create(self);
Form4.showmodal;

if (form4.modalresult=mrok) then

Informasi Pemrograman Delphi 40


begin
with form4 do
begin
bila:=strtoint(edit1.text);
bilb:=strtoint(edit2.text);
end;
edhkurang.text:=inttostr(bila-bilb);
end
else
edhkurang.text:='0';

form4.free;
end;

procedure TForm1.Button1Click(Sender: TObject);


var
jml,kurang,kali : integer;
begin
jml:=strtoint(edhjml.text);
kurang:=strtoint(edhkurang.text);
kali:=strtoint(edhkali.text);
edtotal.Text := inttostr(jml+kurang+kali);
end;

procedure TForm1.OperasiString1Click(Sender: TObject);


var
str : string;
begin
form5 :=Tform5.create(self);

Informasi Pemrograman Delphi 41


Form5.showmodal;

if (form5.modalresult=mrok) then
begin
with form5 do
begin
if rblari.checked=true then
str:='Baik untuk menguji nafas'
else
if rbcatur.checked=true then
str:='Baik untuk mengasah otak'
else
str:='Baik untuk menyelamatkan
diri dari banjir';
end;
lbhasil.Caption:=str;
end
else
lbhasil.Caption:='';

form5.free;
end;

end.

Informasi Pemrograman Delphi 42


MODUL IX
PEMROGRAMAN DATA BASE ( BACK END)

Kalau bericara peorograman data base, kita dapat


memisahkannya menjadi dua bagian, yaitu : pemrogramam
Back End atau pemrograman basis datanya, seperti membuat
table, membuat query, membuat relasi dan sebagainya. dan
pemrograman Front End yaitu pemrograman yang menyediakan
antarmuka sistem database dengan pemakai. delphi
menyediakan pemrograman kedua-keduanya. pada bab ini akan
bibahas tentang pemrograman Back End-nya, sedangkan
pemrograman Front End akan dibahas pada bab selanjutnya.

Pemrograman Back End


Untuk membuat database sendiri dibutuhkan aplikasi lain diluar
Delphi, tetapi database standar Delphi adalah paradox yang
secara otomatis disertakan pada saat menginstal Delphi.
Paradox dapat diaktifkan dengan dua cara:

1. Pilih Start> Programs> Borland Delphi 7 > Database


Desktop
2. Pada saat menjalankan Delphi
pilih menu Tools> Database Desktop
setelah memilih DataBase Desktop. Maka akan muncul
jendela paradox seperti berikut:
langkah-langkah mebuat database adalah:
1. Membuat alias untuk tempat table di letakan.

yang harus dilakukan adalah :


• klik tombol New
• Database alias diisi dengan nama alias
• Drive type:pilih salah satu, misalnya standard
untuk paradox.
2
• Item yang tidak usah diubah
• Klik tombol OK
2. Pilih menu File> New> Table
3. Pilih Paradox 7 dan klik tombol OK, makan jendela
pengisian struktur table muncul seperi dibawah ini

a. isi field nama dengan atribut suatu table misalnya


“NIM”, “NAMA” dan lain-lain, pindahkan kursor pada
kolom type, kemudian tekan space bar, maka akan
muncul daftar type dan Anda tinggal memilih salah satu
diantaranya.

b. Pada kolom size disi jika type datanya Alpha jika selain
Alpha size terisi secara automatis.

3
c. Kolom key digunakan untuk atribut yang dijadikan
kunci, caranya tekan tombol space bar.

d. Item-item sebelah kanan jendela digunakan untuk


membuat aturan dari atribut tersebut.

e. Setelah pengisian Atribut selesai, klik tombol Save as...


unruk menyimpan table tersebut.

langkah kerja diatas adalah untuk membuat struktur satu tabel,


jika dalam database tersebut lebih dari satu tabel, secara
normalisasi tabel-tabel tersebut dapat direlasikan dengan tabel
yang lain untuk kepentingan t\integritas data. untuk dapat
menmerelasikan dua tabel, pada tabel anak (sisi N) harus ada
kunci tamu sebagai atribut penghubung dengan tabel induk (sisi
1). cara merelasikan dua tabel adalah:
1. buka struktur tabel anak dengan cara
a. Klik menu Tools, pilih Utility, pilih Restructure, maka
tampil jendela:
b. Pada ComboBox Table Properties, pilih Referential
Integrity, klik tombol Define jika belum ada atau klik

4
tombol Modify jika akan mengedit relasi yang telah
ada.
c. Jendela seperti dibawah ini akan muncul.

d. pilih kunci tamu pada table induk, kemudian klik


tombol anak panah ->, pilih table induk dan klik
tombol anak panah <-.
e. Kilik tombol OK, untuk menyimpan relasi tersebut.

5
f. untuk mengisi atau mengedit data tabel, tampilan

jendela table adalah


g. untuk menambah, mengedit atau mengapus data,
tabel yangterbuka harus dalam modus Edit, dengan
cara tekan tombol F9.

6
MODUL X
PEMROGRAMAN DATA BASE (FORNT END)

Delphi menyediakan dua cara untuk membuat program basis


data. cara pertama adalah cara konvensional, yaitu dengan
menggunakan komponen TTable. cara ini ini biasanya untuk
pemrograman basis data pada komputer stand Alone. cara
kedua dengan SQL (Structured Query Language) dan biasanya
digunakan untuk pemrograman klien/server. SQL akan dibahas
pada bab selanjutnya.
Hubungan file data base dengan Delphi dalam pemrograman
data abse adalah

BDE
File database (Borland Program Anda
(*.DB, Database
*.DBF) Engine)

Dibutuhkan suatu mesin yang menjadi penghubung antara file


database dengan program yang dibuat Delphi. Delphi
menyediakan mesin konverter tersebut yang dikenal dengan
BDE.
Dalam pemrograman Fornt End ini dibutuhkan dua katagori
komponen untuk dapat membuat program database, yaitu:
7
1. Data Access yang terdiri dari;
a. DataSource
b. Table
c. Query
d. StoredProc
e. Database
f. DLL
2. Data Control yang terdiri dari :
a. DBGrid
b. DBNavigator
c. DBText
d. DBEdit
e. DBMemo
f. DBImage
g. DBListBox
h. DBComboBox
i. DLL

Dasar-Dasar Pemrograman Data Base

Untuk membuat aplikasi data base yang sederhana, yang perlu


disiapkan adalah komponen Ttable yang akan menghubungkan
program Anda dengan file data base yang ada di hard disk. Ada
tiga properties yang penting dari Ttable yang perlu diisi, yaitu:

8
1. DataBaseName, menujuk tempat dimana file database
disimpan, biasanya menjunjuk alias dari path database
tersebut.
2. TableName, berisi nama-nama table yang ada pada
direktori yang ditunjuk.
3. Active, diisi true jika table tersebut ingin dibuka(active)
dan diisi false jika teble tersebut tetap tertutup (Close).
Setelah Ttable terhubung dengan database, telpelkan
TdataSource, untuk menghubungkan Ttable dengan komponen
yang menjadi antarmuka database dengan user. Properties yang
harus diisi dalam TdataSource adalah DataSet, yaitu diisi
dengan nama Ttable yang yang diinginkan. Setelah itu,
tempelkan komponen yang akan dijadikan antarmuka antara
database dengan user, seperti DBEdit, DBGrid dan lain-lain.
Properties yang harus diisi dari komponen interfacing itu adalah:
1. DataField, diisi dengan atribut dari suatu table
2. DataSource, diisi dengan nama TdataSource

Table dapat dimanipulasi sesuai dengan kebutuhan user,


seperti:
1. Menuju record pertama, dengan prosedur FIRST
2. Menuju record terakhir, dengan prosedur LAST
3. Menuju record berikutnya, dengan prosedur NEXT
4. Menuju record Sebelumnya, dengan prosedur PRIOR
5. Menguji apakah kursor berada pada awal record, dengan
prosedur BOF

9
6. Menguji apakah kursor berada pada akhir record, dengan
prosedur EOF
7. Menutup Tabel, dengan prosedur Close atau properties
active Ttable diset False
8. Membuka Table, dengan prosedur Open atau properties
active Ttable diset True
9. Mengakses Field:
Var s: string;
S:= Table.Fields[0].AsString;, untuk field yang tipe
datanya string
Atau
S:= Table.FieldByName[‘Name’].AsString;
10. Mengisi Field
Table.Fields[0].asString:=’Gurame’;
Atau
Table.FieldByName[‘Nama’].AsString:=’Gurame’;
11. Mengisi Table
Mengisi tabel dengan record baru dapat dilakukan dengan
dua cara:
1. dengan perintah Insert, menyisipkan record pada
posisi record aktif
2. dengan perintah Append, menambah record pada
posisi akhir record
12. Menghapus record, dengan prosedur DELETE
13. Mengedit Record, dengan prosedur EDIT
14. Menyimpan record, dengan prosedur POST

10
15. Mencari data
Mencari data atau record dalam tabel dapat dilakukan
dengan perintah:
1. FindKey, mencari dengan record dengan key, yaitu
menggunakan index. Jikan tablel terindex berdasarkan
nomor, anda dapat mencari record dengan nomor ‘123’:
Table.FindKey(123);
2. FindNearest, hampir sama dengan FindKey, tetapi
FindNearest mencari record yang mirip.
Table.FindNearest([‘Agus’]), untuk mencari semua
record yang bernama Agus.
3. SetKey..GotoKey, hampir sama dengan findKey:
Table.SetKey;
Table.Fields[0].AsInteger:=123;
Table.GotoKey;
4. SetKey..GotoNearest, hampir sama dengan FindNearest
Table.SetKey;
Table.Fields[0].AsString:=’Agus’;
Table.GotoNearest;
5. ApplayRange
Pencarian dengan ApplyRange akan membatasi record
yang ditampilkan sesuai dengan criteria. Dengan
perintah ini Anda harus menentukan dahulu batasan
record yang akan ditampilkan dengan menggunakan
SetRangeStart dan SetRangeEnd.
Table.SetRangeStart;

11
Table.Fields[0].AsInteger:=100;
Table.SetRangeEnd;
Table.Fields[0].AsInteger:=2000;
Table.ApplyRange;
6. CancelRange
Perintah ini digunakan untuk membatalkan perintah
ApplyRange.

Contoh Program Database Sederhana

Form Utama

12
Form tambah Data

Keterangan :
Tnegara adalah Nama Ttable dengan :
DatabaseName : DBDEmos
TableName : Country.db
DSNegara adalah Nama DataSource dengan DataSet :
Tnegara

Kode Programnya adalah:

unit Unitdbs;

interface

uses

13
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs,
Buttons, StdCtrls, Grids, DBGrids, Db, DBTables;

type
TFormlatihdatabase = class(TForm)
DSNegara: TDataSource;
TNegara: TTable;
DBGrid1: TDBGrid;
BtTambah: TButton;
BtHapus: TButton;
BtEdit: TButton;
BitBtn1: TBitBtn;
procedure BtTambahClick(Sender: TObject);
procedure BtEditClick(Sender: TObject);
procedure BtHapusClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Formlatihdatabase: TFormlatihdatabase;

implementation

14
uses Unittmb;

{$R *.DFM}

procedure TFormlatihdatabase.BtTambahClick(Sender: TObject);


begin
formtambahdata:=Tformtambahdata.create(self);
with formtambahdata do
begin
ednama.text:='';
edibukota.text:='';
edbenua.text:='';
edluas.text:='';
edjumlah.text:='';
caption :='Menambah data';
activecontrol:=ednama;

end;
formtambahdata.showmodal;
if (formtambahdata.modalresult=mrOK) then
with TNegara,FormTambahData do
begin
append;
fieldbyname('Name').asstring:=ednama.text;
fieldbyname('capital').asstring:=edibukota.text;

15
fieldbyname('continent').asstring:=edbenua.text;
fieldbyname('area').asstring:=edluas.text;
fieldbyname('population').asstring:=edjumlah.text;
post;
end;
formtambahdata.free;
end;

procedure TFormlatihdatabase.BtEditClick(Sender: TObject);


begin
formtambahdata:=Tformtambahdata.create(self);
with TNegara,formtambahdata do
begin
ednama.text:=fieldbyname('Name').asstring;
edibukota.text:=fieldbyname('capital').asstring;
edbenua.text:=fieldbyname('continent').asstring;
edluas.text:=fieldbyname('area').asstring;
edjumlah.text:=fieldbyname('population').asstring;
caption :='Mengedit data';
activecontrol:=ednama;
end;
formtambahdata.showmodal;
if (formtambahdata.modalresult=mrOK) then
with TNegara,FormTambahData do
begin
edit;

16
fieldbyname('Name').asstring:=ednama.text;
fieldbyname('capital').asstring:=edibukota.text;
fieldbyname('continent').asstring:=edbenua.text;
fieldbyname('area').asstring:=edluas.text;
fieldbyname('population').asstring:=edjumlah.text;
post;
end;
formtambahdata.free;
end;

procedure TFormlatihdatabase.BtHapusClick(Sender: TObject);


var
s: array[0..255] of char;
begin
strPcopy(S,Format('Anda Yakin Negara %s dihapus??',
[TNegara.fields[0].asstring]));
if (application.messageBox(S,'Perhatian',MB_YESNO or
MB_ICONQUESTION)=IDYES) then
TNegara.delete;
end;
end.

17
MODUL XI
STRUCTURED QUERY LANGUAGE (SQL)

SQL adalah bahasa yang digunakan untuk membuat dan


memanipulasi beberapa tabel data yang saling berhubunga.
Keunggulan SQl adalah memungkinkan Anda untuk memcari
dan mengurutkan data tabel yang tidak memiliki index. Perintah
dalam SQL sangat banyak, dan pada modul ini nhanya akan
dibahas perintah yang seding digunakan. Untuk menggunakan
SQL dalam pemrograman Delphi, digunakan komponen QUERY
yang ada dalam katagori dataaccess.
Perintah dalah SQL adalah:
1. SELECT
Perintah ini digunakan untuk menampilkan data atau
record berdasarkan criteria tertentu.
Format penulisan perintah Select adalah:
SELECT [DISTINCT] kolom FROM table
[WHERE kondisi_pencarian]
[ORDER BY Pengurutan]
[GROUP BY Group_list]
[HAVING Having_condition]
Contoh:
Select * from country
Select Name,Capital from country where
population>8000000
A. WHERE
18
Klausa WHERE digunakan untuk memilih record yang
akan ditampilkan
Contoh:
Select * From Country where name like ‘A%’  untuk
menampilkan record yang namanya diawali
dengan huruf ‘A’

Select * From Country where name like ‘%a’  untuk


menampilkan record yang namanya diakhiri
dengan huruf ‘a’

B. ORDER BY
Klausa ORDER BY digunakan untuk mengurutkan table
berdasarkan salah satu field, baik terurut menaik
(ascending) maupun terurut menurun (descending).
Contoh:
Select * from country order by capital
Select * from country order by capital Desc
C. GROUP BY dan HAVING
Klausa GROUP BY digunakan untuk mengelompokkan
record menurut field tertentu.
Contoh:
Select continent from country group by continent.
Klausa HAVING mempunyai kegunaan mirip dengan
WHERE tetapi klausa ini digunakan untuk memberi
syarat pada klausa GROUP BY.

19
2. INSERT
Perintah ini digunakan untuk menambah data atau record
pada table.
Syntak:
INSERT INTO Table ( Field-Field)
Values(Data)
Contoh:
INSERT INTO COUNTRY (Name, Capital, Continent,
Area, Population)
Values
(“Indonesia”,”Jakarta”,”Asia”,”5200000,215000000)
Untuk mengexekusi perintah sql dalam delphi digunakan
perintah ExecSQL.

3. DELETE
Menghapus data dengan DELETE tidak berbeda jauh
dengan perintah INSERT.
Syntak:
DELETE FROM Table WHERE Field = Data

Contoh:
DELETE FROM Country WHERE Name = ‘INDONESIA’

4. UPDATE

20
Perintah UPDATE digunakan untuk mengganti nilai field
dari sebuah record.
Syntak:
UPDATE Table SET Field = data WHERE Field = Data
Contoh:
UPDATE Country SET Population = 23000000 WHERE NAME =
“INDONESIA”

Query Berparameter

Untuk meningkatkan fleksibilitas, Delphi mempunyai query yang


berparameter.

Contoh:

Select * From Country Where Name like :Nama

Parameter nama pada perintah ini dapat diganti dengan string


lain. Ada dua cara untuk mengisi parameter Nama.

1. dengan menggunakan Object Inspector.


Pilih properties SQL pada komponen Query isi dengan
perintah select seperti diatas. Kemudian isi properties
params, isi properties NAME, VALUE, dan TYPE

21
2. dengan menggunakan method parambyname
contoh:

Query1.ParamByName (’NAME’).AsString:=’C%’;

Method Komponen Query

1. Close : digunakan untuk menutup query


2. Open : digunakan untuk mengeksekusi query
3. Prepare : digunakan untuk meningkatkan performan Query
4. SQL
a. Add untuk menambah perintah SQL, seperti perintah
select
b. Clear untuk menghapus perintah yang telah ada

22
Contoh Program:

Kode program:

unit Unitsql1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls,


Forms, Dialogs,

Buttons, StdCtrls, Grids, DBGrids, Db, DBTables;


23
type

TForm1 = class(TForm)

DataSource1: TDataSource;

Query1: TQuery;

DBGrid1: TDBGrid;

Edit1: TEdit;

Button1: TButton;

BitBtn1: TBitBtn;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

24
{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

begin

query1.close;

query1.SQL.Clear;

query1.sql.Add(edit1.text);

query1.open;

end;

end.

25
MODUL XII
REPORT

Report/laporan merupakan bentuk print out dari data. Data yang


dimaksud dapat berupa data keseluruhan dari suatu tabel atau
data yang diperoleh dari suatu query pencarian. Berikut ini
adalah pembahasan bagaimana membuat report dari suatu
tabel maupun dari query.
Dalam Delphi komponen report ada beberapa seperti rave
report yang merpakan bawaan Delphi 7, quick report yang
merupakan bawaan Delphi sebelumnya, tetapi dalam Delphi
pun dapat diinstalkan quicreport dari CD-nya. Atau dapat
menggunakan report dari supplier pihak ketiga seperti fast
report dan sebagainya.
Hal-hal yang perlu diperhatikan dalam pembuatan report
adalah:
1. basis data sebagai data yang akan ditampilkan dalam
report tersebut
2. perancangan report untuk antarmukanya
3. koneksi ke aplikasi.

Komponen-komponen Quick Report


Untuk membuat report dibutuhkan komponen report, dalam
modul ini akan mmakai quick report. Komponen-komponen yang
ada dalam quick report adalah:

26
TQRLabel teks statis biasanya digunakan untuk judul atau
label.
TQRDBText untuk menampilkan field dari database.
TQRExpr untuk menampilkan expresi atau fungsi-fungsi
yang dibutuhkan.
TQRSysData unutk menampilkan informasi judul report, page
number, date and time. TQRMemo seperti
TQRLabel, tetapi komponen ini dapat menerima
text multiple lines.
TQRRichText untuk menampilkan teks berformat
TQRShape untuk menampilkan rectangles, circles and
horizontal and vertical lines.
TQRImage untuk menampilkan image statis.
TQRDBImage untuk menampilkan image dari database.

Contoh

Report dari Tabel


Sebagai contoh, kita akan membuat aplikasi yang dapat
mencetak semua data yang ada
dalam tabel MHS. Desain tampilan aplikasi tampak sebagai
berikut:

27
Sedangkan report dari aplikasi tampak sebagi berikut:

Report tersebut akan muncul setelah tombol CETAK REPORT


ditekan.
Untuk membuat program tersebut, langkah-langkah yang harus
dilakukan adalah :
1. Langkah pertama adalah membuat desain tampilan
aplikasi.
2. Tambahkan komponen button dan ubah propertiesnya
sebagai berikut
28
Properti Value
Name Button1
Caption Cetak Report

3. Selanjutnya adalah membuat report. Caranya dengan


mengklik menu FILE > NEW > APPLICATION > OTHER >
REPORT
4. Berikutnya tambahkan beberapa komponen berikut ini
beserta propertiesnya.

QUICKREPORT
Properties Value
Name Quickreport2
Page Papersize A4
Page Orientation Portrait
Dataset Form1.Table1

Keterangan:
Properties di atas mengatur report dengan ketentuan
ukuran kertas adalah A4 dan tegak. Sedangkan data yang
akan dicetak diambil dari tabel MHS (dalam hal ini
mengacu pada komponen TABLE1 pada FORM1)

QRBAND
Properties Value
Name Qrband1
Bandtype rbTitle

Keterangan:
29
QRBAND jenis rbTITLE digunakan untuk meletakkan judul
report. Jenis band ini terletak di bagian atas dari report.
Properties Value
Name QRBand2
Bandtype rBColumnheader
Frame Drawbootom True
Frame Drawleft True
Frame Drawright True
Frame DrawTop True
Color clRed

Keterangan:
Jenis band ini digunakan untuk meletakkan judul kolom
dari tabel data

Properties Value
Name QRBand3
Bandtype rbDetail
Frame Drawbootom True
Frame Drawleft True
Frame Drawright True
Frame DrawTop True

Keterangan:
Band ini digunakan untuk meletakkan data

Properties Value
Name QRBand4
Bandtype rbSummary
Frame Drawbootom True
Frame Drawleft True
Frame Drawright True
Frame DrawTop True
30
Keterangan:
Band ini digunakan untuk meletakkan beberapa hal terkait
dengan catatan data. Biasanya catatan berupa jumlah
total data atau waktu ketika report dicetak.

Properties Value
Name QRBand5
Bandtype rbPagefooter
Frame Drawbootom True
Frame Drawleft True
Frame Drawright True
Frame DrawTop True

Keterangan:
Band jenis ini digunakan untuk menuliskan beberapa hal
pada bagian footer report, misalnya nomor halaman.

QRLABEL
Komponen QRLABEL digunakan untuk menuliskan teks pada
report.
Properties Value
Name QRLabel1
Caption DATA MAHASISWA

Keterangan:
Komponen di atas diletakkan di band TITLE. Sedangkan
untuk QRLABEL2 s/d QRLABEL7 diletakkan pada band
COLUMNHEADER

31
Properties Value
Name QRLabel2
Caption NO

Properties Value
Name QRLabel3
Caption NIM

Properties Value
Name QRLabel4
Caption NAMA MAHASISWA

Properties Value
Name QRLabel5
Caption TGL LAHIR

Properties Value
Name QRLabel6
Caption ALAMAT

Properties Value
Name QRLabel7
Caption ANGKATAN

Untuk QRLABEL8 dan QRLABEL9 diletakkan di band


SUMMARY
Properties Value
Name QRLabel8
Caption JUMLAH DATA

Properties Value
Name QRLabel9
32
Caption DICEAK PADA TANGGAL

dan QRLABEL10 diletakkan di band PAGEFOOTER


Properties Value
Name QRLabel10
Caption HALAMAN

QRDBTEXT
Komponen QRDBTEXT nantinya digunakan untuk menampilkan
data, baik dari table maupun query. Dalam komponen ini
terdapat properti DATASET yang digunakan untuk mengarahkan
sumber data yang diinginkan, dan DATAFIELD yang digunakan
untuk menentukan field mana dari tabel atau query yang
datanya akan dicetak. Komponen QRDBTEXT1 s/d QRDBTEXT5
di bawah ini diletakkan di bagian band DETAIL.

Properties Value
Name QRDBTEXT1
Dataset Form1.table1
DataField NIM

Properties Value
Name QRDBTEXT2
Dataset Form1.table1
DataField NAMAMHS

Properties Value
Name QRDBTEXT3
Dataset Form1.table1
DataField TGLLAHIR
33
Properties Value
Name QRDBTEXT4
Dataset Form1.table1
DataField ALAMAT

Properties Value
Name QRDBTEXT5
Dataset Form1.table1
DataField ANGKATAN

QRSYSDATA
Sedangkan komponen QRSYSDATA bermanfaat untuk
menampilkan data-data otomatis yang dihasilkan oleh sistem,
misalnya nomor urut data, tanggal dan waktu saat itu, nomor
halaman, jumlah data total dll.
Properties Value
Name QRSysData1
Data qrsDetailNo

Keterangan:
Properti qrsDETAILNO berarti komponen tersebut
digunakan untuk menampilkan nomor urut data
(diletakkan di band DETAIL di bawah kolom NO).
Properties Value
Name QRSysData2
Data qrsDetailCount

Keterangan:

34
Properti qrsDETAILCOUNT berarti komponen tersebut
digunakan untuk menampilkan jumlah total data
(diletakkan di band SUMMARY).

Properties Value
Name QRSysData3
Data qrsDate

Keterangan:
Properti qrsDATE berarti komponen tersebut digunakan
untuk menampilkan tanggal saat itu (diletakkan di band
SUMMARY).
Properties Value
Name QRSysData4
Data qrsPageNumber

Keterangan:
Properti qrsPAGENUMBER berarti komponen tersebut
digunakan untuk menampilkan nomor halaman (diletakkan
di band PAGE FOOTER).
5. Kemudian tambahkan code berikut ini pada event ONCLICK
tombol CETAK REPORT (BUTTON1) yang ada pada FORM1
QuickReport2.Preview;

Report dari Query


Suatu report juga dapat menampilkan data dari hasil query.
Sebagai contoh, kita akan membuat aplikasi pencarian data

35
mahasiswa (menggunakan tabel MHS). Setelah proses
pencarian, data hasil pencarian akan ditampilkan ke report
untuk dicetak. Tampilannya adalah sebagai berikut:

Sedangkan tampilan hasil reportnya sebagai berikut:

Tambahkan satu tombol (BUTTION2) untuk CETAK DATA


PENCARIAN. Pada komponen QUERY, tambahkan pula perintah
SQL berikut ini pada properti SQL. SELECT * FROM MHS;
Sedangkan desain reportnya, adalah sebagai berikut :
QUICKREPORT
Properties Value
Name Quickreport2
36
Page Papersize A4
Page Orientation Portrait
Dataset Form1.Query1

QRBAND
Properties Value
Name Qrband1
Bandtype rbTitle

Properties Value
Name QRBand2
Bandtype rBColumnheader
Frame Drawbootom True
Frame Drawleft True
Frame Drawright True
Frame DrawTop True
Color clRed

Properties Value
Name QRBand3
Bandtype rbDetail
Frame Drawbootom True
Frame Drawleft True
Frame Drawright True
Frame DrawTop True

Properties Value
Name QRBand4
Bandtype rbSummary
Frame Drawbootom True
Frame Drawleft True
Frame Drawright True
Frame DrawTop True
37
Properties Value
Name QRBand5
Bandtype rbPagefooter
Frame Drawbootom True
Frame Drawleft True
Frame Drawright True
Frame DrawTop True

QRLABEL
Komponen QRLABEL digunakan untuk menuliskan teks pada
report.
Properties Value
Name QRLabel1
Caption DATA MAHASISWA

Properties Value
Name QRLabel2
Caption NO

Properties Value
Name QRLabel3
Caption NIM

Properties Value
Name QRLabel4
Caption NAMA MAHASISWA

Properties Value
Name QRLabel5
Caption TGL LAHIR

Properties Value
38
Name QRLabel6
Caption ALAMAT

Properties Value
Name QRLabel7
Caption ANGKATAN

Untuk QRLABEL8 dan QRLABEL9 diletakkan di band


SUMMARY
Properties Value
Name QRLabel8
Caption JUMLAH DATA

Properties Value
Name QRLabel9
Caption DICEAK PADA TANGGAL

dan QRLABEL10 diletakkan di band PAGEFOOTER


Properties Value
Name QRLabel10
Caption HALAMAN

QRDBTEXT
Komponen QRDBTEXT1 s/d QRDBTEXT5 di bawah ini diletakkan
di bagian band DETAIL.
Properties Value
Name QRDBTEXT1
Dataset Form1.query1
DataField NIM

Properties Value
Name QRDBTEXT2

39
Dataset Form1.query1
DataField NAMAMHS

Properties Value
Name QRDBTEXT3
Dataset Form1.query1
DataField TGLLAHIR

Properties Value
Name QRDBTEXT4
Dataset Form1.query1
DataField ALAMAT

Properties Value
Name QRDBTEXT5
Dataset Form1.query1
DataField ANGKATAN

QRSYSDATA
Properties Value
Name QRSysData1
Data qrsDetailNo

40
Properties Value
Name QRSysData2
Data qrsDetailCount

Properties Value
Name QRSysData3
Data qrsDate

Properties Value
Name QRSysData4
Data qrsPageNumber

Setelah melakukan desain report, selanjutnya tambahkan


perintah berikut pada event ONCLICK BUTTON2 (CETAK DATA
PENCARIAN)
QuickReport2.Preview;
Dan tambahkan pula perintah berikut pada event ONCLICK
BUTTON1 (CARI DATA)

procedure TForm1.Button1Click(Sender: TObject);


var query : string;
begin
Query1.SQL.Clear;
If Radiobutton1.Checked then
query := 'SELECT * FROM MHS WHERE NIM = :katakunci'
else If Radiobutton2.Checked then
query := 'SELECT * FROM MHS WHERE NAMAMHS LIKE

41
:katakunci'
else If Radiobutton3.Checked then
query := 'SELECT * FROM MHS WHERE ANGKATAN =
:katakunci'
else If Radiobutton4.Checked then
query := 'SELECT * FROM MHS WHERE ALAMAT LIKE
:katakunci';
Query1.SQL.Add(Query);
If Radiobutton2.Checked or Radiobutton4.Checked then
Query1.ParamByName('katakunci').Value :=
'%'+Edit1.Text+'%'
else If RadioButton3.Checked then
Query1.ParamByName('katakunci').Value :=
StrtoInt(Edit1.Text)
else Query1.ParamByName('katakunci').Value := Edit1.Text;
Query1.Open;
If Query1.RecordCount = 0 then MessageDlg('Data tidak
ditemukan',mtinformation,[mbOK],0);
end;

42
Latihan Satu

Source Program …….pas

unit Unitsatu;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs,
StdCtrls;

type
TFormsatu = class(TForm)
Lebartambah: TButton;
Lebarkurang: TButton;
43
Tinggitambah: TButton;
Tinggikurang: TButton;
procedure LebartambahClick(Sender: TObject);
procedure LebarkurangClick(Sender: TObject);
procedure TinggitambahClick(Sender: TObject);
procedure TinggikurangClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Formsatu: TFormsatu;

implementation

{$R *.DFM}

procedure TFormsatu.LebartambahClick(Sender: TObject);


begin
formsatu.Width :=formsatu.Width +20;
end;

procedure TFormsatu.LebarkurangClick(Sender: TObject);


begin

44
formsatu.Width :=formsatu.Width - 20;
end;

procedure TFormsatu.TinggitambahClick(Sender: TObject);


begin
formsatu.Height :=formsatu.Height +20;
end;

procedure TFormsatu.TinggikurangClick(Sender: TObject);


begin
formsatu.Height :=formsatu.Height -20;
end;

end.

Latihan Dua

45
Source Program

unit Unitdua;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs,
StdCtrls;

type
TFormdua = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
chksistem: TCheckBox;
chkmin: TCheckBox;
chkmax: TCheckBox;
chkhelp: TCheckBox;
rbnone: TRadioButton;
rbsize: TRadioButton;
rbdialog: TRadioButton;
rbsingle: TRadioButton;
rbsizetoolwin: TRadioButton;
rbtoolwindow: TRadioButton;
46
procedure chksistemClick(Sender: TObject);
procedure rbnoneClick(Sender: TObject);
procedure rbsizeClick(Sender: TObject);
procedure rbdialogClick(Sender: TObject);
procedure rbsingleClick(Sender: TObject);
procedure rbsizetoolwinClick(Sender: TObject);
procedure rbtoolwindowClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Formdua: TFormdua;

implementation

{$R *.DFM}

procedure TFormdua.chksistemClick(Sender: TObject);


var sem : Tbordericons;
begin
sem:=[];
if chksistem.Checked =true then
sem := sem + [bisystemmenu];

47
if chkmin.Checked =true then
sem := sem + [biminimize];
if chkmax.Checked =true then
sem := sem + [bimaximize];
if chkhelp.Checked =true then
sem := sem + [bihelp];
formdua.BorderIcons :=sem;
end;

procedure TFormdua.rbnoneClick(Sender: TObject);


begin
formdua.BorderStyle :=bsnone;
end;

procedure TFormdua.rbsizeClick(Sender: TObject);


begin
formdua.BorderStyle :=bssizeable;
end;

procedure TFormdua.rbdialogClick(Sender: TObject);


begin
formdua.BorderStyle :=bsdialog;
end;

procedure TFormdua.rbsingleClick(Sender: TObject);


begin

48
formdua.BorderStyle :=bssingle;
end;

procedure TFormdua.rbsizetoolwinClick(Sender: TObject);


begin
formdua.BorderStyle :=bssizetoolwin;
end;

procedure TFormdua.rbtoolwindowClick(Sender: TObject);


begin
formdua.BorderStyle :=bstoolwindow;
end;

end.

Latihan Tiga

49
Source Program

unit Unittiga;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
rbrenag: TRadioButton;
lbrenang: TLabel;
rbfitnes: TRadioButton;
lbfitness: TLabel;
rbcatur: TRadioButton;
lbcatur: TLabel;
btnulangi: TButton;
btnkeluar: TButton;
procedure btnkeluarClick(Sender: TObject);
procedure rbrenagClick(Sender: TObject);
50
procedure rbfitnesClick(Sender: TObject);
procedure rbcaturClick(Sender: TObject);
procedure btnulangiClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.btnkeluarClick(Sender: TObject);


begin
close;
end;

procedure TForm1.rbrenagClick(Sender: TObject);


begin

lbrenang.Caption :='Baik untuk mempertinggi badan'

51
end;

procedure TForm1.rbfitnesClick(Sender: TObject);


begin

lbfitness.Caption :='Baik untuk memperbesar otot'

end;

procedure TForm1.rbcaturClick(Sender: TObject);


begin

lbcatur.Caption :='Baik untuk mengasah Otak'

end;

procedure TForm1.btnulangiClick(Sender: TObject);


begin
rbrenag.Checked :=false;
rbfitnes.Checked :=false;
rbcatur.Checked :=false;
lbrenang.Caption :='';
lbfitness.Caption :='';
lbcatur.Caption :='';
end;

52
end.

Latihan Empat

Source Program

unit Unitempat;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs,

53
Buttons, StdCtrls;

type
TFormempat = class(TForm)
Label1: TLabel;
lbcontoh: TLabel;
Label3: TLabel;
edinput: TEdit;
btnproses: TButton;
GroupBox1: TGroupBox;
btnefek: TButton;
rbtebal: TRadioButton;
rbmiring: TRadioButton;
rbgarisbawah: TRadioButton;
GroupBox2: TGroupBox;
btnulangi: TButton;
bbclose: TBitBtn;
procedure bbcloseClick(Sender: TObject);
procedure btnulangiClick(Sender: TObject);
procedure btnprosesClick(Sender: TObject);
procedure btnefekClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

54
var
Formempat: TFormempat;

implementation

{$R *.DFM}

procedure TFormempat.bbcloseClick(Sender: TObject);


begin
close;
end;

procedure TFormempat.btnulangiClick(Sender: TObject);


begin
lbcontoh.Caption :='';
edinput.Text :='';
rbtebal.Checked :=false;
rbmiring.Checked :=false;
rbgarisbawah.Checked :=false;
lbcontoh.Font.Style :=[];
edinput.SetFocus ;
end;

procedure TFormempat.btnprosesClick(Sender: TObject);


begin

55
lbcontoh.Caption :=edinput.Text ;
edinput.Text :='';
end;

procedure TFormempat.btnefekClick(Sender: TObject);


begin
if rbtebal.Checked = true then
lbcontoh.Font.Style :=[fsbold]
else
if rbmiring.Checked = true then
lbcontoh.Font.Style :=[fsitalic]
else
lbcontoh.Font.Style :=[fsunderline];
end;
end.

56
Latihan Lima

Source Program

unit Unitlima;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs,
ComCtrls, StdCtrls, Buttons, ExtCtrls, Spin;

57
type
TFormlima = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
Panel1: TPanel;
Panel2: TPanel;
btnulangi: TButton;
bbclose: TBitBtn;
Panel3: TPanel;
btnefek: TButton;
lbcontoh: TLabel;
rbmaroon: TRadioButton;
rbhijau: TRadioButton;
rbnavi: TRadioButton;
rbkuning: TRadioButton;
rbmerah: TRadioButton;
rb12: TRadioButton;
rb14: TRadioButton;
btntambah: TButton;
btnkurang: TButton;
chktebal: TCheckBox;
chkmiring: TCheckBox;
chkgarisbawah: TCheckBox;
chkcorettengah: TCheckBox;

58
edukuran: TEdit;
procedure rbmaroonClick(Sender: TObject);
procedure rbhijauClick(Sender: TObject);
procedure rbnaviClick(Sender: TObject);
procedure rbkuningClick(Sender: TObject);
procedure rbmerahClick(Sender: TObject);
procedure rb12Click(Sender: TObject);
procedure rb14Click(Sender: TObject);
procedure btntambahClick(Sender: TObject);
procedure btnkurangClick(Sender: TObject);
procedure btnefekClick(Sender: TObject);
procedure bbcloseClick(Sender: TObject);
procedure btnulangiClick(Sender: TObject);
procedure edukuranEnter(Sender: TObject);
procedure edukuranKeyPress(Sender: TObject; var Key: Char);

private
{ Private declarations }
public
{ Public declarations }
end;

var
Formlima: TFormlima;

implementation

59
{$R *.DFM}

procedure TFormlima.rbmaroonClick(Sender: TObject);


begin
lbcontoh.Font.Color :=clmaroon;
end;

procedure TFormlima.rbhijauClick(Sender: TObject);


begin
lbcontoh.Font.Color :=clgreen;
end;

procedure TFormlima.rbnaviClick(Sender: TObject);


begin
lbcontoh.Font.Color :=clnavy;
end;

procedure TFormlima.rbkuningClick(Sender: TObject);


begin
lbcontoh.Font.Color :=clyellow;
end;

procedure TFormlima.rbmerahClick(Sender: TObject);


begin
lbcontoh.Font.Color :=clred;

60
end;

procedure TFormlima.rb12Click(Sender: TObject);


begin
lbcontoh.Font.Size :=12;
edukuran.Text :='12';
end;

procedure TFormlima.rb14Click(Sender: TObject);


begin
lbcontoh.Font.Size :=14;
edukuran.Text :='14';
end;

procedure TFormlima.btntambahClick(Sender: TObject);


begin
lbcontoh.Font.Size :=lbcontoh.Font.Size + 1;
if lbcontoh.Font.Size=12 then
begin
rb12.Checked :=true;
edukuran.Text :='12';
end
else
if lbcontoh.Font.Size=14 then
begin
rb14.Checked :=true;

61
edukuran.Text :='14';
end
else
begin
rb12.Checked :=false;
rb14.Checked :=false;
edukuran.Text :=inttostr(lbcontoh.Font.size);
end ;
end;

procedure TFormlima.btnkurangClick(Sender: TObject);


begin
lbcontoh.Font.Size:=lbcontoh.Font.Size - 1;
if lbcontoh.Font.Size=12 then
begin
rb12.Checked :=true;
edukuran.Text :='12';
end
else
if lbcontoh.Font.Size=14 then
begin
rb14.Checked :=true;
edukuran.Text :='14';
end
else
begin

62
rb12.Checked :=false;
rb14.Checked :=false;
edukuran.Text :=inttostr(lbcontoh.Font.size);
end ;
end;

procedure TFormlima.btnefekClick(Sender: TObject);


var fs : Tfontstyles;
begin

fs:=[];
if chktebal.Checked =true then
fs:=fs+[fsbold];
if chkmiring.Checked =true then
fs:=fs+[fsitalic];
if chkgarisbawah.Checked =true then
fs:=fs+[fsunderline];
if chkcorettengah.Checked =true then
fs:=fs+[fsstrikeout];
lbcontoh.Font.Style :=fs;
end;

procedure TFormlima.bbcloseClick(Sender: TObject);


begin

63
close;
end;

procedure TFormlima.btnulangiClick(Sender: TObject);


begin
rbmaroon.Checked :=false;
rbhijau.Checked :=false;
rbnavi.Checked :=false;
rbkuning.Checked :=false;
rbmerah.Checked :=false;
rb12.Checked :=false;
rb14.Checked :=false;
edukuran.Text :='';
chktebal.Checked :=false;
chkmiring.Checked :=false;
chkgarisbawah.Checked :=false;
chkcorettengah.Checked :=false;
lbcontoh.Font.Style :=[];
lbcontoh.Font.Color :=clblack;
lbcontoh.Font.Size :=8;
end;

procedure TFormlima.edukuranEnter(Sender: TObject);


begin

64
if (edukuran.Text <>'') and (edukuran.text<>'0') then
lbcontoh.Font.Size :=strtoint(edukuran.text);
if edukuran.Text='12' then
rb12.checked:=true
else
if edukuran.Text ='14' then
rb14.Checked :=true
else
begin
rb12.Checked :=false;
rb14.Checked :=false;
end;
end;

procedure TFormlima.edukuranKeyPress(Sender: TObject; var


Key: Char);
begin
if key =#13 then
edukuranenter(sender);
end;
end.

Latihan Enam

65
66
Source Program

unit Unitenam;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs,
Buttons, StdCtrls, ExtCtrls;

type
TFormenam = class(TForm)
Panel1: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Panel3: TPanel;
Label5: TLabel;
edbil1: TEdit;
edbil2: TEdit;
edbil3: TEdit;
edbil4: TEdit;
edhasil: TEdit;
Panel4: TPanel;

67
RG: TRadioGroup;
Button1: TButton;
Panel2: TPanel;
Button2: TButton;
BitBtn1: TBitBtn;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Formenam: TFormenam;

implementation

{$R *.DFM}

procedure TFormenam.Button1Click(Sender: TObject);


var
i,bil1,bil2,bil3,bil4 : integer;
pangkat,jumlah,kali,kurang : integer;
bagi:real;
begin

68
bil1:=strtoint(edbil1.text);
bil2:=strtoint(edbil2.text);
bil3:=strtoint(edbil3.text);
bil4:=strtoint(edbil4.text);
if rg.ItemIndex =0 then
begin
jumlah:=bil1+bil2+bil3+bil4;
edhasil.text:=inttostr(jumlah);
end
else
if rg.ItemIndex =1 then
begin
kurang:=bil1-bil2-bil3-bil4;
edhasil.text:=inttostr(kurang);
end
else
if rg.ItemIndex =2 then
begin
kali:=bil1*bil2*bil3*bil4;
edhasil.text:=inttostr(kali);
end
else
if rg.ItemIndex =3 then
begin
bagi:=bil1/bil2;
edhasil.text:=floattostr(bagi);

69
end
else
if rg.ItemIndex =4 then
begin
pangkat:=1;
for i:=1 to bil2 do
pangkat:=pangkat*bil1;
edhasil.text:=inttostr(pangkat);
end;

end;

procedure TFormenam.Button2Click(Sender: TObject);


begin
edbil1.Text :='';
edbil2.Text :='';
edbil3.Text :='';
edbil4.Text :='';
edhasil.Text :='';
rg.ItemIndex :=-1;
edbil1.SetFocus;
end;

end.

Latihan Tujuh

70
71
Source Program

unit Unittujuh;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs,
Buttons, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
List1: TListBox;
List2: TListBox;
Btisisatulist2: TButton;
BtIsiList2semua: TButton;
BtIsisatuList1: TButton;
BtIsiList1Semua: TButton;
Panel1: TPanel;
combo: TComboBox;
BtIsiCombo: TButton;
BtHapusCombo: TButton;
BtUlangi: TButton;
Label1: TLabel;
Label2: TLabel;
72
BBClose: TBitBtn;
procedure BtIsiComboClick(Sender: TObject);
procedure BtHapusComboClick(Sender: TObject);
procedure comboClick(Sender: TObject);
procedure Btisisatulist2Click(Sender: TObject);
procedure BtIsiList2semuaClick(Sender: TObject);
procedure BtIsiList1SemuaClick(Sender: TObject);
procedure BtIsisatuList1Click(Sender: TObject);
procedure BtUlangiClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.BtIsiComboClick(Sender: TObject);


begin
combo.Items.Add('Spanyol');
combo.Items.Add('Inggris');

73
combo.Items.Add('Francis');
combo.Items.Add('Belanda');
combo.Items.Add('Jerman');
end;

procedure TForm1.BtHapusComboClick(Sender: TObject);


begin
combo.Clear ;
end;

procedure TForm1.comboClick(Sender: TObject);


begin
list1.Items.Add(combo.text);
end;

procedure TForm1.Btisisatulist2Click(Sender: TObject);


begin
list2.Items.Add(list1.items.strings[list1.ItemIndex ]);
list1.Items.Delete (list1.ItemIndex);
end;

procedure TForm1.BtIsiList2semuaClick(Sender: TObject);


var i : integer;
begin
for i:=0 to list1.Items.Count -1 do
list2.Items.Add(list1.items.strings[i]);

74
list1.Clear ;
end;

procedure TForm1.BtIsiList1SemuaClick(Sender: TObject);


var i : integer;
begin
for i:=0 to list2.Items.Count -1 do
list1.Items.Add(list2.items.strings[i]);
list2.Clear ;

end;

procedure TForm1.BtIsisatuList1Click(Sender: TObject);


begin
list1.Items.Add(list2.items.strings[list2.ItemIndex ]);
list2.Items.Delete (list2.ItemIndex);
end;

procedure TForm1.BtUlangiClick(Sender: TObject);


begin
list1.Clear ;
list2.Clear ;
combo.Clear ;
end;

end.

75
Latihan Delapan

Source Program

unit Unitdelapan;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs,
StdCtrls, ExtCtrls, Menus;

76
type
TFormdelapan = class(TForm)
Menu1: TMainMenu;
File1: TMenuItem;
Exit1: TMenuItem;
Perhitungan1: TMenuItem;
SegiTiga1: TMenuItem;
Luas1: TMenuItem;
Keliling1: TMenuItem;
Lingkaran1: TMenuItem;
Luas2: TMenuItem;
Keliling2: TMenuItem;
Popup1: TPopupMenu;
SegiTiga2: TMenuItem;
Keliling3: TMenuItem;
Popup2: TPopupMenu;
Luas3: TMenuItem;
Keliling4: TMenuItem;
Panel1: TPanel;
Panel2: TPanel;
Shape1: TShape;
Shape2: TShape;
Label1: TLabel;
EDJARI: TEdit;
Label2: TLabel;

77
EdLuasLingkaran: TEdit;
EdkelilingLingkaran: TEdit;
EdPanjang: TEdit;
Label3: TLabel;
Label4: TLabel;
EdLebar: TEdit;
Label5: TLabel;
Label6: TLabel;
EdLuasEmpat: TEdit;
EdKelilingEmpat: TEdit;
Label7: TLabel;
Ulangi1: TMenuItem;
procedure Exit1Click(Sender: TObject);
procedure Luas1Click(Sender: TObject);
procedure Keliling1Click(Sender: TObject);
procedure Ulangi1Click(Sender: TObject);
procedure Shape1MouseDown(Sender: TObject; Button:
TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Shape2MouseDown(Sender: TObject; Button:
TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure SegiTiga2Click(Sender: TObject);
procedure Keliling3Click(Sender: TObject);
procedure Keliling2Click(Sender: TObject);
procedure Luas2Click(Sender: TObject);

78
private
{ Private declarations }
public
{ Public declarations }
end;

var
Formdelapan: TFormdelapan;

implementation

{$R *.DFM}

procedure TFormdelapan.Exit1Click(Sender: TObject);


begin
close;
end;

procedure TFormdelapan.Luas1Click(Sender: TObject);


begin
if (edpanjang.Text ='') or (edlebar.Text ='') then
MessageDlg('Teks Panjang atau Teks Lebar kosong',
mtInformation, [mbOk], 0)
else

79
edluasempat.text:=inttostr(strtoint(edpanjang.text)*strtoint(edl
ebar.text));
end;

procedure TFormdelapan.Keliling1Click(Sender: TObject);


begin
if (edpanjang.Text ='') or (edlebar.Text ='') then
MessageDlg('Teks Panjang atau Teks Lebar kosong',
mtInformation, [mbOk], 0)
else
edkelilingempat.text:=inttostr((2*strtoint(edpanjang.text))
+(2*strtoint(edlebar.text)));
end;

procedure TFormdelapan.Ulangi1Click(Sender: TObject);


begin
edjari.Text :='';
edluaslingkaran.Text :='';
edkelilinglingkaran.Text :='' ;
edpanjang.Text :='';
edlebar.Text :='';
edluasempat.Text :='';
edkelilingempat.Text :='';
end;

80
procedure TFormdelapan.Shape1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if button = mbright then
begin
x:=formdelapan.Left +90;
y:=formdelapan.Top +90;
popup1.Popup(x,y);
end;
end;

procedure TFormdelapan.Shape2MouseDown(Sender: TObject;


Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if button=mbright then
begin
x:=formdelapan.Left +260;
y:=formdelapan.Top +90;
popup2.Popup (x,y);
end;
end;

procedure TFormdelapan.SegiTiga2Click(Sender: TObject);


begin
if edjari.Text ='' then

81
MessageDlg('Teks Jari-jari kosong', mtInformation, [mbOk], 0)
else
edluaslingkaran.Text :=floattostr(strtofloat(edjari.text)*
strtofloat(edjari.text) * 3.14);
end;

procedure TFormdelapan.Keliling3Click(Sender: TObject);


begin
if edjari.Text ='' then
MessageDlg('Teks Jari-jari kosong', mtInformation, [mbOk], 0)
else
edkelilinglingkaran.Text :=floattostr(strtofloat(edjari.text)* 2 *
3.14);
end;

procedure TFormdelapan.Keliling2Click(Sender: TObject);


begin
if edjari.Text ='' then
MessageDlg('Teks Jari-jari kosong', mtInformation, [mbOk], 0)
else
edkelilinglingkaran.Text :=floattostr(strtofloat(edjari.text)* 2 *
3.14);
end;

procedure TFormdelapan.Luas2Click(Sender: TObject);


begin

82
if edjari.Text ='' then
MessageDlg('Teks Jari-jari kosong', mtInformation, [mbOk], 0)
else
edluaslingkaran.Text :=floattostr(strtofloat(edjari.text)*
strtofloat(edjari.text) * 3.14);
end;

end.

Latihan Sembilan

83
Source Program

unit Unitsembilan;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs,
Buttons, ExtCtrls, StdCtrls, Grids;

type
TFormsembilan = class(TForm)
Grid1: TStringGrid;
Label1: TLabel;
EdInput: TEdit;
BtProses: TButton;
edjmlkol1: TEdit;
edjmlkol2: TEdit;
edjmlkol3: TEdit;
edjmlkol4: TEdit;
Panel1: TPanel;
BtUlangi: TButton;
BBKeluar: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure BtProsesClick(Sender: TObject);
84
procedure BtUlangiClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Formsembilan: TFormsembilan;

implementation

{$R *.DFM}

procedure TFormsembilan.FormCreate(Sender: TObject);


begin
grid1.Cells [0,0]:=' i ';
grid1.Cells [1,0]:=' i x 2 ';
grid1.Cells [2,0]:=' i x 3 ';
grid1.Cells [3,0]:=' i x i ';
grid1.Cells [4,0]:='Akumulasi';
grid1.rowcount:=2;
end;

procedure TFormsembilan.BtProsesClick(Sender: TObject);


var i,kol1,kol2,kol3,kol4 : integer;

85
begin
grid1.rowcount:=strtoint(edinput.text)+1;
kol1:=0;
kol2:=0;
kol3:=0;
kol4:=0;
for i:=1 to grid1.RowCount - 1 do
begin
grid1.Cells [0,i] := inttostr(i);
grid1.Cells [1,i] := inttostr(i * 2);
grid1.Cells [2,i] := inttostr(i*3);
grid1.Cells [3,i] := inttostr(i*i);
if i=1 then
grid1.Cells [4,i] := inttostr(i)
else
grid1.Cells [4,i] := inttostr(strtoint(grid1.Cells [4,i-1])
+strtoint(grid1.Cells [0,i]));
kol1:=kol1 + strtoint(grid1.Cells [1,i]);
kol2:=kol2 + strtoint(grid1.Cells [2,i]);
kol3:=kol3 + strtoint(grid1.Cells [3,i]);
kol4:=kol4 + strtoint(grid1.Cells [4,i]);
end;
edjmlkol1.Text :=inttostr(kol1);
edjmlkol2.Text :=inttostr(kol2);
edjmlkol3.Text :=inttostr(kol3);

86
edjmlkol4.Text :=inttostr(kol4);
end;

procedure TFormsembilan.BtUlangiClick(Sender: TObject);


begin
edinput.Text :='';
grid1.RowCount :=2;
grid1.Cells [0,1]:='';
grid1.Cells [1,1]:='';
grid1.Cells [2,1]:='';
grid1.Cells [3,1]:='';
grid1.Cells [4,1]:='';
edjmlkol1.text:='';
edjmlkol2.text:='';
edjmlkol3.text:='';
edjmlkol4.text:='';
edinput.SetFocus ;
end;

end.

Latihan Sepuluh

87
88
Source Program

unit Unitsepuluh;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs,
Grids, StdCtrls, ComCtrls, ExtCtrls, Buttons;

type
TFormSepuluh = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Label1: TLabel;
Label2: TLabel;
ednofaktur: TEdit;
Label3: TLabel;
dttanggal: TDateTimePicker;
Label4: TLabel;
cmbnosuplier: TComboBox;
Label5: TLabel;
ednamasuplier: TEdit;
Label6: TLabel;
89
edalamat: TEdit;
Label7: TLabel;
cmbkodebrg: TComboBox;
Label8: TLabel;
ednamabrg: TEdit;
Label9: TLabel;
edharga: TEdit;
Label10: TLabel;
edqty: TEdit;
btproses: TButton;
Grid1: TStringGrid;
Label11: TLabel;
Label12: TLabel;
edtotal: TEdit;
btulangi: TButton;
bbclose: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure bbcloseClick(Sender: TObject);
procedure cmbkodebrgClick(Sender: TObject);
procedure cmbnosuplierClick(Sender: TObject);
procedure btprosesClick(Sender: TObject);
procedure btulangiClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }

90
end;

type
TSuplier = record
nosup:string;
nama:string;
alamat:string;
end;
type
Tbarang =record
kode:string;
nama : string ;
harga : integer;
end;

var
i,hasil:integer;
FormSepuluh: TFormSepuluh;
arsup : array[0..3] of Tsuplier;
arbrg : array[0..3] of Tbarang;

implementation

{$R *.DFM}

procedure isisup();

91
begin
arsup[0].nosup:='S001';
arsup[0].nama:='PT. Jaya Ningrat';
arsup[0].alamat:='Jl. P. Dinonogoro 76';
arsup[1].nosup:='S002';
arsup[1].nama:='PT. Ningrat Jaya';
arsup[1].alamat:='Jl. Purwakarta 7';
arsup[2].nosup:='S003';
arsup[2].nama:='PT. Cakti Abadi';
arsup[2].alamat:='Jl. Tambunan 276';
arsup[3].nosup:='S004';
arsup[3].nama:='PT. Citra Sari';
arsup[3].alamat:='Jl. Blambangan 67';
end;
procedure isibrg();
begin
arbrg[0].kode:='B001';
arbrg[0].nama:='Kursi';
arbrg[0].harga:=10000;
arbrg[1].kode:='B002';
arbrg[1].nama:='Meja';
arbrg[1].harga:=20000;
arbrg[2].kode:='B003';
arbrg[2].nama:='Lemari';
arbrg[2].harga:=40000;
arbrg[3].kode:='B004';

92
arbrg[3].nama:='Sofa';
arbrg[3].harga:=80000;
end;
procedure TFormSepuluh.FormCreate(Sender: TObject);
var j: integer;
begin
grid1.ColWidths [0]:=50;
grid1.ColWidths [1]:=70;
grid1.ColWidths [2]:=150;
grid1.rowcount:=1;
isisup;
isibrg;
dttanggal.DateTime:=date;
i:=1;
hasil:=0;

for j:=0 to 3 do
begin
cmbkodebrg.items.add(arbrg[j].kode);
cmbnosuplier.items.add(arsup[j].nosup);
end;
end;

procedure TFormSepuluh.bbcloseClick(Sender: TObject);


begin

93
close;
end;

procedure TFormSepuluh.cmbkodebrgClick(Sender: TObject);


begin
ednamabrg.Text :=arbrg[cmbkodebrg.itemindex].nama;
edharga.Text :=inttostr(arbrg[cmbkodebrg.itemindex].harga);
end;

procedure TFormSepuluh.cmbnosuplierClick(Sender: TObject);


begin
ednamasuplier.text:=arsup[cmbnosuplier.itemindex].nama;
edalamat.Text := arsup[cmbnosuplier.itemindex].alamat;
end;

procedure TFormSepuluh.btprosesClick(Sender: TObject);


begin
grid1.rowcount:=I;
grid1.cells[0,i-1]:=inttostr(i);
grid1.cells[1,i-1]:=cmbkodebrg.text;
grid1.cells[2,i-1]:=ednamabrg.text;
grid1.cells[3,i-1]:=edharga.text;
grid1.cells[4,i-1]:=edqty.text;
grid1.cells[5,i-
1]:=inttostr(strtoint(edharga.text)*strtoint(edqty.text));
hasil:=hasil+strtoint(grid1.cells[5,i-1]);

94
i:=i+1;
edtotal.Text :=inttostr(hasil);
end;

procedure TFormSepuluh.btulangiClick(Sender: TObject);


begin
ednofaktur.Text :='';
dttanggal.DateTime :=date;
cmbkodebrg.Text :='';
ednamabrg.Text :='';
edharga.Text :='';
edqty.Text :='';
cmbnosuplier.Text :='';
ednamasuplier.Text :='';
edalamat.Text :='';
grid1.RowCount :=1;
grid1.Cells[0,0]:='';
grid1.Cells[1,0]:='';
grid1.Cells[2,0]:='';
grid1.Cells[3,0]:='';
grid1.Cells[4,0]:='';
grid1.Cells[5,0]:='';
edtotal.Text :='';
ednofaktur.SetFocus ;
end;

95
end.

Latihan Sebelas

Source Program

unit Unitsebelas;

interface

uses

96
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs,
StdCtrls, Buttons, ExtCtrls;

type
TFormsebelas = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
GroupBox1: TGroupBox;
BtProses: TButton;
BtUlangi: TButton;
bbclose: TBitBtn;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
Label1: TLabel;
EdHasil: TEdit;
RbPermutasi: TRadioButton;
RBCombinasi: TRadioButton;
RBPangkat: TRadioButton;
Label2: TLabel;
edN: TEdit;
Label3: TLabel;
EdR: TEdit;
Label4: TLabel;
EdDasar: TEdit;

97
Label5: TLabel;
EdPangkat: TEdit;
procedure BtProsesClick(Sender: TObject);
procedure BtUlangiClick(Sender: TObject);

private
{ Private declarations }
public
{function pangkat(bd : integer; bp : integer):integer;
function faktorial(N : integer):integer; }
{ Public declarations }
end;

var
Formsebelas: TFormsebelas;

implementation

{$R *.DFM}

function pangkat(bd : integer; bp : integer):integer;


var
i,hasil : integer;
Begin
hasil:=1;
for i:= 1 to bp do

98
hasil := hasil * bd;
pangkat :=hasil;
end;

function faktorial(N : integer):integer;


var hasil,i : integer;
begin
hasil:=1;
for i:=1 to n do
hasil:=hasil*i;
faktorial:=hasil;
end;
procedure TFormsebelas.BtProsesClick(Sender: TObject);
begin
if rbpermutasi.Checked =true then
edhasil.text:=floattostr(faktorial(strtoint(edN.text))/faktorial((s
trtoint(edN.text)-strtoint(edR.text))))
else
if rbCombinasi.Checked =true then
edhasil.Text :=floattostr(faktorial(strtoint(edN.text))/
(faktorial(strtoint(edR.text))*faktorial((strtoint(edN.text)-
strtoint(edR.text)))))
else
if rbpangkat.Checked =true then

99
edhasil.Text
:=inttostr(pangkat(strtoint(eddasar.text),strtoint(edpangkat.text
)));
end;

procedure TFormsebelas.BtUlangiClick(Sender: TObject);


begin
edN.Text :='';
edR.Text :='';
Eddasar.text:='';
edPangkat.Text :='';
edHasil.Text :='';
rbpermutasi.Checked :=false;
rbCombinasi.Checked :=false;
rbpangkat.Checked :=false;
edN.SetFocus ;
end;

end.

Latihan Dua Belas

Form Data Modul

100
Form About

Form Transaksi

101
Source Program

unit DM;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs,
DBTables, DB;

102
type
TDM1 = class(TDataModule)
tblMaster: TTable;
tblMasterSYMBOL: TStringField;
tblMasterCO_NAME: TStringField;
tblMasterEXCHANGE: TStringField;
tblMasterIndustryLongName: TStringField;
tblMasterCUR_PRICE: TFloatField;
tblMasterYRL_HIGH: TFloatField;
tblMasterYRL_LOW: TFloatField;
tblMasterP_E_RATIO: TFloatField;
tblMasterPROJ_GRTH: TFloatField;
tblMasterINDUSTRY: TSmallintField;
tblMasterPRICE_CHG: TSmallintField;
tblMasterRATING: TStringField;
tblMasterRANK: TFloatField;
tblMasterOUTLOOK: TSmallintField;
tblMasterRCMNDATION: TStringField;
tblMasterRISK: TStringField;
dsMaster: TDataSource;
tblIndustry: TTable;
tblIndustryIND_CODE: TSmallintField;
tblIndustryIND_NAME: TStringField;
tblIndustryLONG_NAME: TStringField;
dsIndustry: TDataSource;
tblHoldings: TTable;

103
tblHoldingsACCT_NBR: TFloatField;
tblHoldingsSHARES: TFloatField;
tblHoldingsPUR_PRICE: TFloatField;
tblHoldingsPUR_DATE: TDateField;
tblHoldingsSYMBOL: TStringField;
tblHoldingsPUR_COST: TCurrencyField;
dsHoldings: TDataSource;
procedure tblHoldingsCalcFields(DataSet: TDataSet);
procedure tblHoldingsAfterPost(DataSet: TDataSet);
procedure CalculateTotals(Sender: TObject; Field: TField);
procedure tblHoldingsAfterOpen(DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;

var
DM1: TDM1;

implementation

uses CtrlForm;

{$R *.DFM}

104
procedure TDM1.tblHoldingsCalcFields(DataSet: TDataSet);
begin
tblHoldingsPUR_COST.AsFloat :=
tblHoldingsPUR_PRICE.AsFloat * tblHoldingsSHARES.AsFloat;
end;

procedure TDM1.CalculateTotals(Sender: TObject; Field: TField);


var
flTotalCost, { Holds total share cost }
flTotalShares, { Holds total share count }
flTotalValue, { Holds total share value }
flDifference: Real; { Holds difference between cost and value
}
strFormatSpec: string; { The Display Format specification }
begin

{ Update the count of stock transactions }


FmCtrlGrid.lPurchase.Caption :=
IntToStr( tblHoldings.RecordCount );

{ See whether or not its necessary to total the holdings and


(if so) do so and update the result displays; otherwise,
clear the result displays. }
if tblHoldings.recordCount = 0 then
begin
{ Clear the result displays }

105
FmCtrlGrid.lTotalCost.Caption := '';
FmCtrlGrid.lTotalShares.Caption := '';
FmCtrlGrid.lDifference.Caption := '';
end
else
begin
{ let the user know something's going on }
Screen.Cursor := crHourglass;

{ Initialize the holder variables }


flTotalCost := 0.0;
flTotalShares := 0.0;

{ Calculate the total cost of these holdings. }


tblHoldings.disableControls; { hide this process from the user
}
tblHoldings.first;
while not tblHoldings.eof do
begin
flTotalCost := flTotalCost + tblHoldingsPUR_COST.AsFloat;
flTotalShares := flTotalShares + tblHoldingsSHARES.AsFloat;
tblHoldings.next;
end;
tblHoldings.first;
tblHoldings.enableControls; { restore the display of
holdings }

106
{ Calculate the current value of the shares (by multiplying
the current holdings by the current share price) and the
difference between the cost and the value. }

flTotalValue := flTotalShares * tblMasterCUR_PRICE.AsFloat;


flDifference := flTotalValue - flTotalCost;

{ Use the same format specification as that being used to


display the Current Price field value so it can be used
to display the results }

strFormatSpec := tblMasterCUR_PRICE.DisplayFormat;

{ Update the result displays }

FmCtrlGrid.lTotalCost.Caption :=
FormatFloat( strFormatSpec, flTotalCost );
FmCtrlGrid.lTotalShares.Caption :=
FormatFloat( strFormatSpec, flTotalValue );
FmCtrlGrid.lDifference.Caption :=
FormatFloat( strFormatSpec, flDifference );

{ Update the Font Color of the Diference to


indicate the quality of the investment }
if flDifference > 0 then

107
FmCtrlGrid.lDifference.Font.Color := clGreen
else
FmCtrlGrid.lDifference.Font.Color := clRed;
FmCtrlGrid.lDifference.update;

{ let the user know that we're finished }


Screen.Cursor := crDefault;
end;
end;

procedure TDM1.tblHoldingsAfterPost(DataSet: TDataSet);


var
bmCurrent : TBookmark; { Holds the current position }
begin
with tblHoldings do
begin
bmCurrent := getBookmark; { save position }
try
CalculateTotals(nil, nil); { recalc totals }
gotoBookmark(bmCurrent); { restore position }
finally;
freeBookmark(bmCurrent); { free memory }
end;
end;
end;

108
procedure TDM1.tblHoldingsAfterOpen(DataSet: TDataSet);
begin
{Don't want this calculation to occur until both master & detail
are open}
dsMaster.OnDataChange := CalculateTotals;
end;

end.

unit CtrlForm;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs,
DBCtrls, StdCtrls, ExtCtrls, Mask, DBTables, DB, Grids, DBGrids,
Menus,
DBCGrids;

type
TFmCtrlGrid = class(TForm)
DBCtrlGrid1: TDBCtrlGrid;
DBGrid1: TDBGrid;
DBEdit1: TDBEdit;

109
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Button1: TButton;
Bevel1: TBevel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
lPurchase: TLabel;
lTotalCost: TLabel;
lTotalShares: TLabel;
lDifference: TLabel;
DBNavigator1: TDBNavigator;
MainMenu1: TMainMenu;
About1: TMenuItem;
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure DBGrid1Enter(Sender: TObject);

110
procedure DBCtrlGrid1Enter(Sender: TObject);
procedure About1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FmCtrlGrid: TFmCtrlGrid;

implementation

uses DM, About;

{$R *.DFM}

procedure TFmCtrlGrid.Button1Click(Sender: TObject);


begin
Close;
end;

procedure TFmCtrlGrid.FormShow(Sender: TObject);


begin
DM1.CalculateTotals(Sender, nil);
end;

111
procedure TFmCtrlGrid.DBGrid1Enter(Sender: TObject);
begin
DBNavigator1.DataSource := DM1.DSMaster;
end;

procedure TFmCtrlGrid.DBCtrlGrid1Enter(Sender: TObject);


begin
DBNavigator1.DataSource := DM1.DSHoldings;
end;

procedure TFmCtrlGrid.About1Click(Sender: TObject);


begin
with TFMAboutBox.Create(nil) do
try
ShowModal;
finally
Free;
end;
end;

end.

112