Мне нужно нарисовать текст в ячейке таблицы с фиксированной шириной (в пикселях) и фиксированным количеством текстовых строк. Если текст обрезается прямоугольником ячейки, он должен заканчиваться многоточием. Проблема в том, что я не могу правильно рассчитать текстовый прямоугольник (или процедура TextRect/DrawText работает неправильно, я не уверен).
Я попытался использовать этот метод вычисления текстового прямоугольника:
var
TextRect: TRect;
tm: TEXTMETRIC;
...
GetTextMetrics(Canvas.Handle, tm);
TextLineHeight := tm.tmHeight + tm.tmExternalLeading;
TextRect.Bottom := TextRect.Top + TextLineHeight * NumberOfLines;
Canvas.TextRect(TextRect, 'some long long long text',
[tfTop, tfLeft, tfEndEllipsis, tfWordBreak]);
Прямоугольник отсечения рассчитан правильно, но многоточие не появляется.
Многоточие появляется, когда я уменьшаю высоту прямоугольника отсечения на 1 пиксель:
TextRect.Bottom := TextRect.Top + TextLineHeight * NumberOfLines - 1;
Но тогда некоторые пиксели нижней строки моего текста обрезаются.
Как это сделать правильно?
TargetCanvas
, так иCanvas
. Это намеренно? - person Uli Gerhardt   schedule 04.04.2011tfModifyString
, затем увеличив «TextRect.Bottom» и отрисовав измененный (с многоточием в конце) текст как есть. - person Sertac Akyuz   schedule 04.04.2011