Z zhangc Unregistered / Unconfirmed GUEST, unregistred user! 1999-06-15 #1 如果我想将一个窗体上的控件拖动到另外一个窗体上,如何做这个程序?
T tqz Unregistered / Unconfirmed GUEST, unregistred user! 1999-06-15 #2 使用Delphi 4 的Dock window大概可以的。看看Demo中的例子
M mjt Unregistered / Unconfirmed GUEST, unregistred user! 1999-06-15 #3 设计时可以,但运行时除了tqz讲的方法外,好象无别的方法了
Y yifeng Unregistered / Unconfirmed GUEST, unregistred user! 1999-06-15 #4 target的form上create一个控件,属性自己搞定 原先的form上free掉那个控件
T tqz Unregistered / Unconfirmed GUEST, unregistred user! 1999-06-15 #5 >target的form上create一个控件,属性自己搞定 >原先的form上free掉那个控件 hehe,那中间拖动的过程哪里去了?
H huizhang Unregistered / Unconfirmed GUEST, unregistred user! 1999-06-15 #6 基本上与其他控件的拖放一样处理,只是Drop后将控件的Parent和新的位置改一下
Y yifeng Unregistered / Unconfirmed GUEST, unregistred user! 1999-06-15 #7 >hehe,那中间拖动的过程哪里去了? zhangc,你是不是在你自己的一个应用的几个窗体中拖来拖去? 只要mouse move的时候判断一下mouse是不是down了,用一个全局变量跟踪你 drag的那个控件, mouse up的时候干上面的事 btw: 你的程序还要让鼠标当前所在的窗口获得焦点
>hehe,那中间拖动的过程哪里去了? zhangc,你是不是在你自己的一个应用的几个窗体中拖来拖去? 只要mouse move的时候判断一下mouse是不是down了,用一个全局变量跟踪你 drag的那个控件, mouse up的时候干上面的事 btw: 你的程序还要让鼠标当前所在的窗口获得焦点
L Linwolf Unregistered / Unconfirmed GUEST, unregistred user! 1999-06-15 #8 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; 拖动过程可以用画上去.
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; 拖动过程可以用画上去.
M menxin Unregistered / Unconfirmed GUEST, unregistred user! 1999-06-15 #9 上面说得差不多,注意几点: 1.用removecomponent删除控件 2.注意parent属性。
H huizhang Unregistered / Unconfirmed GUEST, unregistred user! 1999-06-15 #10 不需要删除,也不需要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;
不需要删除,也不需要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;
H huizhang Unregistered / Unconfirmed GUEST, unregistred user! 1999-06-15 #12 menxin: 对象解除的时候与Parent无关,是由Owner解除他的Components。
T tqz Unregistered / Unconfirmed GUEST, unregistred user! 1999-06-16 #13 确实会有问题。 设想:Form1中的Button1的Owner是Form1,现在Parent变成Form2. 如果关闭并释放Form1,那么button1就也被free了,这时Form2肯定出问题,
H huizhang Unregistered / Unconfirmed GUEST, unregistred user! 1999-06-16 #14 tqz, Form2不会出问题, 只是button1没有了parent, 不显示而已. 因为button1 并没有被free. 如果关闭并释放的是Form2, 则Form1中不再显示button1, 因为这时 候button1才被Free了.
tqz, Form2不会出问题, 只是button1没有了parent, 不显示而已. 因为button1 并没有被free. 如果关闭并释放的是Form2, 则Form1中不再显示button1, 因为这时 候button1才被Free了.
T tqz Unregistered / Unconfirmed GUEST, unregistred user! 1999-06-16 #15 HuiZhang,I'm confused by you! Button1从Form1拖到Form2,所以现在parent是Form2,Owner是Form1. Form1.free之后,Button1就被Free了,所以Form2上的Button1会突然 消失。TControl在Destroy中 SetParent(nil);所以别的问题大概不会有。 但是要小心自己的代码里面不要再引用Button1.
HuiZhang,I'm confused by you! Button1从Form1拖到Form2,所以现在parent是Form2,Owner是Form1. Form1.free之后,Button1就被Free了,所以Form2上的Button1会突然 消失。TControl在Destroy中 SetParent(nil);所以别的问题大概不会有。 但是要小心自己的代码里面不要再引用Button1.
H huizhang Unregistered / Unconfirmed GUEST, unregistred user! 1999-06-16 #16 tqz, 你说的很对, 控件在Form中间移来移去的确实不是一件好事。必须有一套安全 机制,否则会出现exception。 一个控件变换他所在的窗体是一种非常编程手段,不值得推广。可是现在本论坛中就 是有好多这种怪问题。 我想,zhangc的本意不是想移动不知道类型的控件,而是移动一个(或一种)特定的 控件,那样问题的处理方法就完全不同了,就变成了复制一个控件而删除原有的。
tqz, 你说的很对, 控件在Form中间移来移去的确实不是一件好事。必须有一套安全 机制,否则会出现exception。 一个控件变换他所在的窗体是一种非常编程手段,不值得推广。可是现在本论坛中就 是有好多这种怪问题。 我想,zhangc的本意不是想移动不知道类型的控件,而是移动一个(或一种)特定的 控件,那样问题的处理方法就完全不同了,就变成了复制一个控件而删除原有的。