Skip to main content

Cara Menambahkan Button Pada Title Bar Di Delphi

Cara menambahkan button pada title bar di delphi

Secara normal hanya terdapat tiga tombol pada title bar, yaitu tombol maximize, minimize, dan close. Jika Anda menginginkan untuk menambahkan button pada title bar, jawabnya bisa. Untuk dapat menambahkan dan memfungsikan tombol tersebut ada beberapa message atau pesan yang perlu dilibatkan, yaitu:
  • WM_NCPAINT adalah pesan yang dikirim untuk menggambar ulang title bar termasuk tombol tambahan.
  • WM_NCACTIVATE adalah pesan yang dikirim saat nonclient area perlu diubah untuk mengindikasikan keadaan aktif dan nonaktif.
  • WM_NCHITTEST adalah pesan yang dikirim saat cursor digerakkan (dipindah) atau tombol mouse ditekan.
  • WM_NCLBUTTONDOWN adalah pesan yang dikirim saat pengguna menekan tombol kiri mouse.
  • WM_NCLBUTTONUP adalah pesan yang dikirim saat pengguna melepaskan tombol kiri mouse.
Untuk menggambar tombol pada title bar Anda dapat menggunakan fungsi DrawButtonFace. Berikut adalah listing lengkapnya:

unit UMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons;

type
  TForm1 = class(TForm)
    procedure FormResize(Sender: TObject);
  private
    { Private declarations }
    CaptionBtn: TRect;
    procedure DrawCaptButton;
    procedure WMNCPaint(var Msg: TWMNCPaint); message WM_NCPaint;
    procedure WMNCActivate(var Msg: TWMNCActivate); message WM_NCACTIVATE;
    procedure WMSetText(var Msg: TWMSetText); message WM_SETTEXT;
    procedure WMNCHitTest(var Msg: TWMNCHitTest); message WM_NCHITTEST;
    procedure WMNCLButtonDown(var Msg: TWMNCLButtonDown); message WM_NCLBUTTONDOWN;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

const
  htCaptionBtn = htSizeLast + 1;

{$R *.dfm}

procedure TForm1.DrawCaptButton;
var
  xFrame, yFrame, xSize, ySize: Integer;
  R: TRect;
begin
  xFrame:= GetSystemMetrics(SM_CXFRAME);
  yFrame:= GetSystemMetrics(SM_CYFRAME);
  xSize:= GetSystemMetrics(SM_CXSIZE);
  ySize:= GetSystemMetrics(SM_CYSIZE);

  CaptionBtn:= Bounds(Width - xFrame - 4*xSize + 2, yFrame + 2, xSize - 2, ySize - 4);
  Canvas.Handle:= GetWindowDC(Self.Handle);
  Canvas.Font.Name:= 'Symbol';
  Canvas.Font.Color:= clBlue;
  Canvas.Font.Style:= [fsBold];
  Canvas.Pen.Color:= clYellow;
  Canvas.Brush.Color:= clBtnFace;
  try
    DrawButtonFace(canvas, CaptionBtn, 1, bsAutoDetect, False, False, False);
    R:= Bounds(Width - xFrame - 4*xSize + 2, yFrame + 3, xSize - 6, ySize - 7);
    with CaptionBtn do
      canvas.TextRect(R, R.Left + 2, R.Top - 1, 'W');
  finally
    ReleaseDC(Self.Handle, Canvas.Handle);
    Canvas.Handle:= 0;
  end;
end;

procedure TForm1.WMNCPaint(var Msg: TWMNCPaint);
begin
  inherited;
  DrawCaptButton;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  Perform(WM_NCACTIVATE, Word(Active), 0);
end;

procedure TForm1.WMNCActivate(var Msg: TWMNCActivate);
begin
  inherited;
  DrawCaptButton;
end;

procedure TForm1.WMSetText(var Msg: TWMSetText);
begin
  inherited;
  DrawCaptButton;
end;

procedure TForm1.WMNCHitTest(var Msg: TWMNCHitTest);
begin
  inherited;
  with Msg do
  if PtInRect(CaptionBtn, Point(XPos - Left, YPos - Top)) then
    Result:= htCaptionBtn;
end;

procedure TForm1.WMNCLButtonDown(var Msg: TWMNCHitMessage);
begin
  inherited;
  if (Msg.HitTest = htCaptionBtn) then
    Application.MessageBox('You clicked the button', 'Message', MB_OK or MB_ICONASTERISK);
end;

end.

Comments

Popular posts from this blog

Pengenalan Dasar Qlik Sense

Dewasa ini konsep penyajian data informasi banyak mengalami perubahan yang menggembirakan. Jika dahulu, konsep penyajian data adalah dalam bentuk larik-larik data berisi teks dan biasanya tidak dinamis dan tidak interaktif. Sekarang, seiring dengan pertumbuhan data informasi yang masif, dibutuhkan sebuah teknik penyajian data yang semakin sederhana namun memuat banyak informasi, tersaji secara dinamis dan interaktif, menjadikan pekerjaan analisis data lebih menyenangkan dari sebelumnya. Di sinilah konsep Business Intelligence berawal. Idenya adalah, saya sajikan kepada Anda begitu banyak informasi yang tentu saja yang Anda butuhkan, dalam format visual yang bersih, informatif, dinamis, dan interaktif dalam layar komputer Anda. Qlik Sense merupakan sebuah Aplikasi Reporting untuk keperluan Bussiness Intelligence. Merupakan pengembangan dari aplikasi BI pendahulunya yaitu QlikView . Qlik Sense pada dasarnya sama dengan QlikView . Hanya saja Qlik Sense lebih menekankan pada ide

Cara Membuat Aplikasi Di Qlik Sense

Salah satu kelebihan Qlik Sense dari software BI lainnya terletak pada penggunaannya yang begitu intuitif sehingga memberikan pengalaman pengguna yang mudah, menyenangkan, dan yang paling penting, fitur-fitur dalam Qlik Sense tersebut mudah dipelajari sehingga Anda akan relatif cepat menguasainya dan Anda dapat lebih fokus pada apa yang ingin Anda buat daripada memikirkan bagaimana cara membuatnya. Seperti yang telah saya jelaskan pada artikel sebelumnya, aplikasi Qlik Sense merupakan sebuah file yang berekstensi qvf . Di dalam aplikasi Qlik Sense terdiri dari sejumlah Sheet atau lembar kerja, di mana dalam sheet tersebut Anda membuat visualisasi data Anda. Anda dapat membuat lebih dari satu sheet dalam sebuah aplikasi Qlik Sense Anda, dan antar sheet akan saling terhubung satu sama lain. Membuat aplikasi di Qlik Sense begitu mudah dan intuitif. berikut langkah-langkahnya: Jalankan Qlik Sense. Setiap Qlik Sense dijalankan pertama kali akan menampilkan popup window selamat da

Cara Membuat Dan Menggunakan Unit Di Delphi

Artikel ini adalah lanjutan dari artikel Bekerja Dengan Unit Di Delphi .  Untuk membuat unit baru, pilih menu File | New | Unit . Listing di bawah ini merupakan suatu contoh unit yang dibuat Delphi. unit Unit2; interface implementation end.