去掉标题栏后怎么移动窗口?
我用图片代替了标题栏,我想点住图片时就可以移动窗口,怎么做呢?
我用图片代替了标题栏,我想点住图片时就可以移动窗口,怎么做呢?
解决方案 »
- CreateProcess 失败!%1 不是有效的 Win32 应用程序。莫名其妙啊
- 如何多表读写数据库?
- 数据结构最早的论文是哪几篇,可以介绍给我吗
- 有把c++专程pascal的工具吗
- 怎样使一个程序在桌面出现之前就运行?
- 看了一个程序,有这几个问题。分不多了,50分吧~~
- delphi与sqlserver问题
- 为什么用Quickrep做的报表在Epson Stylus photo Ex2中不能打印出来?
- 大侠们好!小弟请问如何实现WINDOWS的F3查找功能??
- 如何判断是否为超级用户 [ Win2000 ]
- 一个关于在BDE中用ACCESS密码的问题
- 请多关照,问题挺多的,高手请进(我是新手,分不多,请见谅)
无边界窗体移动方法
SendMessage(Handle,WM_NCLButtonDown,HTCaption,GetMessagePos);******************不用标题栏也移动窗体一般情况下,移动一个窗体需要将鼠标放置在标题栏上才能拖动窗体,为 什么非要使用标题栏呢?其实我们可以使用一个巧妙的方法来实现将鼠标放置 在窗体上按下就可拖动窗体,下面先看实现代码。在Form1的“Private”部分声明过程:在private部分加入下列代码:procedure wmnchittest(var msg:twmnchittest);message wm_nchittest;在程序部分加入以下代码:procedure TForm1.wmnchittest(var msg:twmnchittest);begininherited;if (htclient=msg.result) then msg.result:=htcaption;end;上面的关键代码虽然只有两行,但它实现了鼠标直接拖动窗体的目的。代码的原理是利用窗体的WM_NCHITTEST消息,这个消息是当光标移动、鼠标按下或释放时发生的,当程序检测到鼠标在窗体中按下的消息后(消息的值为htClient),将鼠标在标题栏上按下时产生的消息(值为htCaption)传递出去,这样就巧妙的欺骗程序认为是标题栏被按下,当然就可拖动窗体了************************----通过为Application.OnMessage创建一个处理程序获得Windows消息,可以调整应用程序对不同消息的响应或为不能正常识别的消息提供服务。这里受到窗体客户区的鼠标按下的消息后,发送一条在标题栏内按下的消息。 ---- 例 程 如 下:..procedure FormCreate(Sender: TObject);private{ Private declarations }procedure AppMessage(var Msg:TMsg;var Handled:Boolean);..{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);beginApplication.OnMessage:=AppMessage;//捕捉消息:将程序的收到消息事件与消息过滤过程关联起来end;procedure TForm1.AppMessage(var Msg:TMsg;var Handled:Boolean);beginif (Msg.message=WM_LButtonDown) and//如果鼠标左键按下的话(DefWindowProc(Handle,WM_NCHitTest,0,GetMessagePos)=HTClient) and//判断光标是否在客户区内((GetKeyState(vk_CONTROL) < 0)//检测“Ctrl”键是否按下thenbeginSendMessage(Handle,WM_NCLButtonDown,HTCaption,GetMessagePos);//发送鼠标在标题栏内按下的消息Handled:=true;end;end;