delphi PageControl显示窗体

来源:互联网 发布:录屏软件破解版 编辑:程序博客网 时间:2024/05/16 05:05

delphi  使用PageControl嵌套显示窗体,需要必须实现两个部分:

1.创建标签页和创建窗体。

2.指定窗体关闭函数,该函数包含关闭当前标签页。

 

1.创建标签页和创建窗体。

 //如果不存在就创建标签页和窗体,如果存在,就找到。
//PFormClass:要创建的窗体的类,CName:窗体的Cption;EName :窗体的Name
procedure TMainForm.CreateTabSheet(PFormClass: TFormClass;CName,EName:string);
const
  MyTabSheetFirstName = 'MyTabSheet_';
var
  MyForm:TForm;
  MyTabSheet : TTabSheet;
  MyTabSheetName :string;
begin
  MyTabSheetName := MyTabSheetFirstName + EName;
  //查找该标签页是否已经存在
  MyTabSheet := TTabSheet(self.FindComponent(MyTabSheetName));
  //不存在,就创建出新的标签页
  if MyTabSheet = nil then
  begin
    try
       //创建新标签页
      MyTabSheet :=  TTabSheet.Create(self);
      MyTabSheet.Name := MyTabSheetName;
      MyTabSheet.PageControl := pgcMain;
      MyTabSheet.Caption := CName;
      MyTabSheet.Align := alClient;
      //创建窗口
      try
        MyForm := PFormClass.Create(self);
        myform.Name := EName;
        MyForm.Parent := MyTabSheet;
        MyForm.BorderStyle := bsNone;
        MyForm.Top := 0;
        MyForm.Left := 0;
        MyForm.Width := MyTabSheet.Width;
        MyForm.Height := MyTabSheet.Height;
        MyForm.Align := alClient;
        //关联窗体关闭时,执行的函数。
        MyForm.OnClose := CloseTabSheet;
        MyForm.Show;
      except
        FreeAndNil(MyForm);
        Abort;
      end;
    except
      FreeAndNil(MyTabSheet);
      Exit;
    end;
  end;
  //设置当前的标签页为活动页
  pgcMain.ActivePage := MyTabSheet;
end;

 

2.指定窗体关闭函数,该函数包含关闭当前标签页。

//关闭窗体时,也关闭其所处的标签页
procedure TMainForm.CloseTabSheet(Sender: TObject; var Action: TCloseAction);
begin
  if (sender as TForm).Parent <> nil then
  begin
    TTabSheet((sender as TForm).Parent).free;
    //把关闭的标签页的前一页设为活动页
    pgcMain.SelectNextPage(false);
    abort;
  end;
end;

 

 

3、右击可以选中当前页

procedure TMainForm.pgcMainMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  tabSheet :TsuiTabSheet;
begin
  if mbRight = Button then
  begin
    pgcMain.ActivePage := pgcMain.Pages[pgcMain.IndexOfTabAt(X, Y)];
  end;
end;

 

 

// 关闭当前页面
procedure TMainForm.mmiN23Click(Sender: TObject);
begin
  if pgcMain.ActivePageIndex <> 0 then
  begin
    pgcMain.ActivePage.Free;
    pgcMain.SelectNextPage(false);
  end;
end;

// 关闭所有页面
procedure TMainForm.mmiN24Click(Sender: TObject);
var
  i: integer;
begin
  for i := 1 to pgcMain.PageCount - 1 do
  begin
    pgcMain.Pages[1].Free;
  end;
end;

// 关闭其他页面
procedure TMainForm.mmiN25Click(Sender: TObject);
var
  i, ActiveIndex: integer;
begin
  // 当前页面是【首页】,则直接关闭其他页面
  if pgcMain.ActivePageIndex = 0 then
  begin
    for i := 1 to pgcMain.PageCount - 1 do
    begin
      pgcMain.Pages[1].Free;
    end;
  end
  else
  begin
    // 关闭当前页面前面的除【首页】的所有页面
    for i := 1 to pgcMain.ActivePageIndex - 1 do
    begin
      pgcMain.Pages[1].Free;
    end;

    // 关闭当前页面后面的所有页面
    for i := 2 to pgcMain.PageCount - 1 do
    begin
      pgcMain.Pages[2].Free;
    end;
    pgcMain.ActivePageIndex := 1;
  end;
end;

原创粉丝点击