【问题标题】:How change just some characters from my label to bold?如何将标签中的一些字符更改为粗体?
【发布时间】:2016-11-29 18:26:40
【问题描述】:

我正在尝试制作一个矩形来显示一些信息。在这个 Rectangle 里面我有很多标签,在这个标签中我想用粗体显示一些文本。例如:'Name:'

如果这不可能,我怎么知道 label.text 的像素大小?如果我有这些信息,我可以创建两个标签并将第二个的位置设置为:label2.position.X := label1.textWidth;

谢谢!

【问题讨论】:

  • 最简单的解决方案是使用单独的标签。
  • 我是在运行时创建的,所以,如果我使用 2 个标签,我需要知道第一个标签的文本在哪里结束。我怎么知道这个?
  • label1.Canvas.TextWidth(label1.Caption)
  • 或者,默认情况下,标签已启用自动大小。
  • 你可以在分配Label1.Caption后设置Label2.Position.X := Label1.Position.X + Label1.Width。更好的选择是将两个标签放在TRelativePanel 上,然后您可以设置Label2.RightOf = Label1,使其保持在Label1 的右侧,无论Label1 的宽度有什么变化。见Using the Relative Panel

标签: delphi label firemonkey delphi-10.1-berlin


【解决方案1】:

使用标准标签控件,您唯一的选择是使用两个这样的控件,一个带有Font.Style,包括fsBold,另一个没有。

放置您的第一个粗体标签,然后只要您离开/设置AutoSize 属性trueWidth 属性就会告诉您宽度:

// Where:
//
//   - boldLabel is a created, initialised and positioned
//      label with bold text 
//
//   - normalLabel is a created and initialised label which 
//      has not yet been positioned (horizontally)
//
//   - spacingPixels is the distance you wish to maintain
//      between the two

normalLabel.Position.X := boldLabel.Position.X + boldLabel.Width + spacingPixels;

有许多 3rd 方标签控件,其中许多是免费的 + 开源的(对于 VCL [见下文]),它们支持标签中不同程度的标记。 FMX 可能有类似的实现。

对于 VCL 项目,您可能需要查看 the JediVCL library,其中包括一个标签,不仅支持粗体,还支持其他虽然有限的 HTML 标记。如果对此感兴趣,您在该库中查找的控件是 TJvHTLabel

注意。供将来参考: 您没有指定您的项目是 FMX 还是 VCL,但从使用 Position 属性可以看出它很可能是 FMX。对于涉及控制的问题,所使用的框架可能是一个重要因素,应予以提及以避免引出可能不相关的答案。

【讨论】:

    猜你喜欢
    • 2017-09-05
    • 1970-01-01
    • 2016-05-18
    • 2020-09-24
    • 2021-03-19
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    相关资源
    最近更新 更多