为什么在TCanvas.TextRect中tfVerticalCenter和tfBottom不能按预期工作?

7
请看下面的代码:

考虑以下代码:

procedure TForm1.PaintBox1Paint(Sender: TObject);
var
  vRect : TRect;
  vFormat : TTextFormat;
  vStr : string;
begin
  vStr := 'This is some text';
  vRect := rect(10,10,50,130);
  vFormat := [tfCenter,tfVerticalCenter,tfWordBreak];
  PaintBox1.Canvas.Rectangle(vRect);
  PaintBox1.Canvas.TextRect(vRect,vStr,vFormat);
end;

我希望你能这样做:

我期待的是这样的结果

+--------+
|        |
|        |
|This is |
|  some  |
|  text  |
|        |
|        |
+--------+

但是我得到了这个。
+--------+
|This is |
|  some  |
|  text  |
|        |
|        |
|        |
|        |
+--------+

同样适用于tfBottom格式。水平文本格式(tfLeft,tfRight,tfCenter)按预期工作,但垂直格式不起作用。有人能解释一下吗?
1个回答

9

我不太确定,但是只有设置了 singleline 属性才允许使用 VerticalCenter。 这是因为 Canvas 依赖于本地窗口函数。如果你查看 Windows DrawText 函数,你会看到这个限制。 如果你需要垂直居中,你必须自己计算。


1
不是我希望得到的答案,但似乎是正确的。当我使用tfSingleLine时,确实将文本放置在垂直中心,但我失去了换行功能。那么我只能用更困难的方法来解决它 :-/ 但还是谢谢 :-) - Svein Bringsli

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