TEdit

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:

Event-event yang penting

TEdit memiliki event-event yang penting antara lain:

Sekarang lakukan beberapa percobaan menggunakan TEdit sebagai berikut:

Klik ganda pada Button1 sehingga kita mendapatkan event OnClick untuk Button1. Isilah event tersebut seperti berikut:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Caption:=Edit1.Text;
end;

Jalankan program dengan menekan F9, ketiklah beberapa kata di dalam Edit1, lalu klik Button1. Tulisan pada Edit1 akan dipindahkan ke title bar.

Tulisan pada Edit1 dipindah ke title bar

Tulisan pada Edit1 dipindah ke title bar

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

  Form1.Caption:=Edit1.Text;

Banyak program yang menganggap penekanan tombol Enter sebagai tanda bahwa data sudah benar. Oleh karena itu penekanan Enter akan memiliki arti yang sama dengan klik pada OK. Untuk mewujudkan ini, Anda bisa mengisi event OnKeyPress untuk Edit1.

Event OnKeyPress

Event OnKeyPress

Klik ganda pada kolom sebelah kanan dari OnKeyPress pada ObjectInspector. Anda akan dibawa kepada event sebagai berikut:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin

end;

Perhatikan bahwa prosedur untuk event OnKeyPress memiliki parameter var dengan nama Key yang bertipe Char. Key menunjukkan tombol yang ditekan oleh pengguna.

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:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key=#13 then Caption:=Edit1.Text;
end;

Tombol Enter memberikan nilai ordinal 13 kepada parameter Key. Jika parameter Key berisi #13, artinya yang ditekan adalah tombol Enter, maka kita mengisi Caption dari Form1 dengan nilai yang sama dengan properti Text dari Edit1. Kita menggunakan cara ini karena Button1Click hanya berisi perintah yang singkat. Jika Button1Click berisi perintah yang rumit, kita bisa memanggil prosedur ini setelah then sebagai berikut:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key=#13 then Button1Click(Button1);
end;

Pengisian event semacam ini akan memberikan efek yang tepat sama antara penekanan tombol enter dengan klik pada tombol Button1. Perhatikan bahwa kita mengirimkan nilai berupa Button1 kepada parameter Sender untuk prosedur Button1Click.

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:

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;

Ada kalanya kita menginginkan perubahan pada Edit langsung mendapatkan reaksi tanpa menunggu penekanan tombol enter maupun klik pada tombol yang disediakan. Untuk mewujudkan hal tersebut, kita bisa menggunakan event OnChange yang akan dipanggil setiap kali text pada Edit berubah.

Klik ganda pada event OnChange Edit1 melalui Object Inspector. Lalu tuliskan listing sebagai berikut:

procedure TForm1.Edit1Change(Sender: TObject);
begin
  Button1Click(Button1);
end;

Sekarang setiap pengetikan pada Edit1 akan langsung mengubah title bar.

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:

procedure TForm1.Edit1KeyPress(Sender: TObject;
  var Key: Char);
begin
  if not(Key in['0'..'9',#8])then Key:=#0;
end;

Hanya masukan angka 0 hingga 9 ditambah karakter backspace yang diterima.

Untuk masukan hexadesimal, tambahkan karakter a hingga f dan A hingga F seperti berikut:

procedure TForm1.Edit1KeyPress(Sender: TObject;
  var Key: Char);
begin
  if not(Key in['0'..'9','a'..'f',
    'A'..'F',#8])then Key:=#0;
end;

Dan agar terlihat lebih rapi, Anda bisa memberi nilai ecUpperCase pada properti CharCase sehingga semua huruf akan diubah menjadi huruf kapital.

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:

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;

Kita membolehkan Edit1.Text kosong. Jadi jika Edit1.Text kosong bisa langsung ditinggalkan. Akan tetapi jika Edit1.Text tidak kosong, kita harus memastikan isinya merupakan bentuk angka hexadesimal. Prosedur untuk mengubah string menjadi angka adalah prosedur val. Prosedur ini memiliki tiga parameter. Parameter pertama adalah string yang akan diubah menjadi angka. Parameter kedua adalah variabel yang menerima angka hasilnya. Dan parameter ketiga adalah kode konversi. Karena kita akan mengubah string dalam bentuk hexadesimal, maka kita harus menambahkan karakter dolar ($) di depan string. Jika konversi berhasil, maka kode konversi akan bernilai 0. Jika kode konversi bernilai selain 0, artinya konversi gagal, maka kita harus mengubah isi Edit1.Text menjadi 0.

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:

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 Tanggal dari obyek TglLahir memiliki tipe integer, sedangkan properti Text dari eTanggal memiliki tipe string. Jika kita ingin menggunakan properti text dari Edit untuk mengisi variabel atau properti dengan tipe integer, kita harus melakukan perubahan ekspresi bertipe string menjadi ekspresi bernilai integer. Perubahan ini bisa dilakukan dengan fungsi yang telah didefinisikan di dalam unit SysUtils dengan nama StrToInt. Fungsi ini mengambil parameter berupa string dan akan mengembalikan nilai berupa integer.

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

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.

Sebagian besar listing tersebut diisi secara otomatis oleh Delphi. Perhatikan bahwa kita tidak perlu untuk menyentuh program utama.

Program HariLahir GUI

Program HariLahir GUI

Apakah Anda menyukai post ini? Mengapa tidak memberikan komentar di bawah dan melanjutkan perbincangan, atau berlangganan my feed dan dapatkan artikel semacam ini yang dikirm secara otomatis feed reader Anda.
Harap diperhatikan bahwa komentar atau pertanyaan yang disampaikan haruslah sesuai dengan topik yang sedang dibahas. Komentar atau pertanyaan yang tidak sesuai dengan topik akan kami hapus :!:

Tinggalkan komentar

Sebelum membuat komentar, pastikan Anda telah membaca komentar-komentar sebelumnya. Jangan membuat pertanyaan yang telah ditanyakan. Perhatikan pula link-link dalam artikel. Lihatlah link tersebut sebelum membuat pertanyaan, karena mungkin penjelasan dari pertanyaan Anda telah di jawab dalam link tersebut.

Komentar yang tidak mengikuti aturan ini akan dihapus!

(wajib)

(wajib)


Time limit is exhausted. Please reload the CAPTCHA.