Есть DBGridEh который через MemTableEh показывает данные. У грида в OptionsEh включено dghAutoFitRowHeight. Высота строки рассчитывается автоматически.
Вопрос: Как можно ограничить максимальную высоты строки ?
Индивидуальная высота каждой записи TDBGridEh может работать в режиме, когда он автоматически выставляет высоту каждой строки в зависимости от длины текста в ячейке или размера графического изображения, если включен режим DrawGraphicData. Чтобы включить режим автоматического подсчета высоты, установите значение dghAutoFitRowHeight в свойстве TDBGridEh.OptionsEh. Этот режим работает только, когда грид подключен к DataSet’у типа TMemTableEh. В режиме автоматического подсчета высоты, грид рассчитывает высоту строк динамически на основе строковых данных в столбцах, у которых TColumnEh.WordWrap = True и столбцах, привязанных к полям типа ftGraphic.
Не присваивайте никаких свойств внутри события OnDrawColumnCell. Это может привести к зацикливанию прорисовки.
Источник
Components for Delphi and C++ Builder.
Текущее время: 16 окт 2021, 17:26
Часовой пояс: UTC
Вопрос про DBGridEh.OptionsEh.dghAutoFitRowHeight ?
Есть DBGridEh который через MemTableEh показывает данные. У грида в OptionsEh включено dghAutoFitRowHeight. Высота строки рассчитывается автоматически.
Вопрос: Как можно ограничить максимальную высоты строки ?
Есть DBGridEh подключенный к MemTableEh. У грида в OptionsEh включена настройка dghAutoFitRowHeight. Все бы хорошо, но некоторые строки грида очень уж высокие получаются (много строк текста там отображается из поля).
Вопрос: Как можно ограничить максимальную высоту строки грида при использовании опции dghAutoFitRowHeight ?
Последний раз редактировалось Stalker4 24 апр 2019, 06:59, всего редактировалось 1 раз.
1) Тут ограничение высоты задается в пикселях, а не в строках. А соответственно при разных шрифтах и маштабировании в винде, могут отображаться не полные (урезанные) строки. 2) Если текста много и он был по высоте урезан, то пользователь про это не узнает пока не подведет курсор мыши к этому тексту или не откроет эту запись на просмотр. Соответственно было бы неплохо в последней строке ячейки задействовать механизм EndEllipsis.
1) Или доработать OnGetRowHeight (добавим ему параметр MaxLine) или новый обработчик OnGetRowHeightEx где будут оба параметра. 2) При показе данных колонки, если реальная высота текста больше отображаемой, то учитывать значение настройки TDBGridColumnEh.EndEllipsis при выводе последней видимой строки ячейки (то есть так, как это сейчас работает для очень широкой строки).
Обработчик события можно модифицировать следующим образом
Стандартная реализация 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);