我想控制子窗体只显示一次,但是没有成功,请高手指点啊!
procedure Tsjhcgl.sjhcrkClick(Sender: TObject);
begin
  OpenMDIWin(Fm_sjhcrk);  //这是一个子窗体单击时的代码
end;OpenMDIWin是我在主窗体中自定义的过程,代码是这样的
Procedure Tsjhcgl.OpenMDIWin(Frm:TForm);
var
  i:integer;
  F:TForm;
begin
  for i:=0 to sjhcgl.MDIChildCount-1 do begin
      F:=sjhcgl.MDIChildren[i];
      if F.WindowState=wsMinimized then
        showwindow(F.Handle,sw_shownormal)
      else if F=nil then begin
         F:=F.Create(self);
         F.Show;
      end
      else
      showwindow(F.Handle,sw_show);
      F.BringToFront;
      F.SetFocus;
  end;
end;
我的目的是想判断有没有子窗体,有则激活;最小化的则最大化;没有则创建,但是没的反应啊!请高手指点啊,估计是过程写错了,但是也没报错。

解决方案 »

  1.   


    //子窗体关闭代码
    procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action := caFree;
      form2 := nil;
    end;
    //主窗体调用代码
    procedure TForm1.aa1Click(Sender: TObject);
    begin
      if form2 = nil then
        form2 := TForm2.Create(self);
      form2.Show;
      form2.WindowState := wsMaximized;
    end;
      

  2.   

    新建一unit,如命名为:TGlobal 
    //若窗体不存在,则新建窗体并显示,若窗体已存在,则只显示窗体
    class procedure TGlobal.ShowForm(vFormClass: TFormClass; var vForm);
    var
      aForm:TForm absolute vForm;
    begin
      if aForm=nil then
        aForm:=vFormClass.Create(Application);
      if aForm.WindowState=wsMinimized then
        aForm.WindowState:=wsNormal;
      aForm.Show;
      aForm.BringToFront;
    end;然后在主窗体MainForm中调用显示Form1:
      TGlobal.ShowForm(TForm1,Form1);