攔截 WM_NCHITTEST 訊息,當滑鼠在工作區 (htClient) 按下時,回傳 htCaption 欺騙系統以為點在標題列,即可拖曳移動無框/無標題視窗。
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 Msg: TWMNCHitTest); message WM_NCHITTEST;
end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.WMNCHitTest(var Msg: TWMNCHitTest);
begin
inherited;
if Msg.Result = htClient then
Msg.Result := htCaption; // 讓系統以為點在標題列
end;
procedure TForm1.Button1Click(Sender: TObject);
begin Close; end;
end.
object Form1: TForm1
BorderIcons = [] // 無系統按鈕
BorderStyle = bsNone // 無邊框/標題列
ClientHeight = 273
ClientWidth = 427
object Button1: TButton
Left = 160; Top = 104; Width = 89; Height = 33
Caption = 'Close'; OnClick = Button1Click
end
end