救命呀!!!(0分)

  • 主题发起人 主题发起人 lk628025
  • 开始时间 开始时间
L

lk628025

Unregistered / Unconfirmed
GUEST, unregistred user!
如何才能像winmnap那样把两个窗体(歌曲列表与主窗体)像磁铁一样吸附起来,又可以关掉歌曲列表。什么控件可以实现这个功能?在哪可以下载呀?我急用,拜托了!!!
 
(还以为真的命要丢了呢,原来却是)
自己做,没问题!
两个Form,....
有问题了,怎么知道Form移动了?
.....
帮你喊:救命啊
 
怎么做呀?
 
有个笨办法:
放个Timer检测Form是否移动了,如果移动了,让另一个Form跟上。
 
那样行吗?那样子的话,更本就达不到磁性的效果了!你好好想想呀

(在线恭候!!!)
 
我的机子很慢,所以效果很丑。嘻嘻
 
不知,
有空看看我的网站吧!
http://BetterMicrosoft.icpcn.com
 
如果找不到好的方法,就只有用TIMER实时校准位置,让窗体二的LEFT=窗体一LEFT+窗体一HEIGHT即可。我以前也这样做过的。
 
截取FORM1的移动消息
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
procedure WMMove(var msg: TMessage);Message WM_Move;
end;


var
Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.WMMove(var msg: TMessage);
begin

if Assigned(form2) then

begin

with Form2do

begin

Left := Self.Left + Self.Width;
Top := Self.Top;
end;

end;

inherited;
end;

 
非常感谢kingdeezj!!!
 
再问kingdeezj: 我怎么样才能将form2吸附到form1的下端,就是控件StatusBar1的下面呀?再次感谢!
 
我已经实现了:
procedure TForm1.WMMove(var msg: TMessage);
begin

try
if Assigned(file_form) then

begin

with file_formdo

begin

file_form.Left := form1.StatusBar1.BoundsRect.Bottom;
file_form.left:=form1.Left;
file_form.top:=form1.BoundsRect.Bottom;
end;

end;

except
exit;
end;

end;

但现在引发了新的问题,运行的程序关闭后出现如下对话框:
Project xxxx raised exception class EAeecssviolation with message 'Aeecssviolation at address 00000000 Read of address 00000000'.
Process stopped. Use Step or Run to continue.
请各位高手指点!!!
 
procedure TForm1.WMMove(var msg: TMessage);
begin

if Assigned(form2) then

Form2.SetBounds(Self.Left,Self.Top+Self.Height,Form2.Width,Form2.Height);
inherited;
end;

//这样效果要好一些.FORM2只刷新一次.
至于出错,检查一下其他代码.
 
请问kingdeezj:我如果把上面那段代码用一个timer来代替,不用procedure TForm1.WMMove(var msg: TMessage)这个,就不会出现任何问题,但他在拖动form1的时候
form2的反映比较慢,你可以试试,如果把timer的interval的属性设小一点的话,比如500,那就能看就timer不停的刷新,很难看?能有解决的办法吗?
 
kingdeezj大侠,问题出在Message WM_Move;这句上面呀!如果我去掉这句的话,程序没有任何问题,可能是这条语句更我的程序冲突了,可我的程序那么大,我一时也不知道是哪条语句与它冲突了,请问,还有没有其他的语句可以代替这句呀(Message WM_Move)?小弟不胜感激呀!!!
 
应该是不会出错/冲突的.是不是和file_form有关?
如果方便,把代码发过来瞧瞧?不需要全部,只要出错的就行,你可把其他相关代码删掉.
kingdeezj@sina.com
 
非常感谢kingdeezj,我现在真的实现了,我不用procedure TForm1.WMMove(var msg: TMessage)这个,我只是把他下面的代码拷到一个新建的timer下面,然后把timer的
interval的属性设为1就OK,不信,你试试,效果还不错,再次感谢你,我的QQ是:23141133,非常希望能和你聊聊。
 
接受答案了.
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
824
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部