Почему tfVerticalCenter и tfBottom не работают должным образом в TCanvas.TextRect? - PullRequest
5 голосов
/ 06 сентября 2010

Рассмотрим следующий код:

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 Ответ

8 голосов
/ 06 сентября 2010

Я не совсем уверен, но VerticalCenter разрешен, только если установлена ​​однострочная.Это связано с тем, что Canvas использует собственные функции Windows.Если вы посмотрите на функцию Windows DrawText, вы увидите это ограничение.Если вам нужно центрироваться по вертикали, вы должны сделать свою математику

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...