"EhLib.Com" https://forum.ehlib.com/ru/ |
|
Максимальная высота строки с dghAutoFitRowHeight ? (*) https://forum.ehlib.com/ru/viewtopic.php?f=4&t=2743 |
Страница 1 из 1 |
Автор: | Stalker4 [ 22 фев 2019, 13:03 ] |
Заголовок сообщения: | Максимальная высота строки с dghAutoFitRowHeight ? (*) |
Hi All, Delphi 10.2.3, EhLib 9.1.043. Есть DBGridEh подключенный к MemTableEh. У грида в OptionsEh включена настройка dghAutoFitRowHeight. Все бы хорошо, но некоторые строки грида очень уж высокие получаются (много строк текста там отображается из поля). Вопрос: Как можно ограничить максимальную высоту строки грида при использовании опции dghAutoFitRowHeight ? |
Автор: | EhLibSupport [ 23 фев 2019, 12:57 ] |
Заголовок сообщения: | Re: Максимальная высота строки с dghAutoFitRowHeight ? |
Добрый день. Используйте событие TDBGridEh.OnGetRowHeight Код: procedure TForm1.DBGridEh1GetRowHeight(Sender: TObject; var RowHeight: Integer);
begin if (RowHeight > 100) then RowHeight := 100; end; |
Автор: | Stalker4 [ 25 фев 2019, 07:24 ] |
Заголовок сообщения: | Re: Максимальная высота строки с dghAutoFitRowHeight ? |
В принципе помогло, спасибо. Но тут есть два момента: 1) Тут ограничение высоты задается в пикселях, а не в строках. А соответственно при разных шрифтах и маштабировании в винде, могут отображаться не полные (урезанные) строки. 2) Если текста много и он был по высоте урезан, то пользователь про это не узнает пока не подведет курсор мыши к этому тексту или не откроет эту запись на просмотр. Соответственно было бы неплохо в последней строке ячейки задействовать механизм EndEllipsis. Возможные решения: 1) Или доработать OnGetRowHeight (добавим ему параметр MaxLine) или новый обработчик OnGetRowHeightEx где будут оба параметра. 2) При показе данных колонки, если реальная высота текста больше отображаемой, то учитывать значение настройки TDBGridColumnEh.EndEllipsis при выводе последней видимой строки ячейки (то есть так, как это сейчас работает для очень широкой строки). |
Автор: | EhLibSupport [ 01 апр 2019, 18:21 ] |
Заголовок сообщения: | Re: Максимальная высота строки с dghAutoFitRowHeight ? |
Добрый день. Код: 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; |
Автор: | Stalker4 [ 12 апр 2019, 11:42 ] |
Заголовок сообщения: | Re: Максимальная высота строки с dghAutoFitRowHeight ? |
EhLibSupport писал(а): Добрый день. Код: 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; А откуда взята функция GetFontTextHeight ? Что то я такой ни в самом EhLib 9.1.x ни в Delphi 10.2.3 не нашел. |
Автор: | aush [ 12 апр 2019, 11:48 ] |
Заголовок сообщения: | Re: Максимальная высота строки с dghAutoFitRowHeight ? |
Stalker4 писал(а): А откуда взята функция GetFontTextHeight ? Что то я такой ни в самом EhLib 9.1.x ни в Delphi 10.2.3 не нашел. Поиском находится в EhLibVCL.pas |
Автор: | EhLibSupport [ 17 апр 2019, 16:50 ] |
Заголовок сообщения: | Re: Максимальная высота строки с dghAutoFitRowHeight ? |
Цитата: А откуда взята функция GetFontTextHeight ? Что то я такой ни в самом EhLib 9.1.x ни в Delphi 10.2.3 не нашел. Можно использовать стандарную Canvas.TextHeight. Код: //FontHeight := GetFontTextHeight(nil, DBGridEh1.Columns[5].Font);
DBGridEh1.Canvas.Font := DBGridEh1.Columns[5].Font; FontHeight := DBGridEh1.Canvas.TextHeight('Wg'); |
Автор: | Stalker4 [ 24 апр 2019, 07:00 ] |
Заголовок сообщения: | Re: Максимальная высота строки с dghAutoFitRowHeight ? |
aush писал(а): Stalker4 писал(а): А откуда взята функция GetFontTextHeight ? Что то я такой ни в самом EhLib 9.1.x ни в Delphi 10.2.3 не нашел. Поиском находится в EhLibVCL.pas В EhLib 9.1.x функции GetFontTextHeight в модуле EhLibVCL.pas. EhLibSupport писал(а): Цитата: А откуда взята функция GetFontTextHeight ? Что то я такой ни в самом EhLib 9.1.x ни в Delphi 10.2.3 не нашел. Можно использовать стандарную Canvas.TextHeight. Код: //FontHeight := GetFontTextHeight(nil, DBGridEh1.Columns[5].Font); DBGridEh1.Canvas.Font := DBGridEh1.Columns[5].Font; FontHeight := DBGridEh1.Canvas.TextHeight('Wg'); Так работает, только строка "DBGridEh1.Canvas.Font := DBGridEh1.Columns[5].Font" тут ИМНО лишняя. Вопрос решен. |
Страница 1 из 1 | Часовой пояс: UTC |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |