Anda di halaman 1dari 159

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

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

Informasi Pemrograman Delphi 1


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

Informasi Pemrograman Delphi 3


MODUL II
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

Informasi Pemrograman Delphi 4


digunakan, seperti : menyimpan 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

Datasource : Digunakan untuk koneksi ke table yangtelah ditunjuk oleh


komponen tabel

Informasi Pemrograman Delphi 8


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

Sebelum diubah ukurannya. Setelah diubah ukurannya

Informasi Pemrograman Delphi 13


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

sebelum dirapi kan setelah dirapikan

Informasi Pemrograman Delphi 14


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 15


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 16


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);
Application.Run;

Informasi Pemrograman Delphi 17


end.

Sedangkan unit-unit dalam Delphi strukturnya adalah:

unit Unit1;
Nama Unit

interface
uses
Digunakan untuk
Windows, Messages, SysUtils, Classes, Graphics, memanggil
munit 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 }
Untuk deklarasi
public variable,prosedur lokal
{ Public declarations }
end; Untuk deklarasi
variable,prosedur public

var
Untuk deklarasi variable
Form1: TForm1;

implementation

{$R *.DFM}

Informasi Pemrograman Delphi 18


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

Informasi Pemrograman Delphi 19


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.
Untuk menangani hal tersebut, maka angka tersebut diberi nama, dan nama
tersebut bersifat tetap selama program berjalan. Nama seperti diatas disebut

Informasi Pemrograman Delphi 20


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:

type
nama_type = record
deklarasi variable;
end;

Informasi Pemrograman Delphi 21


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 22


Var
Point: Tpoint;
Form1:Tform1;

Informasi Pemrograman Delphi 23


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 24


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 25


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:

Informasi Pemrograman Delphi 26


If x > 90 then
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

Informasi Pemrograman Delphi 27


Pernyataan benar2

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;

Informasi Pemrograman Delphi 28


end;

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 29


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 30


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

Informasi Pemrograman Delphi 31


pernyataan While akan melakukan perulangan selama keadaan atau kondisi
benar.
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;

Informasi Pemrograman Delphi 32


Repeat

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 33


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 34


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

Informasi Pemrograman Delphi 35


Edit1 Name Edhjumlah
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

Informasi Pemrograman Delphi 36


Kode program untuk membuat aplikasi tersebut adalah:

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

Informasi Pemrograman Delphi 37


form2.free;
end;

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

Informasi Pemrograman Delphi 38


form4 :=Tform4.create(self);
Form4.showmodal;

if (form4.modalresult=mrok) then
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;

Informasi Pemrograman Delphi 39


procedure TForm1.OperasiString1Click(Sender: TObject);
var
str : string;
begin
form5 :=Tform5.create(self);
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;

Informasi Pemrograman Delphi 40


end.

Informasi Pemrograman Delphi 41


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:

4
b. Pada ComboBox Table Properties, pilih Referential Integrity, klik
tombol Define jika belum ada atau klik tombol Modify jika akan
mengedit relasi yang telah ada.

c. Jendela seperti dibawah ini akan muncul.

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

File database BDE


(*.DB, (Borland Program Anda
*.DBF) Database
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:
1. Data Access yang terdiri dari;
a. DataSource
7
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:
1. DataBaseName, menujuk tempat dimana file database disimpan,
biasanya menjunjuk alias dari path database tersebut.

8
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
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
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
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);

10
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;
Table.Fields[0].AsInteger:=100;
Table.SetRangeEnd;
Table.Fields[0].AsInteger:=2000;
Table.ApplyRange;
6. CancelRange
Perintah ini digunakan untuk membatalkan perintah ApplyRange.

11
Contoh Program Database Sederhana

Form Utama

Form tambah Data

12
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
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Buttons, StdCtrls, Grids, DBGrids, Db, DBTables;

13
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

uses Unittmb;

14
{$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;
fieldbyname('continent').asstring:=edbenua.text;
fieldbyname('area').asstring:=edluas.text;

15
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;
fieldbyname('Name').asstring:=ednama.text;

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

2. INSERT

19
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
Perintah UPDATE digunakan untuk mengganti nilai field dari sebuah
record.
Syntak:
UPDATE Table SET Field = data WHERE Field = Data

20
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

2. dengan menggunakan method parambyname


contoh:
21
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:
TQRLabel teks statis biasanya digunakan untuk judul atau label.
TQRDBText untuk menampilkan field dari database.
TQRExpr untuk menampilkan expresi atau fungsi-fungsi yang
dibutuhkan.
26
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:

Sedangkan report dari aplikasi tampak sebagi berikut:

27
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

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

28
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:
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

29
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

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

30
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

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

31
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
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

32
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

Properties Value
Name QRDBTEXT4
Dataset Form1.table1
DataField ALAMAT

Properties Value
Name QRDBTEXT5
Dataset Form1.table1
DataField ANGKATAN

QRSYSDATA

33
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:
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
34
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 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:

35
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
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
36
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

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
37
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
38
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
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
39
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);

44
begin
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;

46
chkmin: TCheckBox;
chkmax: TCheckBox;
chkhelp: TCheckBox;
rbnone: TRadioButton;
rbsize: TRadioButton;
rbdialog: TRadioButton;
rbsingle: TRadioButton;
rbsizetoolwin: TRadioButton;
rbtoolwindow: TRadioButton;
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;

47
implementation

{$R *.DFM}

procedure TFormdua.chksistemClick(Sender: TObject);


var sem : Tbordericons;
begin
sem:=[];
if chksistem.Checked =true then
sem := sem + [bisystemmenu];
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);

48
begin
formdua.BorderStyle :=bssizeable;
end;

procedure TFormdua.rbdialogClick(Sender: TObject);


begin
formdua.BorderStyle :=bsdialog;
end;

procedure TFormdua.rbsingleClick(Sender: TObject);


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

49
Latihan Tiga

Source Program

unit Unittiga;

interface

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

50
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);
procedure rbfitnesClick(Sender: TObject);
procedure rbcaturClick(Sender: TObject);
procedure btnulangiClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

51
{$R *.DFM}

procedure TForm1.btnkeluarClick(Sender: TObject);


begin
close;
end;

procedure TForm1.rbrenagClick(Sender: TObject);


begin

lbrenang.Caption :='Baik untuk mempertinggi badan'

end;

procedure TForm1.rbfitnesClick(Sender: TObject);


begin

lbfitness.Caption :='Baik untuk memperbesar otot'

end;

procedure TForm1.rbcaturClick(Sender: TObject);


begin

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

end.

Latihan Empat

53
Source Program

unit Unitempat;

interface

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

type
TFormempat = class(TForm)
Label1: TLabel;
lbcontoh: TLabel;
54
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;

var
Formempat: TFormempat;

implementation

55
{$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
lbcontoh.Caption :=edinput.Text ;
edinput.Text :='';
end;

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

57
Latihan Lima

Source Program

unit Unitlima;

interface

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

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

59
chkcorettengah: TCheckBox;
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;

60
implementation

{$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;

61
procedure TFormlima.rbmerahClick(Sender: TObject);
begin
lbcontoh.Font.Color :=clred;
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

62
else
if lbcontoh.Font.Size=14 then
begin
rb14.Checked :=true;
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

63
rb14.Checked :=true;
edukuran.Text :='14';
end
else
begin
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

64
fs:=fs+[fsstrikeout];
lbcontoh.Font.Style :=fs;
end;

procedure TFormlima.bbcloseClick(Sender: TObject);


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

65
lbcontoh.Font.Size :=8;
end;

procedure TFormlima.edukuranEnter(Sender: TObject);


begin
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);

66
end;
end.

Latihan Enam

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

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

69
begin
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

70
bagi:=bil1/bil2;
edhasil.text:=floattostr(bagi);
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;

71
end.

Latihan Tujuh

72
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;
73
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');

74
combo.Items.Add('Inggris');
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

75
for i:=0 to list1.Items.Count -1 do
list2.Items.Add(list1.items.strings[i]);
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 ;

76
end;

end.

77
Latihan Delapan

Source Program

unit Unitdelapan;

interface

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

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

79
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);

80
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
edluasempat.text:=inttostr(strtoint(edpanjang.text)*strtoint(edlebar.text));
end;

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

procedure TFormdelapan.Shape1MouseDown(Sender: TObject;


Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

82
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
MessageDlg('Teks Jari-jari kosong', mtInformation, [mbOk], 0)
else

83
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
if edjari.Text ='' then
MessageDlg('Teks Jari-jari kosong', mtInformation, [mbOk], 0)
else

84
edluaslingkaran.Text :=floattostr(strtofloat(edjari.text)* strtofloat(edjari.text) *
3.14);
end;

end.

Latihan Sembilan

85
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);
86
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);

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

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

88
edjmlkol2.Text :=inttostr(kol2);
edjmlkol3.Text :=inttostr(kol3);
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

89
90
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;
91
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

92
{ Public declarations }
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}

93
procedure isisup();
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';

94
arbrg[2].nama:='Lemari';
arbrg[2].harga:=40000;
arbrg[3].kode:='B004';
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;

95
end;

procedure TFormSepuluh.bbcloseClick(Sender: TObject);


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

96
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]);
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]:='';

97
grid1.Cells[5,0]:='';
edtotal.Text :='';
ednofaktur.SetFocus ;
end;

end.

Latihan Sebelas

Source Program

98
unit Unitsebelas;

interface

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

99
edN: TEdit;
Label3: TLabel;
EdR: TEdit;
Label4: TLabel;
EdDasar: TEdit;
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}

100
function pangkat(bd : integer; bp : integer):integer;
var
i,hasil : integer;
Begin
hasil:=1;
for i:= 1 to bp do
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((strtoint(edN.text)-
strtoint(edR.text))))
else

101
if rbCombinasi.Checked =true then
edhasil.Text
:=floattostr(faktorial(strtoint(edN.text))/(faktorial(strtoint(edR.text))*faktorial((s
trtoint(edN.text)-strtoint(edR.text)))))
else
if rbpangkat.Checked =true then
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.

102
Latihan Dua Belas

Form Data Modul

Form About

103
Form Transaksi

104
Source Program

unit DM;

interface

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

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

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

var
DM1: TDM1;

implementation

uses CtrlForm;

{$R *.DFM}

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 }

107
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 }
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;

108
{ 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 }

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

109
{ 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
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);

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

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;

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

112
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);
procedure DBCtrlGrid1Enter(Sender: TObject);
procedure About1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FmCtrlGrid: TFmCtrlGrid;

implementation

113
uses DM, About;

{$R *.DFM}

procedure TFmCtrlGrid.Button1Click(Sender: TObject);


begin
Close;
end;

procedure TFmCtrlGrid.FormShow(Sender: TObject);


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

procedure TFmCtrlGrid.DBGrid1Enter(Sender: TObject);


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

procedure TFmCtrlGrid.DBCtrlGrid1Enter(Sender: TObject);


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

114
procedure TFmCtrlGrid.About1Click(Sender: TObject);
begin
with TFMAboutBox.Create(nil) do
try
ShowModal;
finally
Free;
end;
end;

end.

115

Anda mungkin juga menyukai