delphi中直接拖动窗体,不用点标题栏
2008-05-21 13:11
316 查看
1. 一般情况下,移动一个窗体需要将鼠标放置在标题栏上才能拖动窗体,为 什么非要使用标题栏呢?其实我们可以使用一个巧妙的方法来实现将鼠标放置 在窗体上按下就可拖动窗体,下面先看实现代码。在Form1的“Private”部分声明过程:
在private部分加入下列代码:
1procedure wmnchittest(var msg:twmnchittest);
2message wm_nchittest;
在程序部分加入以下代码:
1procedure TForm1.wmnchittest(var msg:twmnchittest);
2begin
3inherited;
4if (htclient=msg.result) then msg.result:=htcaption;
5end;
上面的关键代码虽然只有两行,但它实现了鼠标直接拖动窗体的目的。代码的原理是利用窗体的WM_NCHITTEST消息,这个消息是当光标移动、鼠标按下或释放时发生的,当程序检测到鼠标在窗体中按下的消息后(消息的值为htClient),将鼠标在标题栏上按下时产生的消息(值为htCaption)传递出去,这样就巧妙的欺骗程序认为是标题栏被按下,当然就可拖动窗体了。
1procedure TForm1.OnMouseDown(Sender: TObject; Button: TMouseButton;
2 Shift: TShiftState; X, Y: Integer);
3begin
4 if button=mbleft then
5 begin
6 ReleaseCapture;
7 Form1.Perform (WM_syscommand,$f012,0);
8 end;
9end;
在private部分加入下列代码:
1procedure wmnchittest(var msg:twmnchittest);
2message wm_nchittest;
在程序部分加入以下代码:
1procedure TForm1.wmnchittest(var msg:twmnchittest);
2begin
3inherited;
4if (htclient=msg.result) then msg.result:=htcaption;
5end;
上面的关键代码虽然只有两行,但它实现了鼠标直接拖动窗体的目的。代码的原理是利用窗体的WM_NCHITTEST消息,这个消息是当光标移动、鼠标按下或释放时发生的,当程序检测到鼠标在窗体中按下的消息后(消息的值为htClient),将鼠标在标题栏上按下时产生的消息(值为htCaption)传递出去,这样就巧妙的欺骗程序认为是标题栏被按下,当然就可拖动窗体了。
1procedure TForm1.OnMouseDown(Sender: TObject; Button: TMouseButton;
2 Shift: TShiftState; X, Y: Integer);
3begin
4 if button=mbleft then
5 begin
6 ReleaseCapture;
7 Form1.Perform (WM_syscommand,$f012,0);
8 end;
9end;
相关文章推荐
- [Delphi]不用标题栏也移动窗体
- Delphi 不用标题栏移动窗体
- 不拖动标题栏移动窗体,最大化窗体,最小化窗体,还原窗体
- 三种方法实现Delphi无标题窗体的拖动
- DELPHI语法基础学习笔记-Windows 句柄、回调函数、函数重载等(Delphi中很少需要直接使用句柄,因为句柄藏在窗体、 位图及其他Delphi 对象的内部)
- MFC 客户区 模拟标题栏 功能 ,实现窗体拖动
- 如何模拟一个象窗体一样的控件(标题栏、焦点、拖动、
- 用户第一次拖动widget到桌面上,不用授权提示,直接安装
- Delphi中直接关闭子窗体
- Delphi组件开发-在窗体标题栏添加按钮
- Delphi组件开发-在窗体标题栏添加按钮(使用MakeObjectInstance(NewWndProc),并处理好多消息)
- C#窗体隐藏标题栏后,鼠标可拖动窗口的代码!
- 传窗体(例子是点完修改页面的修改后,直接在主窗体显示修改后的内容,不用再点一次查询)
- [Win32]只允许最大化最小化窗口,禁止双击标题栏、拖动窗体、点击复原按钮来改变窗口大小
- (转)让鼠标拖动WinForm窗体,模仿鼠标标题栏拖动
- 不用标题栏拖动窗口最简单的方法
- 标题栏外区域拖动窗体
- [转万一] 不使用标题栏拖动窗体
- delphi实现延时的方法,很多人首先就想到用timer控件,这里我们不用timer控delphi直接用settimer函数实现延时的方法
- 窗体显示标题栏的时候,禁止鼠标拖动窗体