Как перехватить события в неклиентской области формы?

Материал из DRKB

Как перехватить события в неклиентской области формы?[править | править код]

Создайте обработчик одного из сообщений WM_NC (non client - не клиентских) (посмотрите WM_NC в Windows API help). Пример показывает как перехватить движение мыши во всей неклиенстской области окна (рамка и заголовок).

Пример:

unit Unit1;

interface

uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
    procedure WMNCMOUSEMOVE(var Message: TMessage); message WM_NCMOUSEMOVE;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.WMNCMOUSEMOVE(var Message: TMessage);
var
  s: string;
begin
  case Message.wParam of
    HTERROR:         s := 'HTERROR';
    HTTRANSPARENT:   s := 'HTTRANSPARENT';
    HTNOWHERE:       s := 'HTNOWHERE';
    HTCLIENT:        s := 'HTCLIENT';
    HTCAPTION:       s := 'HTCAPTION';
    HTSYSMENU:       s := 'HTSYSMENU';
    HTSIZE:          s := 'HTSIZE';
    HTMENU:          s := 'HTMENU';
    HTHSCROLL:       s := 'HTHSCROLL';
    HTVSCROLL:       s := 'HTVSCROLL';
    HTMINBUTTON:     s := 'HTMINBUTTON';
    HTMAXBUTTON:     s := 'HTMAXBUTTON';
    HTLEFT:          s := 'HTLEFT';
    HTRIGHT:         s := 'HTRIGHT';
    HTTOP:           s := 'HTTOP';
    HTTOPLEFT:       s := 'HTTOPLEFT';
    HTTOPRIGHT:      s := 'HTTOPRIGHT';
    HTBOTTOM:        s := 'HTBOTTOM';
    HTBOTTOMLEFT:    s := 'HTBOTTOMLEFT';
    HTBOTTOMRIGHT:   s := 'HTBOTTOMRIGHT';
    HTBORDER:        s := 'HTBORDER';
    HTOBJECT:        s := 'HTOBJECT';
    HTCLOSE:         s := 'HTCLOSE';
    HTHELP:          s := 'HTHELP';
  else 
    s := '';
  end;
  Form1.Caption := s;
  Message.Result := 0;
end;

end.



 DELPHI VCL FAQ Перевод с английского
 Подборку, перевод и адаптацию материала подготовил Aziz(JINX)
 специально для Королевства Дельфи


Source: Взято из
ID: 00479