在选项卡项上显示通知编号

时间:2014-12-20 06:09:44

标签: delphi notifications icons firemonkey delphi-xe7

我有一个面向选项卡的Firemonkey多平台应用程序。我有一些可能有个别通知的标签。我知道移动应用的通知中心,但在我自己的应用内部,我不知道如何在标签项上做类似的指示。

例如,我有一个带有4个标签的TTabControl。每个标签都有一个自定义图标。在图标旁边的每个选项卡上,我想显示一个通知指示器,类似于使用通知时应用程序图标上显示的指示。

这样的事情:

notification number on tab item

如何在iOS和Android的标签页上显示这样的指标?

我已经尝试在其上添加标签,但是在为不同平台重新调整/重新调整/重新排列表单时,无法知道如何以编程方式定位该标签。如果TTabItemPositionSize属性,我可以一起定位这样的标签。但如果没有它,我如何定位与此标签相关的任何内容?

PS - 请原谅我可怕的图形: - )

1 个答案:

答案 0 :(得分:0)

我想出了如何在标签项上定位标签。它有点草率,但它的确有效。首先,TTabControl.TabPosition不得为PlatformDefault。它必须是TopBottom。其次,标签必须与TTabControl位于同一父控件中。然后,实现如下函数:

procedure TfrmMain.PositionNotifyLabel(ALabel: TLabel; ATabItem: TTabItem);
var
  TabLeft, TabTop: Single;
  X: Integer;
  T: TTabItem;
  TabControl: TTabControl;
begin
  TabControl:= ATabItem.TabControl;
  //Calculate left position of tab
  TabLeft:= 0;
  for X := 0 to TabControl.TabCount-1 do begin
    T:= TabControl.Tabs[X];
    if T = ATabItem then Break;
    TabLeft:= TabLeft + T.Width;
  end;
  case TabControl.TabPosition of
    TTabPosition.Top: begin
      TabTop:= 0;
    end;
    TTabPosition.Bottom: begin
      TabTop:= TabControl.Height - TabControl.TabHeight;
    end;
    else begin
      //Not Supported
      TabTop:= 0;
    end;
  end;
  //Calculate label width based on tab width
  ALabel.Width:= ATabItem.Width / 3;
  //Position label to calculated Left/Top positions
  ALabel.Position.X:= TabLeft + ATabItem.Width - ALabel.Width;
  ALabel.Position.Y:= TabTop;
  ALabel.BringToFront;
end;

在表单show和表单调整上调用此函数,如下所示:

PositionNotifyLabel(lblCartNotify, tabCart);

iOS Sample

Android Sammple

Windows Sample