【问题标题】:Show notification numbers on tab items在选项卡项目上显示通知编号
【发布时间】:2014-12-20 06:09:43
【问题描述】:

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

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

类似这样的:

如何在 iOS 和 Android 的选项卡上显示这样的指示器?

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

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

【问题讨论】:

    标签: delphi notifications icons firemonkey delphi-xe7


    【解决方案1】:

    我想出了如何在标签项上放置标签。这有点草率,但它确实有效。首先,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;
    

    在表单显示和表单调整大小时调用此函数,如下所示:

    PositionNotifyLabel(lblCartNotify, tabCart);
    

    【讨论】:

      猜你喜欢
      • 2022-01-10
      • 1970-01-01
      • 2019-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多