一个简单但是我不知道怎么解决的问题,如果使得给定的一个Form不能被拖动(50分)

  • 主题发起人 主题发起人 Bkhswrp
  • 开始时间 开始时间
B

Bkhswrp

Unregistered / Unconfirmed
GUEST, unregistred user!
一个简单但是我不知道怎么解决的问题,如果使得给定的一个Form不能被拖动
 
将FROM的BorderStyle属性设为以下中的 任何 一种:
1、bsDialog Not resizable; standard dialog box border
2、bsSingle Not resizable; single-line border
3、bsNone Not resizable; no visible border line
 
我知道设置BsNone可以解决,但是我还是希望保留Form的系统栏,好像通过拦截消息的方
式可以办到,但是我不知道移动Form的消息是哪种类型的!
 
在你的MouseDown事件下写:
ReleaseCapture();
Perform(WM_SYSCOMMAND,$f012,0);
 
.....
procedure WMSysCommand(var MSg:TWMWindowPosChanging);message WM_WindowPosChanging;
......
.....
procedure TForm1.WMSysCommand(var MSg: TWMWindowPosChanging);
begin
MSg.WindowPos^.flags:=msg.windowPos^.flags or SWP_NOMOVE;
end;
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
private
{ Private declarations }
procedure WMNCHITTEST(var MSG:TMessage);message WM_NCHITTEST;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMNCHITTEST(var MSG: TMessage);
begin
inherited;
if MSG.Result = HTCAPTION then MSG.Result := HTCLIENT;
end;

end.
 
独帅的方法挺好,我喜欢,呵呵
 
多人接受答案了。
 
后退
顶部