哪些TTextFormat值(用于TextRect)及其含义?

3

我想在TextRect过程中应用一些文本格式,但我没有找到任何文档。在Delphi帮助中,TextRect参考中说,TextFormat变量只能有3个值:tfAutoText,tfText,tfPlainText。但是在StackOverflow上,我发现了一些其他文本格式值的TextRect示例,例如tfEndEllipsis。我在Delphi帮助中搜索了这个问题,并找到了其他设置,其中包含许多文本格式值。当我尝试它们时,第一个具有这三个值的集合根本不起作用,但第二个集合起作用。我很困惑。哪个集合是正确的?似乎第二个是正确的,因为它有效。但那么,第一个集合是用来做什么的?

以下值的含义是什么(来自第二组)?:

  • tfCalcRect
  • tfEditControl
  • tfExpandTabs
  • tfExternalLeading
  • tfModifyString
  • tfNoClip
  • tfNoPrefix
  • tfRtlReading
  • tfWordBreak

其他的很明显...


只是为了澄清答案,tfAutoText、tfText和tfPlainText这个集合不存在,即使存在也与真正的TTextFormat不兼容——它是完全不同的类型。在VCL源代码中没有任何出现——我搜索了整个代码库。我编辑了docwiki讨论页面以请求修复。基本上,忽略它,使用第二个选项。 - David
1个回答

5

文档有误。其中列出的三个枚举类型值(tfAutoTexttfTexttfPlainText)不存在。

您需要阅读 Vcl.Graphics 单元的源代码来搞清楚这个问题。源代码如下:

type
  TTextFormats = (tfBottom, tfCalcRect, tfCenter, tfEditControl, tfEndEllipsis,
    tfPathEllipsis, tfExpandTabs, tfExternalLeading, tfLeft, tfModifyString,
    tfNoClip, tfNoPrefix, tfRight, tfRtlReading, tfSingleLine, tfTop,
    tfVerticalCenter, tfWordBreak, tfHidePrefix, tfNoFullWidthCharBreak,
    tfPrefixOnly, tfTabStop, tfWordEllipsis, tfComposited);
  TTextFormat = set of TTextFormats;

这些值直接映射到Win32 API函数DrawTextEx使用的标志。 您可以通过阅读该功能的文档了解它们的含义。


2
tfComposited 标志是异常的,在使用 TCanvas.TextRect 方法时不能使用。它不对应于 DrawTextEx 函数的格式选项,但在内部映射到 DrawThemeTextEx 函数的 DTT_COMPOSITED 选项。 - TLama
这是否意味着 TTextFormat TF = TTextFormat() << TTextFormats(DT_HIDEPREFIX) 应该可以工作?还是我对“映射到”在这种情况下的解释过于简单了?顺便说一句,在我的旧C++ Builder 2009上似乎不起作用,其中 tfHidePrefix 似乎未知,并且我需要它在自定义绘制事件中。 - Peter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接