窗体之间控件的拖动?(100分)

  • 主题发起人 主题发起人 zhangc
  • 开始时间 开始时间
Z

zhangc

Unregistered / Unconfirmed
GUEST, unregistred user!
如果我想将一个窗体上的控件拖动到另外一个窗体上,如何做这个程序?
 
使用Delphi 4 的Dock window大概可以的。看看Demo中的例子
 
设计时可以,但运行时除了tqz讲的方法外,好象无别的方法了
 
target的form上create一个控件,属性自己搞定
原先的form上free掉那个控件
 
>target的form上create一个控件,属性自己搞定
>原先的form上free掉那个控件
hehe,那中间拖动的过程哪里去了?
 
基本上与其他控件的拖放一样处理,只是Drop后将控件的Parent和新的位置改一下
 
>hehe,那中间拖动的过程哪里去了?

zhangc,你是不是在你自己的一个应用的几个窗体中拖来拖去?
只要mouse move的时候判断一下mouse是不是down了,用一个全局变量跟踪你
drag的那个控件, mouse up的时候干上面的事

btw: 你的程序还要让鼠标当前所在的窗口获得焦点
 
procedure TForm1.Button3Click(Sender: TObject);
var
Acomp:TComponent;
begin
if Assigned(button1) then
begin
Button1.Parent:=Form2;
AComp:=Button1;
RemoveComponent(AComp);
Form2.InsertComponent(AComp);
end;
end;
拖动过程可以用画上去.
 
上面说得差不多,注意几点:
1.用removecomponent删除控件
2.注意parent属性。
 
不需要删除,也不需要Create,只需改变控件的Parent从一个Form到另外一个Form即可。
下面的代码把Form2.Button1.Parent改成Form1,则Form2.Button1的事件照样好用.
implementation
uses Unit2;
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
form2.Button1.parent:=self;
end;
 
会长:如只改parent,对象解除时好象会出错。
 
menxin: 对象解除的时候与Parent无关,是由Owner解除他的Components。
 
确实会有问题。
设想:Form1中的Button1的Owner是Form1,现在Parent变成Form2.
如果关闭并释放Form1,那么button1就也被free了,这时Form2肯定出问题,

 
tqz, Form2不会出问题, 只是button1没有了parent, 不显示而已. 因为button1
并没有被free. 如果关闭并释放的是Form2, 则Form1中不再显示button1, 因为这时
候button1才被Free了.
 
HuiZhang,I'm confused by you!
Button1从Form1拖到Form2,所以现在parent是Form2,Owner是Form1.
Form1.free之后,Button1就被Free了,所以Form2上的Button1会突然
消失。TControl在Destroy中 SetParent(nil);所以别的问题大概不会有。
但是要小心自己的代码里面不要再引用Button1.
 
tqz, 你说的很对, 控件在Form中间移来移去的确实不是一件好事。必须有一套安全
机制,否则会出现exception。

一个控件变换他所在的窗体是一种非常编程手段,不值得推广。可是现在本论坛中就
是有好多这种怪问题。

我想,zhangc的本意不是想移动不知道类型的控件,而是移动一个(或一种)特定的
控件,那样问题的处理方法就完全不同了,就变成了复制一个控件而删除原有的。
 
Long Time......Finish. :)
 
后退
顶部