TEdit adalah sebuah komponen yang biasa digunakan untuk meminta masukkan dari pengguna. Kali ini kita akan mencoba menggunakan komponen TEdit ini.
Buatlah aplikasi baru dengan memilih File>New>Vcl Forms Application – Delphi. Lalu tambahkan Edit ke dalam form dengan memilih komponen pada ToolPalette. Tambahkan juga sebuah Button di bawah Edit1 (TEdit yang pertama ditambahkan biasanya diberi nama Edit1). Gantilah caption dari tombol ini menjadi OK.
Properti penting TEdit
TEdit memiliki properti-properti yang penting antara lain:
- Text. Properti ini bertipe string. Properti ini menunjukkan tulisan yang berada di dalam editor.
- ReadOnly. Jika diberi nilai true, maka properti pengguna tidak bisa mengganti text pada obyek TEdit.
- CharCase. Ada tiga pilihan untuk properti ini yaitu ecNormal, ecLowerCase, dan ecUpperCase. ecUpperCase akan menyebabkan text selalu berisi huruf kapital.
- PasswordChar. Jika kita meminta masukkan kepada pengguna berupa password, biasanya karakter-karakter yang dimasukkan tidak ditampilkan tetapi diganti dengan karakter lain misalnya *. Anda bisa memilih karakter yang akan ditampilkan jika obyek TEdit ini akan digunakan untuk masukkan password.
Event-event yang penting
TEdit memiliki event-event yang penting antara lain:
- OnClick dan OnDblClick. Event ini terjadi jika pengguna melakukan klik atau klik ganda pada obyek TEdit.
- OnChange. Ini terjadi jika isi (text) dari obyek TEdit berubah.
- OnKeyDown, OnKeyPress, dan OnKeyUp. Ini adalah event yang terjadi jika obyek TEdit sedang mendapatkan fokus dan pengguna melakukan penekanan tombol-tombol keyboard.
- OnMouseDown, OnMouseMove, dan OnMouseUp. Anda pasti bisa menebak kapan terjadinya.
Sekarang lakukan beberapa percobaan menggunakan TEdit sebagai berikut:
Klik ganda pada Button1 sehingga kita mendapatkan event OnClick untuk Button1. Isilah event tersebut seperti berikut:1 2 3 4 | procedure TForm1.Button1Click(Sender: TObject); begin Caption:=Edit1.Text; end; |

Pada percobaan pertama untuk mengganti caption dari Button1 kita gunakan Button.Caption. Pada percobaan ini kita menugasi properti Caption tanpa menentukan obyeknya. Properti-properti yang ditulis tanpa nama obyeknya akan dianggap sebagai properti milik form. Jadi penulisan listing di atas akan sama artinya dengan
1 | Form1.Caption:=Edit1.Text; |

Klik ganda pada kolom sebelah kanan dari OnKeyPress pada ObjectInspector. Anda akan dibawa kepada event sebagai berikut:
1 2 3 4 | procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin end; |
Pada pembahasan mengenai parameter kita telah mengetahui bahwa parameter dengan awalan var menunjukkan bahwa perubahan terhadap parameter tersebut akan direfleksikan kepada pemanggilnya. Melalui event OnKeyPress ini, kita bisa menggunakan parameter Key untuk informasi yang menentukan aksi yang akan dilakukan, atau kita juga bisa mengganti arti dari tombol yang ditekan. Jika kita hanya akan menggunakan event ini untuk menganggap penekanan tombol Enter sama dengan klik pada OK, kita bisa mengisi event tersebut seperti berikut:
1 2 3 4 | procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if Key=#13 then Caption:=Edit1.Text; end; |
1 2 3 4 | procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if Key=#13 then Button1Click(Button1); end; |
Sekarang cobalah untuk membuat agar beberapa tombol berubah maknanya. Sebagai contoh kita akan menukar huruf a dengan huruf s. Jika tombol a ditekan maka yang muncul justru huruf s. Sebaliknya jika yang ditekan tombol s maka yang muncul justru huruf a. Gantilah Edit1KeyPress sebagai berikut:
1 2 3 4 5 6 7 8 | procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if Key='A' then Key:='S' else if Key='a' then Key:='s' else if Key='S' then Key:='A' else if Key='s' then Key:='a' else if Key=#13 then Button1Click(Button1); end; |
Klik ganda pada event OnChange Edit1 melalui Object Inspector. Lalu tuliskan listing sebagai berikut:
1 2 3 4 | procedure TForm1.Edit1Change(Sender: TObject); begin Button1Click(Button1); end; |
Jangan berpikir negatif dulu. Tentu saja apa yang baru kita lakukan pada percobaan tersebut terasa sangat iseng. Apa gunanya mengganti huruf a menjadi s? Dalam hal tersebut memang tidak ada gunanya. Akan tetapi mengganti makna tombol terkadang memiliki arti yang penting. Sebagai contoh, Anda ingin mengambil masukan berupa bilangan, baik desimal maupun hexadesimal. Untuk bilangan desimal, hanya angka 0 sampai 9 yang boleh diterima. Sedangkan untuk hexadesimal hanya angka 0 hingga angka 9 ditambah huruf A hingga F. Untuk menyaring masukan, kita bisa mengisi event OnKeyPress seperti berikut:
1 2 3 4 5 | procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not(Key in['0'..'9',#8])then Key:=#0; end; |
1 2 3 4 5 6 | procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not(Key in['0'..'9','a'..'f', 'A'..'F',#8])then Key:=#0; end; |
Setelah Anda mengisi event OnKeyPress dengan cara seperti di atas, kita sudah bisa menyaring masukan dari penekanan tombol. Akan tetapi pengisian melalui paste masih memungkinkan adanya masukan berupa huruf yang tidak seharusnya. Untuk mencegah hal tersebut, kita bisa melakukan penyaringan pada event OnChange seperti berikut:
1 2 3 4 5 6 7 | procedure TForm1.Edit1Change(Sender: TObject); var n,c:integer; begin if Edit1.Text=''then exit; val('$'+Edit1.Text,n,c); if c<>0 then Edit1.Text:='0'; end; |
HariLahir dalam GUI
Sekarang kita akan menggunakan komponen Edit untuk membuat program HariLahir dalam GUI.
Buatlah aplikasi baru. Simpan nama project-nya dengan HariLahirGUI dan nama unit-nya dengan UnitHariLahir.
Tambahkan empat buah Label dengan posisi berurutan dari atas ke bawah. Tambahkan pula empat buah Edit dengan posisi disebelah kanan Label. Lalu ganti caption dari Label-Label tersebut masing masing menjadi ‘Tanggal’, ‘Bulan’, ‘Tahun’, dan ‘Hari’. Ganti nama dari Edit-Edit tersebut masing-masing menjadi eTanggal, eBulan, eTahun, dan eHari. Tiga Edit yang pertama burfungsi untuk meminta masukan dari pengguna, akan tetapi eHari berfungsi untuk menampilkan hasil dari data yang dimasukkan. Oleh karena itu gantilah properti ReadOnly eHari menjadi true.
Tambahkan sebuah Button dan ganti namanya menjadi btHitung dan caption-nya menjadi ‘OK’.
Karena kita akan membuat program untuk menghitung hari lahir, maka kita membutuhkan obyek dengan tipe TClassTanggal seperti pada program-program sebelumnya. Kita bisa mengambil dari program-program tersebut dengan cara meng-Copy-nya. Tempatkan di bawah implementation.
Karena ada beberapa method yang tidak akan kita gunakan pada program GUI ini, maka buanglah method-method tersebut.
Klik ganda pada btHitung lalu pada prosedur yang muncul, tambahkan beberapa baris sebagai berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | procedure TForm1.btHitungClick(Sender: TObject); var TglLahir:TClassTanggal; begin //membuat obyek TglLahir TglLahir:=TClassTanggal.Create; with TglLahir do begin Tanggal:=StrToInt(eTanggal.Text); Bulan:=TNamaBulan(StrToInt(eBulan.Text)); Tahun:=StrToInt(eTahun.Text); eHari.Text:=NamaHari; end; //membuang obyek TglLahir.Free; end; |
Field Bulan memiliki tipe TNamaBulan, sedangkan StrToInt mengembalikan nilai bertipe integer. Oleh karena itu kita perlu melakukan type casting dari integer menjadi TNamaBulan.
Setelah kita mengisi semua field dari obyek TglLahir, maka kita bisa mengetahui nama hari pada tanggal tersebut dengan memanggil method NamaHari dari TglLahir. Hasil dari pemanggilan method ini kemudian kita gunakan untuk mengisi properti text dari eHari.
UnitHariLahir secara lengkap adalah sebagai berikut (XE4):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | unit UnitHariLahir; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Label1: TLabel; eTanggal: TEdit; Label2: TLabel; eBulan: TEdit; Label3: TLabel; eTahun: TEdit; Label4: TLabel; eHari: TEdit; btHitung: TButton; procedure btHitungClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} type TNamaBulan=(Januari=1, Pebruari, Maret, April, Mei, Juni, Juli, Agustus, September, Oktober, Nopember, Desember); TClassTanggal=class Tanggal:integer; Bulan:TNamaBulan; Tahun:integer; function JumlahHari:integer; function NamaHari:string; end; const Hari:array[0..6]of string= ('Minggu','Senin','Selasa','Rabu', 'Kamis','Jumat','Sabtu'); HariPertama=5; //---implementasi TClassTanggal------------------ function IsKabisat(Y:integer):boolean; begin result:=((Y mod 4=0)and(Y mod 100<>0)) or(Y mod 400=0); end; function TClassTanggal.JumlahHari:integer; function HariDlmBulan(B:TNamaBulan):integer; begin case B of Januari,Maret,Mei,Juli,Agustus, Oktober,Desember:result:=31; April,Juni,September,Nopember:result:=30; Pebruari:if IsKabisat(Tahun) then result:=29 else result:=28; end; end; var i:TNamaBulan; ii:integer; begin result:=0; //Hitung hari dalam tahun for ii:=0 to Tahun-1 do if IsKabisat(ii)then result:=result+366 else result:=result+365; //tambahkan dengan sisa hari for i:=Januari to Pred(Bulan)do result:=result+HariDlmBulan(i); result:=result+Tanggal; end; function TClassTanggal.NamaHari:string; var i:integer; begin i:=(JumlahHari+HariPertama)mod 7; result:=Hari[i]; end; procedure TForm1.btHitungClick(Sender: TObject); var TglLahir:TClassTanggal; begin //membuat obyek TglLahir TglLahir:=TClassTanggal.Create; with TglLahir do begin Tanggal:=StrToInt(eTanggal.Text); Bulan:=TNamaBulan(StrToInt(eBulan.Text)); Tahun:=StrToInt(eTahun.Text); eHari.Text:=NamaHari; end; //membuang obyek TglLahir.Free; end; end. |



