打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Delphi XE7实现TTabControl在TabItem添加关闭按钮






介绍

本文章介绍了Delphi XE7实现TTabControl在TabItem添加关闭按钮,该程序使用到了uFMXTabItemWithCloseBtn,在这个单元中实现了点击按钮关闭tabitem的功能,具体代码如下:
  1. unit uFMXTabItemWithCloseBtn;

  2. interface

  3. uses
  4.   FMX.TabControl;

  5. type
  6.   TTabControlHelper = class helper for TTabControl
  7.   private
  8.     procedure CloseButtonClick(Sender: TObject);
  9.     procedure TimerOnTimer(Sender: TObject);
  10.   public
  11.     procedure CheckCloseBtn(const iBtnResourceName: String = 'closebutton');
  12.   end;

  13. implementation

  14. uses
  15.   System.UITypes
  16.   , System.Classes
  17.   , FMX.Types
  18.   , FMX.StdCtrls
  19.   ;

  20. { TTabControlHelper }

  21. var
  22.   GRemoveTimer: TTimer;
  23.   GIndex: Integer;
  24.   GRemoveTab: TTabItem;
  25.   GTabControlHelperChecked: Boolean = False;

  26. procedure TTabControlHelper.CheckCloseBtn;
  27. var
  28.   B: TFmxObject;
  29.   TabItem: TTabItem;
  30.   i: Integer;
  31. begin
  32.   if (GTabControlHelperChecked) then
  33.     Exit;

  34.   for i := 0 to TabCount - 1 do begin
  35.     TabItem := Tabs[i];

  36.     B := TabItem.FindStyleResource(iBtnResourceName);

  37.     if (B <> nil) and (B is TCustomButton) then begin
  38.       B.TagObject := TabItem;

  39.       TabItem.AutoSize := False;
  40.       TabItem.Width := TabItem.Width + TCustomButton(B).Width * 1.5;

  41.       TCustomButton(B).OnClick := CloseButtonClick;

  42.       GTabControlHelperChecked := True;
  43.     end;
  44.   end;
  45. end;

  46. procedure TTabControlHelper.CloseButtonClick(Sender: TObject);
  47. var
  48.   TabItem: TTabItem;
  49.   i: Integer;
  50.   Len: Integer;
  51. begin
  52.   if (Sender is TCustomButton) then begin
  53.     GRemoveTab := TTabItem(TCustomButton(Sender).TagObject);

  54.     GIndex := -1;
  55.     Len := TabCount - 1;

  56.     for i := 0 to Len do begin
  57.       TabItem := Tabs[i];

  58.       if (TabItem = GRemoveTab) then begin
  59.         if (i = Len) then begin
  60.           if (Len > 0) then
  61.             GIndex := i - 1;

  62.           Break;
  63.         end
  64.         else begin
  65.           GIndex := i;
  66.           Break;
  67.         end;
  68.       end;
  69.     end;

  70.     GRemoveTab.Release;

  71.     TabIndex := -1;

  72.     if (GIndex <> -1) then begin
  73.       GRemoveTimer := TTimer.Create(nil);
  74.       GRemoveTimer.OnTimer := TimerOnTimer;
  75.       GRemoveTimer.Interval := 20;
  76.       GRemoveTimer.Enabled := True;
  77.     end;
  78.   end;
  79. end;

  80. procedure TTabControlHelper.TimerOnTimer(Sender: TObject);
  81. var
  82.   Ist: Boolean;
  83.   i: Integer;
  84. begin
  85.   Ist := False;

  86.   for i := 0 to TabCount - 1 do
  87.     if (Tabs[i] = GRemoveTab) then begin
  88.       Ist := True;
  89.       Break;
  90.     end;

  91.   if (Ist) then
  92.     Exit;

  93.   GRemoveTimer.DisposeOf;
  94.   GRemoveTImer := nil;
  95.   GRemoveTab := nil;

  96.   TabIndex := GIndex;
  97. end;

  98. end.
复制代码

然后在主程序上进行调用
  1. unit Unit1;

  2. interface

  3. uses
  4.   System.SysUtils
  5.   , System.Types
  6.   , System.Classes
  7.   , System.Generics.Collections
  8.   , FMX.Types
  9.   , FMX.Controls
  10.   , FMX.Graphics
  11.   , FMX.Forms
  12.   , FMX.StdCtrls
  13.   , FMX.TabControl
  14.   ;

  15. type
  16.   TForm1 = class(TForm)
  17.     StyleBook1: TStyleBook;
  18.     TabControl1: TTabControl;
  19.     TabItem1: TTabItem;
  20.     TabItem2: TTabItem;
  21.     TabItem3: TTabItem;
  22.     procedure FormPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF);
  23.   private
  24.   public
  25.   end;

  26. var
  27.   Form1: TForm1;

  28. implementation

  29. uses
  30.   uFMXTabItemWithCloseBtn;

  31. {$R *.fmx}

  32. procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas;
  33.   const ARect: TRectF);
  34. begin
  35.   TabControl1.CheckCloseBtn;
  36. end;

  37. end.
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Delphi XE5 for Android (二)
Delphi XE5 android 捕获几个事件
delphi简单的聊天室(UDP广播)
Delphi XE6 通过JavaScript API调用百度地图
sample for VCL/FMX forms How run your threads in a secondary forms
喜欢Ctrl+D的朋友可以看看
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服