procedure TForm1.Button1Click(Sender: TObject);
var
  Form2: TForm;
begin
  if (Form2的己打開的個数) < 4 then  //Form2的己打開的個数如何取得??
  begin
   Form2 := TForm.Create(self);
   Form2.Show;
  end;
  else
    showMessage('不可再開!'); 
end;

解决方案 »

  1.   

    FindComponent...或者每次建立的时候,全局变量nFormCount+1;
    if nFormCount>4 then
      exit;你写写看
      

  2.   

    呵呵 这个是需要自己定义数据结构进行保存比较好毕竟FindComponent 相对效率低一点
      

  3.   

    hehe, 都満聡明的!可我的子Form有好几個、要一個一個記録?
    看看還有没有更好的方法?
      

  4.   

    API中应该有相应的函数,我想,但我不知道.
      

  5.   

    下边这段代码或许对你有帮助:
    ...............................枚举所有的子FORM
    function EnumChildWindowsProc(H: HWnd; TF: TForm1): Boolean; stdcall;
    var
      Buffer: array[0..255] of Char;
    begin
      Result := True; //設定為True才會再找下一個
      //開始作某事  
      GetWindowText(H, Buffer, 255);
      TF.LB.Items.Add(StrPas(Buffer));
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      //第一個參數是Parant的視窗的Handle, 
      //第二個是CallBack函式的位址
      //第三個是隨便,自行定義,這裡是傳入Tform1
      EnumChildWindows(Handle, @EnumChildWindowsProc, Longint(Self));
    end;
      

  6.   

    如果是mdichild from 比较好算一点