Dbgrideh dghautofitrowheight не работает

Components for Delphi and C++ Builder.

Текущее время: 16 окт 2021, 17:26

Часовой пояс: UTC

Вопрос про DBGridEh.OptionsEh.dghAutoFitRowHeight ?

Страница 1 из 1 [ Сообщений: 2 ]
Для печати Предыдущая тема | Следующая тема
Автор Сообщение
Stalker4

Зарегистрирован: 24 дек 2011, 14:04
Сообщений: 237
Откуда: Украина, г. Днепропетровск

Есть DBGridEh который через MemTableEh показывает данные.
У грида в OptionsEh включено dghAutoFitRowHeight.
Высота строки рассчитывается автоматически.

Вопрос: Как можно ограничить максимальную высоты строки ?

EhLibSupport

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1294

Используйте событие TDBGridEh.OnGetRowHeight

Страница 1 из 1 [ Сообщений: 2 ]

Часовой пояс: UTC

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Источник

Components for Delphi and C++ Builder.

Текущее время: 16 окт 2021, 17:26

Часовой пояс: UTC

Dbgrid автоматическая подгонка высоты строки по размер текст

Страница 1 из 1 [ Сообщений: 4 ]
Для печати Предыдущая тема | Следующая тема
Автор Сообщение
rusqwe

Зарегистрирован: 04 окт 2016, 11:08
Сообщений: 1

procedure Tdela.dbgehDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
var
ARect : TRect;
AText : string;
RowNumber, NewHeight : integer;
wTxt : integer;
wRect: integer;
nLine: integer;
begin
AText :=Column.Field.AsString;
wTxt :=dbgeh.Canvas.TextWidth(AText);
wRect:=(Rect.Right-Rect.Left)-2;
nLine:=Trunc(wTxt/wRect)+1;
if nLine > 1 then
begin
RowNumber:=dbgeh.DataSource.DataSet.RecNo;
NewHeight:= nLine*TCrackCustomGridEh(Sender).DefaultRowHeight + 7;
if NewHeight > TCrackCustomGridEh(Sender).RowHeights[RowNumber] then
begin
NewHeight:=trunc(NewHeight);
TCrackCustomGridEh(Sender).RowHeights[RowNumber] := NewHeight;
end;

ARect:=Rect;
ARect.Bottom:=ARect.Top+TCrackCustomGridEh(Sender).RowHeights[RowNumber];
WriteTexteh (dbgeh.Canvas,
ARect ,
true ,
0, 0,
AText,
taLeftJustify,
tlTop ,
True ,
false ,
0,
0,
false,
true);

Подгоняет высоту строки нормально, но нельзя прокрутить вниз, если все записи не умещаются.Из этого есть выход?

Вроде как можно сделать средствами грида автоподгон высоты, но настроить не выходит.
Пожалуйста подскажите что делать.

Administrator
Администратор

Зарегистрирован: 19 дек 2011, 17:40
Сообщений: 837

Индивидуальная высота каждой записи
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 ?

Страница 1 из 1 [ Сообщений: 2 ]
Для печати Предыдущая тема | Следующая тема
Автор Сообщение
Stalker4

Зарегистрирован: 24 дек 2011, 14:04
Сообщений: 237
Откуда: Украина, г. Днепропетровск

Есть DBGridEh который через MemTableEh показывает данные.
У грида в OptionsEh включено dghAutoFitRowHeight.
Высота строки рассчитывается автоматически.

Вопрос: Как можно ограничить максимальную высоты строки ?

EhLibSupport

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1294

Используйте событие TDBGridEh.OnGetRowHeight

Страница 1 из 1 [ Сообщений: 2 ]

Часовой пояс: UTC

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Источник

Components for Delphi and C++ Builder.

Текущее время: 16 окт 2021, 17:26

Часовой пояс: UTC

Максимальная высота строки с dghAutoFitRowHeight ? (*)

Страница 1 из 1 [ Сообщений: 8 ]
Для печати Предыдущая тема | Следующая тема
Автор Сообщение
Stalker4

Зарегистрирован: 24 дек 2011, 14:04
Сообщений: 237
Откуда: Украина, г. Днепропетровск

Delphi 10.2.3, EhLib 9.1.043.

Есть DBGridEh подключенный к MemTableEh. У грида в OptionsEh включена настройка dghAutoFitRowHeight.
Все бы хорошо, но некоторые строки грида очень уж высокие получаются (много строк текста там отображается из поля).

Вопрос: Как можно ограничить максимальную высоту строки грида при использовании опции dghAutoFitRowHeight ?

Последний раз редактировалось Stalker4 24 апр 2019, 06:59, всего редактировалось 1 раз.

EhLibSupport

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1294

Используйте событие TDBGridEh.OnGetRowHeight

Stalker4

Зарегистрирован: 24 дек 2011, 14:04
Сообщений: 237
Откуда: Украина, г. Днепропетровск

В принципе помогло, спасибо.

Но тут есть два момента:

1) Тут ограничение высоты задается в пикселях, а не в строках. А соответственно при разных шрифтах и маштабировании в винде, могут отображаться не полные (урезанные) строки.
2) Если текста много и он был по высоте урезан, то пользователь про это не узнает пока не подведет курсор мыши к этому тексту или не откроет эту запись на просмотр. Соответственно было бы неплохо в последней строке ячейки задействовать механизм EndEllipsis.

1) Или доработать OnGetRowHeight (добавим ему параметр MaxLine) или новый обработчик OnGetRowHeightEx где будут оба параметра.
2) При показе данных колонки, если реальная высота текста больше отображаемой, то учитывать значение настройки TDBGridColumnEh.EndEllipsis
при выводе последней видимой строки ячейки (то есть так, как это сейчас работает для очень широкой строки).

EhLibSupport

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1294

Обработчик события можно модифицировать следующим образом

Стандартная реализация 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;

Stalker4

Зарегистрирован: 24 дек 2011, 14:04
Сообщений: 237
Откуда: Украина, г. Днепропетровск

aush

Зарегистрирован: 14 окт 2014, 11:19
Сообщений: 56

EhLibSupport

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1294

Можно использовать стандарную Canvas.TextHeight.

Stalker4

Зарегистрирован: 24 дек 2011, 14:04
Сообщений: 237
Откуда: Украина, г. Днепропетровск

В EhLib 9.1.x функции GetFontTextHeight в модуле EhLibVCL.pas.

Можно использовать стандарную Canvas.TextHeight.

Так работает, только строка «DBGridEh1.Canvas.Font := DBGridEh1.Columns[5].Font» тут ИМНО лишняя.

Страница 1 из 1 [ Сообщений: 8 ]

Часовой пояс: UTC

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Источник

Читайте также:  Как настроить стрим через твич студио
Оцените статью