限 jpg, jpeg, png, gif 格式

程式設計 討論區
標題:用 Delphi 為 ItemTab 加上 Badge Number

Fuoco

2017-03-30 22:04:38

#Delphi #FireMonkey #ItemTab #BadgeNumber

新增一個 Tabbed Multi-Device Application

點一下想要秀出數字的 tab, 例如 TabItem3, 然後在它事件(Events)的 OnPaint 點兩下, 只要輸入一行:

DrawBadge(Canvas, ARect, FBadge.ToString);

然後將下列 procedure DrawBadge 加到程式中:

procedure DrawBadge(Canvas: TCanvas; const ARect: TRectF; const Text: string;

  const Color: TAlphaColor = TAlphaColorRec.Darkgreen);

const

  Padding = 2;

  HorzTextMargin = 6;

  VertTextMargin = 4;

var

  R: TRectF;

  TextSize: TSizeF;

  Brush: TBrush;

  BadgeRadius: Single;

begin

  Canvas.Font.Size := 12;

  // Measure text width

  TextSize := TSizeF.Create(Canvas.TextWidth(Text), Canvas.TextHeight(Text));

  // Calculate badge rect

  R := TRectF.Create(0, 0, HorzTextMargin * 2 + TextSize.Width, VertTextMargin * 2 + TextSize.Height);

  if R.Width < R.Height then

    R.Width := R.Height;

  // Position rect

  R := TRectF.Create(ARect.Right - R.Width, ARect.Top, ARect.Right, ARect.Top + R.Height);

  R.Offset(-Padding, Padding);

  // Draw badge

  BadgeRadius := R.Height / 2;

  Brush := TBrush.Create(TBrushKind.Solid, Color);

  try

    Canvas.FillRect(R, BadgeRadius, BadgeRadius, AllCorners, 1, Brush);

  finally

    Brush.Free;

  end;

  // Draw text

  Canvas.Fill.Color := TAlphaColorRec.White;

  Canvas.FillText(R, Text, False, 1, [], TTextAlign.Center, TTextAlign.Center);

end;

在 private 裡加入變數 FBadge, 也就是要顯示的數字:

private

  FBadge: Integer;

在 TTabbedForm.FormCreate 裡設給它一個數字:

FBadge := 18;

然後按 Run 就可以囉!

要改變數字時, 只要改 FBadge, 然後 Repaint 即可, 例如:

FBadge := ListView1.ItemCount;

TabItem3.Repaint;

看起來就像這樣:

官方原始資料: https://community.embarcadero.com/blogs?view=entry&id=9074


回 覆:

驗證碼:點擊可刷新 (點擊可刷新)

  • 本討論區文章是由網友自行張貼, 如涉法律糾紛, 與本站無關, 發言者自行負擔法律責任。
  • 如果發現文章內容侵害您的權益, 請立即回覆請管理人員移除。
  • 發文請符合分類主題, 勿發表不相關甚至違法的內容, 或是有廣告性質, 否則一律刪除。

討論區首頁  回蝶迷首頁  隱私權政策