[Back to DELPHI SWAG index]  [Back to Main SWAG index]  [Original]


{
Q: How can I make a form move by clicking and dragging in the client area
   instead of on the caption bar?

A: The easiest way to do this is to "fool" Windows into thinking that
   you're actually clicking on the caption bar of a form.  Do this by
   handling the wm_NCHitTest windows message as shown in the sample unit
   below.

   TIP: If you want a captioness borderless window similar to a floating
   toolbar, set the Form's Caption to an empty string, disable all of the

   BorderIcons, and set the BorderStyle to bsNone.
}

unit Dragmain;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    procedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);

begin
  inherited;                    { call the inherited message handler }
  if  M.Result = htClient then  { is the click in the client area?   }
    M.Result := htCaption;      { if so, make Windows think it's     }
                                { on the caption bar.                }
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Close;
end;

end.

{ The text representation of the .DFM file is below:

object Form1: TForm1
  Left = 203

  Top = 94
  BorderIcons = []
  BorderStyle = bsNone
  ClientHeight = 273
  ClientWidth = 427
  Font.Color = clWindowText
  Font.Height = -13
  Font.Name = 'System'
  Font.Style = []
  PixelsPerInch = 96
  TextHeight = 16
  object Button1: TButton
    Left = 160
    Top = 104
    Width = 89
    Height = 33
    Caption = 'Close'
    TabOrder = 0
    OnClick = Button1Click
  end
end

}



[Back to DELPHI SWAG index]  [Back to Main SWAG index]  [Original]