本文介绍了为什么tfVerticalCenter和tfBottom不能按预期在TCanvas.TextRect中工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请考虑以下代码:

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)按预期工作,但垂直格式不会。

The same is true for the tfBottom format. The horizontal text formats (tfLeft, tfRight, tfCenter) work as expected, but the vertical formats doesn't. Can anyone explain this?

推荐答案

我不太确定,但是只有在设置了singleline时才允许使用VerticalCenter。
这是因为Canvas依赖于原生的windows函数。如果你llok在Windows DrawText函数,你会看到这个限制。
如果你需要垂直中心,你必须自己做数学

I'm not pretty sure but VerticalCenter is only allowed if singleline is set.This is because Canvas relies on native windows functions. If you llok at Windows DrawText function you will see this restriction.If you need to vertical center you have to do your own maths

这篇关于为什么tfVerticalCenter和tfBottom不能按预期在TCanvas.TextRect中工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-30 09:44