为了在打开一个子窗口的的时候判断其状态作相应的操作,有如下代码:
procedure TF_main.BD_FlightClick(Sender: TObject);
var
li_loop:integer;
lbl_falg:boolean;  //窗口是否打开的标志
begin
lbl_falg:=false;
//判断要打开的子窗体中是否已经打开
for  li_loop:=0 to self.MDIChildCount-1 do
  begin
  if self.MDIChildren[li_loop] is TF_flight then
    begin
    lbl_falg:=true;    //判断出窗口已打开
    end
  end;   if lbl_falg then  //如果子窗体已打开,则将它激活
      begin
      F_flight.Show;//激活
      if F_flight.WindowState=wsMinimized then
      ShowWindow(F_flight.Handle,SW_SHOWNORMAL);//如果是最小化就显示为正常
      end
   else              // 如果子窗体未打开,则创建它
      begin
      F_flight:=TF_flight.Create(Self);
      F_flight.Show;
      end;
end;现在的问题是有很多菜单都要作同样的操作,唯一不同的在于使用不同的类创建不同的子窗体请问有具体的方法吗?

解决方案 »

  1.   

    procedure TFormMain.FindAndShowChildForm(ChildFormName: string);
    var
      i : integer;
    begin
      for i:=0 to FormMain.MDIChildCount -1 do
        if (ChildFormName = FormMain.MDIChildren[i].ClassName) then
        begin
          FormMain.MDIChildren[i].Show;
          if FormMain.MDIChildren[i].WindowState = wsMinimized then
             ShowWindow(FormMain.MDIChildren[i].Handle,SW_SHOWNORMAL);
        end;
    end;
      

  2.   

    原来的
    else              // 如果子窗体未打开,则创建它
          begin
          F_flight:=TF_flight.Create(Self);
          F_flight.Show;
          end;
    部分呢,这可是关键的东西啊
      

  3.   

    procedure TfrmMain.ShowMDIForm(FormClass: TFormClass; var frm;AOwner: TComponent);
    var i: integer; frmChild: TForm;
    begin
      for i := 0 to Screen.FormCount - 1 do
      if Screen.Forms[i].ClassType = FormClass then
      begin
        frmChild := Screen.Forms[i];
        TForm(fm) := frmChild;
        frmChild.Show;
        Exit;
      end;
      frmChild := TForm(FormClass.NewInstance);
      TForm(fm) := frmChild;
      frmChild.Create(Owner);
      frmChild.Show; 
    end;