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

时间:2010-09-06 18:37:18

标签: delphi graphics canvas

请考虑以下代码:

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 个答案:

答案 0 :(得分:8)

我不太确定,但只有在设置了单行时才允许使用VerticalCenter。 这是因为Canvas依赖于本机Windows功能。如果您使用Windows DrawText功能,您将看到此限制。 如果你需要垂直中心,你必须做自己的数学