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

Previous  Top  Next

    
 

 

 

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

 

Code:

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.

 

©Drkb::02315