delphi技巧——移动无标题窗口
来源:互联网 发布:越南聊天软件下载 编辑:程序博客网 时间:2024/05/23 00:07
delphi技巧——移动无标题窗口
关键词:移动,消息,无标题
作者:朱能文
我们都知道windows是通过标题栏来移动窗体的,当我们在标题栏上按下鼠标左键时,windows将发送wM_NCHitTest消息,来告诉系统要移动窗体。但我们在实际编程时,有时为了界面的需要或特殊的要求,窗体没有标题栏,我们必须通过程序来移动窗体。下面我将介绍几种移动窗体的方法和技巧。
方法一:根据鼠标按下和移动时的位置差,来计算窗体的位置。需要定义的变量如下:
var
Opos, Cpos: Tpoint;
Flag: boolean = false;
处理OnMouseDown事件代码:
Flag := true;
Opos.X := X;
Opos.Y := Y;
处理OnMouseMove事件代码:
if Flag then
begin
Cpos.X := X;
Cpos.y := Y;
Left := Left + Cpos.X - Opos.X;
Top := Top + Cpos.Y - Opos.Y;
end;
处理OnMouseMove事件代码:
Flag := false;
方法二:用户自定义消息,拦截“wM_NCHitTest”消息,将消息值“htclient”转为“htcaption”。实现如下:
先定义一消息常量:const WM_MyTest = WM_User+200;
在private部分声明过程:
procedure MoveClient(var message: Tmessage); message wM_NCHitTest;
过程的实现:
inHerited;//继承,窗体可以继续处理以后的事件
if Message.Result=htclient then
Message.Result := htcaption;
方法三:直接向窗体发送一条“wm_SysCommand”消息,需要使用未归档的“sc_DragMove”标志,定义如下:
const sc_DragMove = $f012;
我们只能向TWinControl派生组件发送该消息,而且只能响应鼠标按下事件,因为系统会在此时捕获鼠标(当释放鼠标键时,拖动操作是没有意义的)。在窗体的OnMouseDown事件处理代码:
ReleaseCapture; //释放鼠标的捕获状态;
(Sender as TWinControl).PerForm(wm_SysCommand,sc_DragMove,0);//向窗体发送移动消息;
上面我提供了三种移动无标题栏窗体的方法,方法一比较容易理解,且不需要理解windows消息处理机制,但此方法需要对窗体的鼠标事件处理太多,显得不够简洁。方法二通过消息转换,这种方法比较容易实现,但有一个缺点,窗体将不再响应鼠标其他消息,如果窗体上有鼠标右键处理,那么右键将得不到响应。方法三是最好的一种方法,通过定义sc_DragMove消息,注意sc_DragMove的值必须是$f012或$f011,通过PerForm方法发送sc_DragMove消息,这种方法窗体还可以处理其他鼠标事件,而不象方法二,所以我建议大家可以用方法三来移动无标题的窗体比较好。(以上几种方法我都在delphi6.0+windows2k上通过)。
- delphi技巧——移动无标题窗口
- delphi技巧——移动无标题窗口
- 简单的无标题窗口移动技巧(delphi)
- 移动无标题窗口(delphi)
- Delphi移动无标题窗体...
- 无标题窗口的移动
- 无标题窗口的移动
- 无标题窗口如何移动
- C#移动无标题窗口
- C#移动无标题窗口
- NSIS无标题窗口移动
- 无标题窗口移动及缩放
- 界面_无标题窗口的移动
- BCB中移动无标题窗口的
- nsis利用ButtonEvent插件移动无标题窗口
- MFC 无标题窗口移动、任务栏右键菜单
- Qt 实现无标题窗口的移动
- qt实现无标题窗口移动范围
- 流媒体学习笔记----配置一个编码进程
- 流媒体学习笔记---------编码视频的预览
- 关键字static总结<第一次在CSDN写的,请大家指点点(错误和不足)>之一
- 关键字static总结<第一次在CSDN写的,请大家指点点(错误和不足)>之二
- 算术编码算法
- delphi技巧——移动无标题窗口
- 你需要virtual析构函数吗
- 我为什么减少使用C++
- 考虑大对象:利用 JAVA 操作 DB2 Universal Database 中的 LOB 数据
- 通过JDBC操纵Oracle数据库LOB字段的几种情况分析
- ORACLE自带的JDBC源代码解析
- PHP4.23在WindowsXP下的IIS和Apache2两种服务器上的安装实例
- 用封装类来合理的设计PHP项目--谈PHP项目中类的封装
- 利用Editplus2的用户工具功能来即时调试PHP