[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]