Menggeser Form Bukan pada Titlebar

Ada kalanya, kita menginginkan tampilan form yang lain daripada yang lain. Misalnya, memakai titlebar yang dibuat sendiri. Berikut ini adalah cara menyembunyikan titlebar pada form dan memakai obyek lain untuk menggerakkan form.

Ada dua tempat yang akan kita aduk-aduk. Pertama adalah pada FormCreate. Kedua pada obyek yang menggantikan titlebar untuk menggeser Form. Pada artikel ini, saya akan memakai TPanel untuk menggerak Form.

Langkah-langkah:


  1. Buatlah aplikasi baru dengan satu form. Beri satu panel. Buat agar align panel menjadi top




  2. Hapus titlebar. Kode programnya diletakkan pada FormCreate.

    procedure TForm1.FormCreate(Sender: TObject);
    begin
        SetWindowLong( Handle,  GWL_STYLE,  GetWindowLong( Handle, GWL_STYLE )
        and not WS_CAPTION ) ;  

        ClientHeight := Height;
    end;

    ClientHeight adalah area form yang diperuntukkan bagi obyek-obyek yang ditempelkan padanya, sedangkan Height adalah tinggi form total. Dengan menghilangkan title bar, kita harus menyamakan tinggi form dan tinggi daerah form khusus obyek

    SetWindowLong adalah fungsi pada Windows untuk mengganti atribut-atribut form. Fungsi ini diambil dari library Windows yang disimpan pada file user32.lib.

    Deklarasi dari SetWindowLong adalah sebagai berikut:

    LONG SetWindowLong(
    HWND hWnd, // handle window
    int nIndex, // mengganti nilai offset
    LONG dwNewLong // nilai baru
    );

    daftar nilai-nilai yang ada adalah:

    Value Action
    GWL_EXSTYLE Mengatur nilai baru extended window.
    GWL_STYLE Mengatur nilai window style.
    GWL_WNDPROC Mengatur alamat baru  prosedur window.
    GWL_HINSTANCE Sets a new application instance handle.
    GWL_ID Sets a new identifier of the window.
    GWL_USERDATA Sets the 32-bit value associated with the window. Each window has a corresponding 32-bit value intended for use by the application that created the window.


    Sampai pada tahap ini, Anda mempunyai form tanpa title bar. Ada satu kekurangannya. Form ini tidak dapat digeser
  3.  Tulis kode program dibawah ini pada event OnMouseDown milik TPanel agar TPanel dapat menggantikan titlebar untuk drag Form (Form dapat digeser)


    procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
        ReleaseCapture;
        SendMessage(self.Handle, WM_SYSCOMMAND, 61458, 0) ;
    end;

Menggeser Form Bukan pada Titlebar Rating: 4.5 Diposkan Oleh: Good Dreamer

0 comments:

Posting Komentar

Diberdayakan oleh Blogger.