Добрый день.
Код:
1) Тут ограничение высоты задается в пикселях, а не в строках. А соответственно при разных шрифтах и маштабировании в винде, могут отображаться не полные (урезанные) строки.
Обработчик события можно модифицировать следующим образом
Код:
procedure TForm1.DBGridEh1GetRowHeight(Sender: TObject; var RowHeight: Integer);
var
FontHeight: Integer;
begin
FontHeight := GetFontTextHeight(nil, DBGridEh1.Columns[5].Font);
if (RowHeight > FontHeight * 10 + 4) then
RowHeight := FontHeight * 10 + 4;
end;
Цитата:
2) Если текста много и он был по высоте урезан, то пользователь про это не узнает пока не подведет курсор мыши к этому тексту или не откроет эту запись на просмотр.
Стандартная реализация TDBGridColumnEh.EndEllipsis использует Win32 функцию для отрисовки текст с многоточием. Она работает быстро, но не всегда корректно.
Одно из решений, рисовать многоточие самому в событии OnAdvDrawDataCell
Код:
procedure TForm1.DBGridEh1Columns5AdvDrawDataCell(Sender: TCustomDBGridEh; Cell,
AreaCell: TGridCoord; Column: TColumnEh; const ARect: TRect;
var Params: TColCellParamsEh; var Processed: Boolean);
var
TextHeight: Integer;
s: String;
r: TRect;
begin
DBGridEh1.DefaultDrawColumnDataCell(Cell, AreaCell, Column, ARect, Params);
Processed := True;
s := Params.Text;
r := ARect;
DBGridEh1.Canvas.TextRect(r, s, [tfCalcRect, tfWordBreak]);
TextHeight := RectHeight(r);
if (TextHeight > RectHeight(ARect)) then
begin
WriteTextEh(DBGridEh1.Canvas, ARect, False, 2, 2, '...', taRightJustify,
tlBottom, False, False, 0, 0, False, False);
end;
end;