鲁小班的 dock president控件的最简单的例子how to use 里面在主窗体上加个按钮,事件处理代码写:
    form2.Show;然后把form2 dock进主窗体后再关闭,然后就再也show不出来了?怎么办呢?  有用过的吗?

解决方案 »

  1.   

    贴子没人回,分送不出去,结不了贴,又要强奸信誉这个词,扣我的信誉分了,该死的csdn
      

  2.   

    procedure TMainFrm.N15Click(Sender: TObject);
    var
       i:integer;
    begin
      for I:=0 to  MainFrm.Panel1.ControlCount-1 do
        begin
         if MainFrm.Panel1.Controls[i] is TForm then
            (MainFrm.Panel1.Controls[i] as TForm).Close;
        end;
        SetingFrm := TSetingFrm.Create(self);
        SetingFrm.Dock(MainFrm.Panel1,BoundsRect);
        SetingFrm.Show;
    end;
      

  3.   

    如果你仅仅使用Dock的显示与不显示..那么我可以告诉你一个方法.将panel的..Onundock设置为false,就是不允许undockprocedure TfrmFcp.plDockLeftUnDock(Sender: TObject; Client: TControl;
      NewTarget: TWinControl; var Allow: Boolean);
    begin
      Allow:=false;
    end;重写窗体的Oncreate代码
    constructor TDockForm.Create(AOwner: TComponent; DockParent: Tpanel);
    begin
      inherited Create(AOwner);
        SWidth:=Width;
        Sheight:=Height;
      if DockParent <> nil then
        begin
          ManualDock(DockParent);
          ShowDockPanel(false);
        end;
    end;显示或者隐藏dockPanel的代码
    procedure TDockForm.ShowDockPanel(Ashow:boolean);
    begin
       if (HostDockSite is TPanel) then
          (HostDockSite As Tpanel).Visible:=Ashow;
    end;然后将你要进行dock的窗体的onclose代码改为..procedure TDockForm.FormClose(Sender: TObject;
      var Action: TCloseAction);
    begin
      if (HostDockSite is TPanel) then
         (HostDockSite as TPanel).Visible:=false;
      Action := caNone;
    end;也就是关闭窗体的时候..并不执行关闭操作,而只是对窗体的docksite进行visible..那么你在show这个窗体的时候..需要进行一些检测..
    在你panel所在单元进行show panel的代码..vardockform:Tdockfrom;//这句放在本单元的..implementation 后..这样本单元可以访问.我写在Action中的例子..你可以参照修改..让dockpanel的显示与action的checked同步.      if Assigned(dockform) then
            begin
              (sender as Taction).Checked:=not (sender as Taction).Checked;
               dockform.ShowDockPanel((sender as Taction).Checked);
            end;我没有允许undock的原因是我只想实现Dockpanel的显示与不显示..而并不需要它的拖放功能..所以我将panel的DockOver设置为false了...
    procedure TfrmFcp.plDockLeftDockOver(Sender: TObject;
      Source: TDragDockObject; X, Y: Integer; State: TDragState;
      var Accept: Boolean);
    begin
      Accept:=false;
    end;