一个简单的问题,快来拿分!!!(50分)

  • 主题发起人 主题发起人 jackliew
  • 开始时间 开始时间
J

jackliew

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在一个bordstyle=bsNone的window中通过控制mouse移动window?
 
unit Unit1;<br><br>interface<br><br>uses<br>&nbsp; Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;<br><br>type<br>&nbsp; TForm1 = class(TForm)<br>&nbsp; private<br>&nbsp; &nbsp; procedure WMNCHitTest(var m:TWMNCHitTest);message wm_NCHitTest;<br>&nbsp; &nbsp; { Private declarations }<br>&nbsp; public<br>&nbsp; &nbsp; { Public declarations }<br>&nbsp; end;<br><br>var<br>&nbsp; Form1: TForm1;<br><br>implementation<br><br>{$R *.DFM}<br>procedure TForm1.WMNCHitTest(var m:TWMNCHitTest);<br>begin<br>&nbsp; inherited;<br>&nbsp; if m.Result=htClient then<br>&nbsp; &nbsp; m.Result:=htCaption;<br>end;<br><br>end.<br>
 
不是这样的。可能我没有说清楚:)<br>随着mouse的move,window也要到相应的位置。
 
unitUnit1;<br>:<br>type<br>TForm1=class(TForm)<br>procedureFormCreate(Sender:TObject);<br>:<br>public<br>{申明消息过滤过程}<br>procedureAppMessage(varMsg:TMsg;varHandled<br>:Boolean);<br>:<br>implementation<br>procedureTForm1.FormCreate(Sender:TObject);<br>begin<br>{捕捉消息:将程序的收到消息事件与消息过滤过程<br>关联起来}<br>Application.OnMessage:=AppMessage;<br>end;<br>procedureTForm1.AppMessage(varMsg:TMsg;var<br>Handled:Boolean);<br>begin<br>{如果鼠标左键按下的话}<br>ifMsg.message=WM_LButtonDown then<br>begin<br>{断光标是否在用户工作区内}<br>if DefWindowProc(handle,WM_NCHitTest,0,GetMessagePos)=HTClient then<br>begin<br>{出鼠标在用户标题栏内被按下的消息}<br>SendMessage(Handle,WM_NCLButtonDown,<br>HTCaption,GetMessagePos);<br>Handled:=true;{消息处理完毕,窗体不再接受M<br>ouseDown及Click事件,如果为false,程序的运行稍微有<br>发出鼠标在用户标题栏内被按下的消息}<br>些不正常。}<br>end;<br>end;<br>end;<br>end.
 
我是在client区中down了mouse.在client中Move Mouse,then window 随着mouse的move而move
 
小天  的好像就可以实现了你要求的功能吧 ?
 
知道了,谢谢诸位。呵呵。
 
多人接受答案了。
 
后退
顶部