在MainForm上放了一个RzPageControl1点击菜单动态创建RzPageControl1页,
同时动态创建相应窗体并显示在新建的RzPageControl1页上,点击菜单时首先判断相应窗体是否已显示在RzPageControl1页上,
如果是则激活该页,否则创建新页并将新创建的窗体显示在该页上。描述的不太清楚,希望大家能理解!

解决方案 »

  1.   

    procedure TForm1.Item11Click(Sender: TObject);
    var
      FMenu: TMenuItem;
      FTab: TTabSheet;
    begin
      FMenu := TMenuItem(Sender);
      if FMenu.Tag = 0 then
      begin
        FTab := TTabSheet.Create(Self);
        FTab.PageControl := PageControl1;
        FTab.parent := PageControl1;
        FTab.Caption := FMenu.Caption;
        FMenu.Tag := FTab.Handle;
      end
      else FTab := TTabSheet(FindControl(FMenu.Tag));  PageControl1.ActivePage := FTab;
    end;
      

  2.   

    谢谢 budded:创建窗体的部分呢?
      

  3.   

    东拼西凑 总算实现了,
    无奈太菜,烦请那位仁兄帮我修理下。procedure TMainForm.OpenFormPage(FormTag: Integer; TabCaption: string; Formclass: TFormClass; var Myform; AOwner: Tcomponent);
    var
      i: Integer;
      Found: Boolean;
      ATab: TRzTabSheet;
      AForm: TForm;
    begin
      Found := False;
      for i := 0 to RzPageControl1.PageCount - 1 do
        if RzPageControl1.Pages[i].Tag = FormTag then
        begin
          RzPageControl1.ActivePageIndex := i;
          Found := True;
        end;  if not Found then
      begin
        ATab := TRzTabSheet.Create(RzPageControl1);
        ATab.Tag := FormTag;
        ATab.PageControl := RzPageControl1;    AForm := TForm(Formclass.Newinstance);
        TForm(Myform) := AForm;
        AForm.Create(AOwner);    ATab.Caption := TabCaption;
        AForm.Parent := ATab;
        AForm.Align := alclient;
        AForm.BorderStyle := bsNone;
        AForm.Visible := True;
        RzPageControl1.ActivePage := ATab;
      end;
    end;
      

  4.   

    只改了一判断那一部分
    procedure TForm1.OpenFormPage(TabCaption: string;
      Formclass: TFormClass; var Myform; AOwner: Tcomponent);
    var
      i:Integer;
      Found:Boolean;
      ATab:TRzTabSheet;
      AForm:TForm;
    begin
      Found:=False;
      for i:=0 to RzPageControl1.PageCount-1 do
      begin
        if RzPageControl1.Pages[i].Controls[0].ClassName=Formclass.ClassName then
        begin
          RzPageControl1.ActivePageIndex:=i;
          Found:=True;
        end;
      end;
      if not Found then
      begin
        ATab:=TRzTabSheet.Create(RzPageControl1);
        ATab.Tag:=FormTag;
        ATab.PageControl:=RzPageControl1;    AForm:=TForm(Formclass.Newinstance);
        TForm(Myform):=AForm;
        AForm.Create(AOwner);    ATab.Caption:=TabCaption;
        AForm.Parent:=ATab;
        AForm.Align:=alclient;
        AForm.BorderStyle:=bsNone;
        AForm.Visible:=True;
        RzPageControl1.ActivePage:=ATab;
      end;
    end;
      

  5.   

    想不明白楼主为什么要用Newinstanceprocedure TForm1.OpenFormPage(TabCaption: string; Formclass: TFormClass;
      var Myform; AOwner: Tcomponent);
    var
        i:Integer;
        Found:Boolean;
        ATab:TRzTabSheet;
    begin
      Found:=False;
      for i:=0 to RzPageControl1.PageCount-1 do
      begin
        if RzPageControl1.Pages[i].Controls[0].ClassName=Formclass.ClassName then
        begin
          RzPageControl1.ActivePageIndex:=i;
          Found:=True;
        end;
      end;
      if not Found then
      begin
        ATab:=TRzTabSheet.Create(RzPageControl1);
        ATab.PageControl:=RzPageControl1;
        TForm(myform):=Formclass.Create(AOwner);
        ATab.Caption:=TabCaption;
        TForm(myform).Parent:=ATab;
        TForm(myform).Align:=alclient;
        TForm(myform).BorderStyle:=bsNone;
        TForm(myform).Visible:=True;
        RzPageControl1.ActivePage:=ATab;
      end;
    end;
      

  6.   

    能不能显示MDI子窗口在RZpageControl的分页上