分享

Pagecontrol动态管理页面,包含关闭按钮

 独孤求财 2012-04-01



说明在二楼!
用法在三楼!
  1. type
  2.   TOnPageClose=procedure(PageIndex:Integer;var CanClose:Boolean);
  3.   TTabSheetEx=class(TTabSheet)
  4.     private
  5.       FInterfaceForm:TForm;
  6.     public
  7.       constructor Create(AOwner: TComponent;interfaceForm:TForm);reintroduce;
  8.       destructor  Destroy;override;
  9.       procedure ShowForm;
  10.   end;
  11.   TPageControlEx=class(TPageControl)
  12.     private
  13.       FOnPageClose:TOnPageClose;
  14.       FCloseButton:TSpeedButton;
  15.     protected
  16.       procedure FOnCloseButtonClick(Sender:TObject);
  17.       procedure ControlResize(Var msg:TMessage);message WM_SIZE;
  18.     public
  19.       constructor Create(AOwner:TComponent);reintroduce;
  20.       destructor  Destroy;override;
  21.       function  AddPage(PageCaption:stringageDisplayForm:TForm=nil):Integer;   {添加一个页面,返回ID值}
  22.       procedure ClosePage(Index:Integer);                                                                {关闭一个页面}
  23.       property OnPageClose:TOnPageClose read FOnPageClose write FOnPageClose;
  24.   end;
复制代码
实现部分:
  1. { TTabSheetEx }

  2. constructor TTabSheetEx.Create(AOwner: TComponent; interfaceForm: TForm);
  3. begin
  4.   inherited Create(AOwner);
  5.   FInterfaceForm:=interfaceForm;
  6.   if Assigned(FInterfaceForm) then
  7.   begin
  8.     FInterfaceForm.Parent:=Self;
  9.     FInterfaceForm.BorderStyle:=bsNone;
  10.     FInterfaceForm.Align:=alClient;
  11.   end;
  12. end;

  13. destructor TTabSheetEx.Destroy;
  14. begin
  15.   if Assigned(FInterfaceForm) then
  16.     FreeAndNil(FInterfaceForm);
  17.   inherited;
  18. end;

  19. procedure TTabSheetEx.ShowForm;
  20. begin
  21.    if Assigned(FInterfaceForm) then
  22.       FInterfaceForm.Show;
  23. end;

  24. { TPageControlEx }

  25. function TPageControlEx.AddPage(PageCaption: string;
  26.   PageDisplayForm: TForm): Integer;
  27. var
  28.   TabSheet:TTabSheet;
  29. begin
  30.   TabSheet:=TTabSheetEx.Create(Self,PageDisplayForm);
  31.   TabSheet.Parent:=Self;
  32.   TabSheet.Caption:=PageCaption;
  33.   TabSheet.PageControl:=Self;
  34.   TabSheet.Visible:=True;
  35.   Result:=TabSheet.PageIndex;
  36.   TabSheet.TabVisible:=True;
  37.   self.ActivePageIndex:=Result;
  38.   (TabSheet as TTabSheetEx).ShowForm;
  39. end;

  40. procedure TPageControlEx.ClosePage(Index: Integer);
  41. var
  42.   TabSheet:TTabSheet;
  43. begin
  44.   if (Index>-1) or (Index<self.PageCount) then
  45.   begin
  46.      TabSheet:=self.Pages[Index];
  47.      TabSheet.Free;
  48.   end
  49.   else
  50.     raise Exception.Create('Error PageIndex');
  51. end;

  52. procedure TPageControlEx.ControlResize(var msg: TMessage);
  53. var
  54.   CWith:Word;
  55. begin
  56.   inherited;
  57.   CWith:=msg.LParamLo;
  58.   FCloseButton.Left:=CWith-FCloseButton.Width-5;
  59.   FCloseButton.Top:=2;
  60. end;

  61. constructor TPageControlEx.Create(AOwner: TComponent);
  62. begin
  63.   inherited Create(AOwner);
  64.   FCloseButton:=TSpeedButton.Create(Self);
  65.   FCloseButton.Width:=16;
  66.   FCloseButton.Height:=16;
  67.   FCloseButton.Caption:='×';
  68.   FCloseButton.Flat:=True;
  69.   FCloseButton.Parent:=Self;
  70.   FCloseButton.OnClick:=FOnCloseButtonClick;
  71. end;

  72. destructor TPageControlEx.Destroy;
  73. begin
  74.   FCloseButton.Free;
  75.   inherited;
  76. end;

  77. procedure TPageControlEx.FOnCloseButtonClick(Sender: TObject);
  78. var
  79.   CanClose:Boolean;
  80. begin
  81.   CanClose:=true;
  82.   if Assigned(FOnPageClose) then
  83.     FOnPageClose(self.ActivePageIndex,CanClose);
  84.   if CanClose then
  85.     if self.PageCount>1 then   
  86.     ClosePage(self.ActivePageIndex);
  87. end;

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多