题:
我的程序如下:
其中:Panel_main:TPanel;,我想让所有窗体比如:Form2,form3等 在Panel_main显示,我现在可以,不过不会重叠,会排列在一起,如果我只要一个窗体,这样不方便,所以有没有办法,让窗体在Panel_main上显示,后一个打开窗体重叠 在前一个窗体,而不是排列在一起,窗体的设置也设了,不知道为什么。请高手指教,谢谢!
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, ComCtrls, ToolWin, SUISideChannel;type
  TForm1 = class(TForm)
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    ToolButton5: TToolButton;
    ToolButton6: TToolButton;
    Splitter1: TSplitter;
    Panel_main: TPanel;
    procedure Panel_mainConstrainedResize(Sender: TObject; var MinWidth,
      MinHeight, MaxWidth, MaxHeight: Integer);
    procedure Panel_mainMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Panel_mainUnDock(Sender: TObject; Client: TControl;
      NewTarget: TWinControl; var Allow: Boolean);
    procedure ToolButton1Click(Sender: TObject);
    procedure ToolButton2Click(Sender: TObject);
    procedure ToolButton3Click(Sender: TObject);
    procedure ToolButton4Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation
  uses unit2,unit3;
{$R *.dfm}procedure TForm1.Panel_mainConstrainedResize(Sender: TObject; var MinWidth,
  MinHeight, MaxWidth, MaxHeight: Integer);
begin
if Panel_main.DockClientCount > 0 then
      Panel_main.Color :=$00DDDDDD
   else
      Panel_main.Color :=clTeal;
end;procedure TForm1.Panel_mainMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var
   I_temp:integer;
begin
   if Panel_main.DockClientCount > 0 then
   begin
      Panel_main.Color :=$00DDDDDD;
      for I_temp:=0 to Panel_main.DockClientCount -1 do
      begin
         if (Panel_main.DockClients[I_temp] as Tform).Showing then exit; 
      end;
      Panel_main.DockClients[0].Show ;
   end
   else
      Panel_main.Color :=clTeal;end;procedure TForm1.Panel_mainUnDock(Sender: TObject; Client: TControl;
  NewTarget: TWinControl; var Allow: Boolean);
begin
if newtarget<>sender then
      ALLOW:=FALSE
   else
      Allow:=true;
end;procedure TForm1.ToolButton1Click(Sender: TObject);
begin
application.CreateForm(TForm2,Form2);
   Form2.Dock(panel_main,BoundsRect);
   Form2.show;
end;procedure TForm1.ToolButton2Click(Sender: TObject);
begin
  application.CreateForm(TForm3,Form3);
   Form3.Dock(panel_main,BoundsRect);
   Form3.show;
end;procedure TForm1.ToolButton3Click(Sender: TObject);
var
   I_temp:integer;
begin
   if panel_main.DockClientCount=1 then exit;  //只有一个窗口时退出
   //以下程序可能还有问题
   for I_temp:=0 to panel_main.DockClientCount -1 do
   begin
      (panel_main.DockClients[I_temp]as Tform).Show ;
      //可能不需要下一句
      //application.ProcessMessages ;
   end;end;procedure TForm1.ToolButton4Click(Sender: TObject);
var
   I_temp:integer;
begin
   for I_temp:=0 to panel_main.DockClientCount -1 do
   begin
      if (panel_main.DockClients[I_temp] as Tform).Showing  then
      begin
         (panel_main.DockClients[I_temp] as Tform).Close ;
      end;
   end;end;procedure TForm1.FormShow(Sender: TObject);
var
   I_windows:integer;
   B_havedata:boolean;
begin
 if panel_main.DockClientCount > 0 then
   begin
      for I_windows:=0 to panel_main.DockClientCount -1 do
      begin
         if panel_main.DockClients[I_windows].Visible then
         begin
            B_havedata:=false;
            try
               if (((panel_main.DockClients[I_windows] as Tform).Controls[2] as Tpanel).Controls[0] as Tpanel).Controls[1].Name='DBG_data' then
                  B_havedata:=true;
            except
            end;
end;
end;  
 end;  
 end;end.