Delphi提供了手工Dock的两个函数
TControl.ManualFloat
TControl.ManualDock

解决方案 »

  1.   

    用RemoveComponent和InsertComponent把form中所有的控件移进来就行了。
      

  2.   

    to yxf:不好,窗体中控件的位置不好控制呀
    to yqh:再试试好吗?
    to checky:谢谢,用你说的form3.ManualDock(self.PageControl1)可以用程序控制把Form3放到PageControl中.
      但是有一个问题:
      我只想把form3放进去,不想再拖出来呀,所以我接着就把form3.DragKind :=dkDrag;form3.DragMode:=dmManual;可是我再在PageControl中拖Form3的时候,触发了异常,怎么办?
      

  3.   

    我以前的一个同事,在修改我的程序时,将DockSite改成了False,那么就拖不出去了。(我不能确认这样改是否可以)
      

  4.   

    to checky:
       对的对的,根本不用修改默认的DockSite(容器pagecontrol的),DragMode,DragKind(要求放入到容器中的Form),动态生成form后,调用Form1.manualDock(self.PageControl)就行了。:)
       还有两个问题,不好意思,1、类名放在string型变量中,怎样动态创建这种类的实例?2、对象名放在string型变量中,怎样删除这个对象(它是动态生成的)
      

  5.   

    第一个好解决,用RTTI,你先RegisterClasses,然后GetClass,就可以动态创建了。
    第二个我觉得不太可能。因为对象创建后实际只是一个地址,对象名只是这个地址的好听的名字而已。因此根本就找不到,更不用说释放了。但是可以利用面向对象的特点,只要声明一个TObject,什么对象都能存放。