【问题标题】:How can I know if a TLabel word wrapped the text?我如何知道标签字是否包含文本?
【发布时间】:2019-08-07 00:45:32
【问题描述】:

我创建了一个TLabel 并动态地向其中添加文本,效果很好。但我需要知道标签是否将文本换行,因为它对于标签的宽度来说太大了,或者是否不需要换行,因为文本比标签的宽度短。

我不是想知道标签的WordWrap 属性是设置为true 还是false,我想知道它是否包裹了文本。

TLabelAutoSizeWordWrap 属性设置为 true,以防万一。

【问题讨论】:

  • 唯一的方法是手动计算文本宽度,就像 TLabel 一样 - 使用 Win32 DrawText() 函数(由 TCanvas.TextRect() 重载包装TTextFormat 作为输入)。
  • 除非该标签对齐,否则环绕将不起作用,因为它是 AutoSized 因此它总是会更改其大小以适应其中的文本
  • 感谢 Remy 指出该选项,我会调查一下,看看情况如何,然后告诉你。
  • 是的,你是对的 Nasreddine,我在那里犯了一个错误。我不再将标签设置为 autoWidth。
  • 下次当您想回复某人时,请使用“@”字符后跟他们的姓名,@Remy 和我都没有收到有关您的 cmets 的通知。周末愉快:)。

标签: delphi word-wrap tlabel


【解决方案1】:

您可以检查标签的高度以确定它是否是单衬纸。

if Label1.Height = Label1.Canvas.TextHeight('.') then
  // no word wrapped

That is because:

当 WordWrap 为 True 时,标签的宽度是固定的。如果 AutoSize 是 同样True,对文本的更改会导致标签的高度发生变化。

【讨论】:

  • 这听起来很有帮助,因为我已经下班回家了。我会在星期一尝试你的答案,我会告诉你进展如何。谢谢!
  • 好的。如果有人怀疑“。”的高度。 (或任何单个字符)可以针对任意字符串的高度进行测试,它可以。 GetTextExtentPoint32 不区分字符高度。
猜你喜欢
  • 1970-01-01
  • 2016-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多