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;
如果你仅仅使用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;
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;
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;