我想把一个窗体停靠在一个事先设计好的面板上,不知如何实现?

解决方案 »

  1.   

    其实就是窗体的停靠技术.程序运行后,出现主窗口,按一个按钮,出现另一个窗口,拖动此窗口,与主窗口融合
    在一起,融合后主窗口的Caption变成两个窗口的Caption相加。在主窗口form1中放置
    两个Panel控件(panel1和panel2),一个Button控件(button1);另一个窗口form2为
    空白窗口。具体属性设置如下:  panel1:
      align:alleft;
      docksite:true;
      usedockmanager:true;
      panel2:
      align:albottom;
      docksite:true;
      usemanager:true;
      form2:
      anchors:[aktop,akbottom,akleft,akright];
      dragmode:dmautomatic;
      dragkind:dkdock;
      设置button1的onclick事件,对应的代码如下:
      procedure TForm1.Button1Click(Sender: TObject);
      begin
      form2.Show;
      a:=form1.caption;
      b:=form2.caption;
      end;
      设置panel1和panel2的onundock事件,代码如下:
      procedure TForm1.Panel1UnDock(Sender: TObject; Client: TControl; NewTarget: TWinControl; var Allow: Boolean);  begin
      form1.caption:=a;
      form1.Refresh;
      end;
      设置panel1和panel2的ondockdrop事件,代码如下:
      procedure TForm1.Panel1DockDrop(Sender:TObject; Source: TDragDockObject; X, Y: Integer);
      begin
      form1.Caption:=a+′,′+b;
      form1.Refresh;
      end;
      其中a,b为String型变量,用以保存窗口的最初标题,在form1的接口处声明。
      

  2.   

    简单说就是把容器,比如form、panel等,把它们的docksite属性设置为true,autosize属性也设置为true,然后把需要停靠的控件的dragkind属性设置为dkdock,dragmode设置为dmautomatic即可,这些也可以在程序中用语句实现。
      

  3.   

    动态窗体停靠:var
      Form1: TForm1;
      CurrentForm:tform;
    implementationuses unit2,unit3;{$R *.dfm}procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
       if  CurrentForm<>nil then
             CurrentForm.Close;
       if treeview1.Selected.SelectedIndex=1 then
       begin
          Application.CreateForm(TForm2,Form2);
          CurrentForm := Form2;
          P_frm.Width := CurrentForm.Width;
          P_frm.height := CurrentForm.height;
          CurrentForm.ManualDock(p_frm,nil,alLeft);
          CurrentForm.Align := alClient;
          CurrentForm.AutoSize := true;
          CurrentForm.Show;
       end
       else if treeview1.Selected.SelectedIndex=2 then
       begin
          Application.CreateForm(TForm3,Form3);
          CurrentForm := Form3;
          P_frm.Width := CurrentForm.Width;
          P_frm.height := CurrentForm.height;
          CurrentForm.ManualDock(p_frm,nil,alLeft);
          CurrentForm.Align := alClient;
          CurrentForm.AutoSize := true;
          CurrentForm.Show;
       end;end;