注意,窗体模式非MDI模式,普通模式(windowstate:=fsNomal),所有打开得窗体均嵌入在同一个Panel里面!
打开程序得代码如下:
--------------------
case iNumber of
    0 :begin 
         Frm_pro_manage :=TFrm_pro_manage.Create(self);
         Frm_pro_manage.Parent :=self.Pnl_main;
         Frm_pro_manage.Show;
       end;
    1 :begin 
         Frm_archives :=TFrm_archives.Create(self);
         Frm_archives.Parent :=self.Pnl_main;
         Frm_archives.Show;
       end;
    2 :begin
         Frm_budget :=TFrm_budget.Create(self);
         Frm_budget.Parent :=self.Pnl_main;
         Frm_budget.Show;
       end;
-------------------
我想把上面所有打开得窗体用一个按钮一次性关闭!

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
    hCurrentWindow: HWnd;
    szText: array[0..254] of char;
    begin
    Memo1.Lines.Clear;
    hCurrentWindow := GetWindow(Handle, GW_HWNDFIRST);
    while hCurrentWindow <> 0 do
    begin
    if (GetWindowText(hCurrentWindow, @szText, 255)>0) and isWindowVisible(hCurrentWindow) then
    Memo1.Lines.Add(StrPas(@szText));
    hCurrentWindow:=GetWindow(hCurrentWindow, GW_HWNDNEXT);
    end;
    end;
      

  2.   

    在窗体Create时Owner改为Panel1如:TFrm_pro_manage.Create(Panel1);//self改为Panel1
    Procedure FreeForm;
    var i:integer;
    begin
      i:=0;
      while (i<Panel1.ComponentCount) and (Panel1.ComponentCount>0)  do
      if Panel1.Components[i] is TForm then
      begin
        Panel1.Components[i].Free;
        i:=0;
      end else Inc(i);
    end;