我建了一个无标题栏的窗口,现在想用鼠标拖动改变它的大小,(100分)

  • 主题发起人 主题发起人 flyddl
  • 开始时间 开始时间
自己写程序,判断鼠标是否在表单边缘,如果是则改变鼠标指针为双向箭头,再监测鼠标
移动情况并改变表单大小即可。
 
如果你的窗口是通过设置BorderStyle为bsNone得来的,就用Kucio的方法。用我下面的方
法,无标题栏也可改变大小。
1、BorderStyle为bsSizeable
2、
public
{ Public declarations }
procedure CreateParams(var Params: TCreateParams); override;

procedure TNeoForm.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
with Params do
begin
Style :=Style and (not WS_CAPTION);
Style :=Style or WS_POPUP
end
end;
 
CathyEagle说的对.
 
1、BorderStyle为bsSizeable

2、在Form的onCreate事件中写以下代码
procedure TTableWindow.FormCreate(Sender: TObject);
begin
SetWindowLong(Handle,GWL_STYLE,GetWindowLong(Handle,GWL_STYLE) and (not WS_CAPTION));
Height:=ClientHeight;
Width:=ClientWidth;
end;
 
在Form1的“Private”部分声明过程:

在private部分加入下列代码:
procedure wmnchittest(var msg:twmnchittest);
message wm_nchittest;
在程序部分加入以下代码:
procedure TForm1.wmnchittest(var msg:twmnchittest);
begin
inherited;
if (htclient=msg.result) then msg.result:=htcaption;
end;
原理是利用窗体的WM_NCHITTEST消息,
这个消息是当光标移动、鼠标按下或释放时发生的,
当程序检测到鼠标在窗体中按下的消息后(消息的值为htClient),
将鼠标在标题栏上按下时产生的消息(值为htCaption)传递出去,
这样就欺骗程序认为是标题栏被按下,当然就可拖动窗体了。
 
To bird:
  好像有点文不对题哦。
 
抱歉:)
 
在窗体的onmousedown事件中:
relesecaputre
perform(wm_cmdialog,$f012,0);
 
多人接受答案了。
 
后退
顶部