Mam's WebSite

Mamの覚書Q&A検索


大項目:「 Delphi 」 - 中項目:「 メッセージ 」

「 VCLでフォーム(TForm)のBorderStyleプロパティをbsNoneにした場合のウィンドウのドラッグ移動 」

VCLでフォーム(TForm)のBorderStyleプロパティをbsNoneにした場合でも、
ウィンドウをマウスのドラッグで移動できるようにするには。


回答

WM_NCHITTESTメッセージを捉えてクライアント領域(HTCLIENT)だった場合はウィンドウのキャプション(HTCAPTION)を返せば、クライアント領域でもウィンドウをドラッグで移動させることができます。
 
WM_NCHITTEST は全てのマウス関連メッセージの前に発生するメッセージで、マウスカーソルの下がキャプション(HTCAPTION)か、ウィンドウのクライアント領域(HTCLIENT)か、最大表示ボタン内(HTMAXBUTTON)か、スクリーンの背景(HTNOWHERE)等々、どの部分が押されたのかを返すメッセージです。

ソース

unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
 
type
  TForm1 = class(TForm)
  private
    { Private 宣言 }
    //以下を追加
    procedure HitTest(var Msg:TWMNCHitTest);message WM_NCHitTest;
  public
    { Public 宣言 }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
{ TForm1 }
 
//以下を追加
procedure TForm1.HitTest(var Msg: TWMNCHitTest);
begin
  inherited;
  if Msg.Result=HTCLIENT then
    Msg.Result:=HTCAPTION;
end;
 
end.

Copyright 2019 Mam