Deteksi status tombol INSERT

March 24, 2006 at 6:19 pm | Posted in Code Samples | 1 Comment

Diambil dari blog IwanCS

Kita dapat mengetahui status tombol CAPS Lock, NUMS Lock atau SCROLL Locks dari lampu indikator pada semua keyboard. Namun bagaimana kita bisa mendeteksi status tombol INSERT apakah mode insert sedang aktif atau tidak.

Trik berikut ini dapat mendeteksi status tombol tersebut:

function IsInsertKeyOn: boolean;
begin
  Result := Odd (GetKeyState(VK_INSERT));
end;

Penjelasan

Perintah Odd:
Memeriksa apakah nilai yang di evaluasi bernilai ganjil atau tidak

Perintah GetKeyState:
Akan mengembalikan nilai status dari nilai yang di evaluasi (VK_INSERT)
Perintah ini akan mengembalikan nilai biner 8 bit (0000 0000), dengan ketentuan sebagai berikut:

  • High Order: 4 bit pertama merupakan status tombol di tekan
  • Low Order: 4 bit terakhir merupakan status toggle dari tombol
  • Bit High Order akan bernilai 1000 jika tombol sedang ditekan
    Bit High Order akan bernilai 0000 jika tombol tidak sedang ditekan
    Bit Low Order akan bernilai 0001 jika tombol sedang Toggle On
    Bit Low Order akan bernilai 0000 jika tombol tidak sedang Toggle Off

    Contoh penggunaan:

    Tambahkan unit Windows pada uses list. Letakkan komponen TLabel di form dan berikan nilai property:

    Label1.Caption := ‘INS’;

    Kemudian pada event Form Paint, tambahkan kode berikut:

    procedure TForm1.FormPaint(Sender: TObject);
    begin
      inherited;
      if IsInsertKeyOn then
        Label1.Font.Color := clBlack
      else
        Label1.Font.Color := clGray;
    end;

    Hasil dari perintah diatas akan memberikan warna font dari komponen Label1 dengan warna abu-abu saat tombol Ins berstatus Toggle Off dan warna hitam saat tombol Ins berstatus Toggle On.

    Event diatas hanya terjadi saat form digambar ulang, contoh pada saat form mendapat fokus. Agar efek status pada komponen Label dapat langsung dilihat, tambahkan kode berikut pada event Form KeyDown, dengan sebelumnya menset nilai property Form1.KeyPreview menjadi True:

    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if key = VK_INSERT then
        Self.Repaint;
    end;

    Dengan kode tersebut maka setiap kali user menekan tombol INS maka akan memanggil event FormPaint yang kemudian akan memberikan warna pada komponen Label1 sesuai statusnya.

    1 Comment »

    RSS feed for comments on this post. TrackBack URI

    1. Artikel yang menarik


    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: