如何实现同时拖动两个窗口?(30分)

C

coocoo

Unregistered / Unconfirmed
GUEST, unregistred user!
在鼠标按下时如下代码将实现一个窗口的拖动:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
const SC_DRAGMOVE:longint=$f012;
begin
ReleaseCapture;
sendmessage(form1.Handle,wm_syscommand, SC_DRAGMOVE, 0);
end;
但如果想让form2也同时拖动时,以下代码却无效:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
const SC_DRAGMOVE:longint=$f012;
begin
ReleaseCapture;
sendmessage(form1.Handle,wm_syscommand, SC_DRAGMOVE, 0);
sendmessage(form2.Handle,wm_syscommand, SC_DRAGMOVE, 0);
end;

如果在form1的MouseDown里动态设置form2的left和top,form2的移动会有一定的延迟,
从视觉上看并不是和form1一起拖动的,不符合我的需要。

如果我想同时拖动两个窗口需要怎么做?
 
拦截wm_move消息自己处理.
如:tform1.onmovemsg(msg:tmessage);
begin
inherited;
form2.left:=form1.left;
//类推...
msg.result:=0;
end;
 
我的问题里已经说了,这个方法不行,form2的移动有延迟,要是这么常规能实现我就不问了:)

我想用sendmessage来实现,功能以及实现上应该类似于在delphi或photoshop里多个元件一起移动
 
这个问题这么难吗?
 
拦截WM_POSCHANGGING,应该可以的,我以前做过。
 
应拦截两个窗体的wm_move完全可实现类winamp的磁性窗体.(我已试验通过)
你给个mail,我发给你!
 
到http://it2media.diy.163.com的软件开发栏赵元码
 
顶部