Membuat button pada saat runtime
Jarang sekali programmer membuat sebuah komponen/objek visual pada saat runtime. Artinya mereka membuat sebuah komponen visual pada saat program di jalankan (run). Biasanya semua dibuat pada saat mereka merancang tampilan program dengan meletakkan semua komponen seperti tombol (TButton), Combobox, dan lain sebagainya pada form. Cara seperti ini sering disebut dengan istilah “Designtime” atau saat merancang.
Namun jika anda perlu sekali untuk membuat sebuah komponen visual secara runtime, mungkin cara ini adalah cara pragmatis yang tepat untuk anda ikuti. Kali ini kita coba untuk membuat sebuah tombol (TButton) pada saat program dijalankan. Jadi rencananya dengan menekan sebuah tombol yang pasang pada Form pada saat designtime, program akan membuat tombol yang lain. Baik langsung saja.
Letakkan sebuah tombol pada Form utama, kemudian masuklah pada bagian prosedur OnClick tombol tersebut. Pada frame OnClick tersebut masukkan kode berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
procedure TForm1.Button1Click(Sender: TObject); var btnRunTime : TButton; begin btnRunTime := TButton.Create(Form1); with btnRunTime do begin Visible := true; Top := 64; Left := 50; Width := 150; Caption := 'My Runtime Button'; Name := 'Runtimebutton'; Parent := Form1; end; |
Pada kode diatas kita menggunakan metode “Create”, dimana sebuah kelas objekΒ TButton dibuat menggunakan perintah create.Β Setelah pemanggilan create, kemudian kita deklarasikan property button yang akan tampil nanti, mulai dari visibilitas, parental,Β posisi tombol, lebar, caption, dan tidak tertinggal adalah nama objek itu sendiri. Semua persis seperti kita membuat tombol pada saat designtime, hanya saja kita menuliskan value sebuah objek secara pragmatis melalui sebuah kode.
Jika anda berniat untuk memberikan sebuah aksi pada tombol yang kita buat secara runtime, misalnya pada event OnClick (aksi pada saat tombol di-klik), pertama deklarasikan sebuah prosedur OnClick pada bagian Private Declarations seperti dibawah ini.
1 2 3 4 5 6 7 8 9 10 11 12 |
... type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } procedure KlikTombol(Sender: TObject); public { Public declarations } end; ... |
setelah itu buatlah prosedur dengan nama KlikTombol seperti kode berikut.
1 2 3 4 5 |
procedure TForm1.KlikTombol(Sender: TObject); begin with (Sender as TButton) do ShowMessage('Hello Sonoku!!'); end; |
Kemudian tambahkan pada event OnClick tombol “Buat Tombol” sebuah deklarasi event KlikTombol tadi sehingga kodenya akan seperti berikut.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
procedure TForm1.Button1Click(Sender: TObject); var btnRunTime : TButton; begin btnRunTime := TButton.Create(Form1); with btnRunTime do begin Visible := true; Top := 64; Left := 50; Width := 150; Caption := 'My Runtime Button'; Name := 'Runtimebutton'; Parent := Form1; OnClick := KlikTombol; end; |
Cukup mudah bukan? Perhatikan sekarang, bagaimana jika tombol “Buat Tombol” di-klik untuk kedua kalinya? Pastinya akan muncul pesan orror bahwa terdapat duplikasi nama sebuah objek. Hal ini memang sangat dilarang dalam Delphi. Untuk jika anda ingin membuat tombol lain secara runtime, anda harus membuat tombol tersebut dengan nama yang unik. Perhatikan contoh kode berikut.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
procedure TForm1.Button2Click(Sender: TObject); var btnRunTime : TButton; i: Integer; begin for i:= 1 to 5 do begin btnRunTime := TButton.Create(nil); with btnRunTime do begin Visible := true; Top := 110+(i*25); Left := 50+(i*5); Width := 150; Caption := 'My Runtime Button ke-'+InttoStr(i); Name := 'Runtimebutton'+InttoStr(i); Parent := Form1; OnClick := KlikTombol; end; end; end |
Contoh diatas akan membuat tombol sebanyak 5 kali, kemudian menatanya sedemikian rupa agar tidak bertumpuk dengan memodifikasi properti top dan left tombol. Agar nama objek menjadi unik, kita tambahkan sebuah angka yang diambilkan dari variabel iterasi “i” di belakang value properti Name tombol. Namun tetap saja, jika tombol “Buat Tombol 5” ditekan utuk kedua kalinya akan tetap muncul pesan erorr duplikatΒ nama objek. Lalu bagaiamana mengatasinya? Tunggu artikel berikutnya…oke π