Как уже упоминалось здесь вы можете получить его, вызвав DrawText функцию с указанным флагом DT_CALCRECT
, который на самом деле ничего не будет рисовать; он просто вычисляет соответствующий прямоугольник и возвращает его в переменную R
.
procedure TForm1.Button1Click(Sender: TObject);
var
R: TRect;
S: String;
begin
R := Rect(0, 0, 20, 20);
S := 'What might be the new high of this text ?';
DrawText(Canvas.Handle, PChar(S), Length(S), R, DT_WORDBREAK or DT_LEFT or DT_CALCRECT);
ShowMessage('New height might be '+IntToStr(R.Bottom - R.Top)+' px');
end;
Что означает, что если вы вызовете его дважды в следующем примере, вы получите нарисованный текст. Это потому, что первый вызов с DT_CALCRECT
вычисляет прямоугольник (и изменяет переменную R
, делая это), а второй вызов рисует текст в этой измененной области прямоугольника.
procedure TForm1.Button1Click(Sender: TObject);
var
R: TRect;
S: String;
begin
R := Rect(0, 0, 20, 20);
S := 'Some text which will be stoutly wrapped and painted :)';
DrawText(Canvas.Handle, PChar(S), Length(S), R, DT_WORDBREAK or DT_LEFT or DT_CALCRECT);
DrawText(Canvas.Handle, PChar(S), Length(S), R, DT_WORDBREAK or DT_LEFT);
end;