固定幅(ピクセル単位)と固定数のテキスト行を使用して、テーブルセルにテキストを描画する必要があります。テキストがセルの長方形でクリップされている場合は、省略記号で終了する必要があります。問題は、テキストの長方形を正しく計算できないことです(または、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;
しかし、私のテキストの一番下の行のいくつかのピクセルは、その後クリップされます。
それを正しく行う方法は?