"EhLib.Com"
https://forum.ehlib.com/ru/

Отрисовка ячейки DBGridEh в AdvDrawDataCell
https://forum.ehlib.com/ru/viewtopic.php?f=4&t=3274
Страница 1 из 1

Автор:  ADSoft [ 04 ноя 2022, 07:52 ]
Заголовок сообщения:  Отрисовка ячейки DBGridEh в AdvDrawDataCell

Добрый день.

Пытаюсь получить из DBGridEh что-то типа чата. Для этого хочу отрисовать RoundRect в качестве фона для текста в событии AdvDrawDataCell DBGridEh (или Column, неважно, результат тот же).
В результате,
При запуске приложения:
1. В первой ячейке первой колонки нижний правый угол не округляется
2. В первой ячейке первой колонки текст смещается вправо и вниз на какой-то непонятный отступ
3. Во всех остальных ячейках первой колонки текст не отображается
4. Во всех ячейках второй колонки текст также не отображается
Изображение
После прокрутки вниз и обратно вверх:
1. Текст в ячейках первой колонки отображается, но со смещением вправо
2. Во всех ячейках второй колонки текст не отображается
Изображение
После повторной прокрутки вниз:
1. Текст в ячейках первой колонки либо не отображается, либо отображается со смещением вправо и большим смещением вниз
2. Во всех ячейках второй колонки текст по-прежнему не отображается
Изображение

Пробовал и с группировкой и без - результат тот же.
Вот весь текст события AdvDrawDataCell
Код:
  if not Column.Field.IsNull then
  begin
    Sender.Canvas.Brush.Color := clWhite;
    Sender.Canvas.FillRect(ARect);
    if Column.Index = 0 then
      Sender.Canvas.Pen.Color := clSkyBlue
    else
      Sender.Canvas.Pen.Color := clWebTan;
    Sender.Canvas.Brush.Color := Sender.Canvas.Pen.Color;
    Sender.Canvas.RoundRect(ARect, 30, 30);
    Sender.DrawColumnDataCellMainContent(Cell, AreaCell, Column, ARect, Params, ARect);
    Processed := True;
  end;

Проект во вложении (к нему нужно приложить Biolife.mdb из папки Demos\Data).
Тестировался на версии 10.2.034 в RS 11.2 под Win 11.

Подскажите, пожалуйста, что или где я делаю не так, или это всё-таки баги?
И ещё, если не трудно, подскажите как можно убрать кнопку для сворачивания и разворачивания группы?
Заранее, спасибо!

Вложения:
Комментарий к файлу: Project4.zip
Project4.zip [2.22 KiB]
Скачиваний: 60

Автор:  ADSoft [ 09 ноя 2022, 15:25 ]
Заголовок сообщения:  Re: Отрисовка ячейки DBGridEh в AdvDrawDataCell

Не поленился, поставил 11.0.007 Beta, чтобы проверить.
Результат тот же, только теперь текст всегда отображается только в 1-й значащей ячейке 1-й колонки и со сдвигами:
Изображение
Всё остальное - так же :(

Да, и ещё, в Design Time сам DBGridEh стал совершенно однотонным, как будто его и нет на форме (но, он там есть! :shock: ) :
Изображение

Автор:  EhLibSupport [ 10 ноя 2022, 09:48 ]
Заголовок сообщения:  Re: Отрисовка ячейки DBGridEh в AdvDrawDataCell

Добрый день.

Метод DrawColumnDataCellMainContent последним параметром требует прямоугольник в координатах относительно верхнего левого угла ячейки.
Для отрисовки текста используйте функцию WriteTextEh например.

Код:
procedure TForm4.DBGridEh1AdvDrawDataCell(Sender: TCustomDBGridEh; Cell, AreaCell: TGridCoord; Column: TColumnEh;
  const ARect: TRect; var Params: TColCellParamsEh; var Processed: Boolean);
begin
  if not Column.Field.IsNull then
  begin
    Sender.Canvas.Brush.Color := clWhite;
    Sender.Canvas.FillRect(ARect);
    if Column.Index = 0 then
      Sender.Canvas.Pen.Color := clSkyBlue
    else
      Sender.Canvas.Pen.Color := clWebTan;
    Sender.Canvas.Brush.Color := Sender.Canvas.Pen.Color;
    Sender.Canvas.RoundRect(ARect, 30, 30);
    ARect.Inflate(-10, -10);
    WriteTextEh(Sender.Canvas, ARect, False, 0, 0, Params.Text, Params.Alignment,
      TTextLayout.tlTop, True, False, 0, 0, False, False);
//    Sender.DrawColumnDataCellMainContent(Cell, AreaCell, Column, ARect, Params, ARect);
//    Sender.DefaultDrawColumnDataCell(Cell, AreaCell, Column, ARect, Params);
    Processed := True;
  end;
end;

Автор:  ADSoft [ 10 ноя 2022, 15:08 ]
Заголовок сообщения:  Re: Отрисовка ячейки DBGridEh в AdvDrawDataCell

Ясно, спасибо!
А насчёт второго вопроса, по поводу скрытия кнопки сворачивания/разворачивания группы, есть какое-то решение?

Страница 1 из 1 Часовой пояс: UTC
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/