Berpikir Multiplatform: EnterAsTab

March 14, 2006 at 6:45 pm | Posted in Code Samples | 2 Comments

by: Bee

Di saat dimana dunia teknologi informasi telah menawarkan banyak teknologi baru di berbagai platform (prosesor maupun sistem operasi), sudah selayaknya programmer juga berpikir untuk memberikan dukungan kepada sebanyak mungkin platform. Rasanya, sudah bukan jamannya lagi kita membuat suatu aplikasi yg hanya bisa jalan dalam satu platform saja. Demikian juga para programmer yg menggunakan bahasa object Pascal (Delphi) sudah waktunya pula memikirkan hal yg sama.

Sekarang mari kita ambil satu contoh sederhana yg saya ambil dari blog kang Jaim tentang mengubah Enter sebagai Tab. Solusi yg diberikan dalam artikel tsb sangat bagus, rapi, dan elegan dgn memanfaatkan event messaging di win32. Tapi sayangnya, solusi tsb hanya bisa dilakukan di platform win32. Saya mencoba menawarkan alternatif solusi lain yg -harapan saya- lebih multiplatform friendly.

Caranya adalah dgn memanfaatkan prosedur SelectNext() dari TForm. Sintaks selengkapnya prosedur ini adalah:

procedure SelectNext(CurControl: TWinControl; GoForward, 
          CheckTabStop: Boolean);

Dari manual Delphi 7, prosedur tsb diterangkan sbb:

Call SelectNext to move the child control focus. SelectNext selects the first child that follows or precedes CurControl in the tab order and that meets the criteria specified in the other parameters.

Dalam terjemahan bebas, artinya kira2 seperti ini:

Gunakan SelectNext untuk memindahkan fokus kontrol (di bawah TForm). SelectNext akan memindahkan fokus pada kontrol berikutnya atau sebelumnya dari parameter CurControl sesuai urutan Tab (tab order) dan sesuai dgn kriteria yg ditentukan dalam parameter lainnya.

SelectNext mempunyai 3 parameter, yaitu:

  • CurControl (current control): kontrol yg dipilih sebagai awalan memulai perpindahan fokus.
  • GoForward: apakah arah perpindahan maju (sesuai urutan Tab). Jika bernilai TRUE maka fokus akan berpindah ke kontrol selanjutnya sesuai urutan Tab. Jika bernilai FALSE maka fokus akan berpindah ke kontrol sebelumnya sesuai urutan Tab.
  • CheckTabStop: apakah perpindahan melakukan pengecekan thd property TabStop. Jika bernilai TRUE maka fokus akan berpindah ke kontrol yg memiliki property TabStop dan bernilai TRUE. Jika bernilai FALSE maka fokus akan berpindah ke kontrol tanpa memperdulikan property TabStop.

Prosedur lain yg terkait dgn prosedur SelectNext adalah fungsi ActiveControl(). Fungsi ActiveControl akan mengembalikan kontrol yg saat ini sedang mendapat fokus. Dgn memasukkan fungsi ini ke parameter pertama dalam prosedur SelectNext maka pemanggilan SelectNext akan memindahkan fokus dimulai dari kontrol yg saat ini sedang terpilih (fokus).

Berikut adalah cara bagaimana menggunakan prosedur SelectNext untuk mengubah Enter menjadi Tab dalam pemindahan fokus kontrol:

1. Set property KeyPreview pada TForm menjadi TRUE, agar keyboard event dalam form di-broadcast ke kontrol di bawahnya.

2. Isikan kode berikut di event OnKeyPress pada Form1:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
 
11:
12:
13:
14:
// asumsi: nama form adalah Form1
procedure TForm1.FormKeyPress(Sender: TObject; var Key: char);
begin
  // cek penekanan tombol Enter (#13)
  if Key = #13 then
  begin
    { pindahkan fokus dari kontrol yg sedang aktif
     // dgn arah maju (ke depan) dan mengecek property
     // TabStop dari kontrol selanjutnya }
    SelectNext(ActiveControl, true, true);

    // reset nilai Key
    Key := #0;
  end;
end;

Sebagaimana yg saya sebutkan di awal, solusi ini lebih multiplatform friendly. Cara ini telah saya uji dan berjalan dgn baik di Delphi (7), Kylix (3) dan Lazarus (0.9.13). Kemungkinan besar cara ini juga bisa dipakai di Delphi for .Net (BDS 200x), tapi saya belum sempat mengujinya sendiri (saya akan berterima kasih kalo ada yg bersedia membantu menguji). Dengan demikian, akan sedikit mengurangi perubahan coding jika suatu saat nanti aplikasi Anda harus di-compile di IDE atau platform selain Delphi dan win32.

Nah… selamat mencoba dan semoga bermanfaat.🙂

2 Comments »

RSS feed for comments on this post. TrackBack URI

  1. untuk artikle ini, usable form base sudah ada contoh program di artikle Base Form (01), dimana jika program dibuat dengan dasar form dari sini, otomatis fasilitas navigasi keys (Enter, Panah Atas dan Panah Bawah) langsung terdifinisi tanpa coding ulang….

    https://delphindo.wordpress.com/2006/03/06/base-form/#more-9

    lihat di procedure
    procedure TfBase.FBKeyPress(Sender: TObject; var Key: Char);

    Regards, Widi Harsojo

  2. Betul, kang Widi. But, that’s not the point I’m talking about here. Artikel ini mengajak pembaca untuk berpikir secara multiplatform, dan kebetulan yg saya ambil contoh adalah kasus EnterAsTab.🙂

    -Bee-


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Create a free website or blog at WordPress.com.
Entries and comments feeds.

%d bloggers like this: