procedure TDirectoryClientsListContracts.grClientsCodeDBTableView1CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);//устанавливаем следуюший обработчик на CustomDrawCell компанента TcxGrid Var
lTextToDraw : string;
lColFont : TFont;
begin
lColFont := ACanvas.Font;//сохраняем настройки шрифта по умолчанию для текущей ячейки
lTextToDraw := trim(AViewInfo.GridRecord.DisplayTexts[5]);//считываем содержимое 5ого столбца, столбец должен быть добавлен в таблицу TcxGrid, но может быть не видимым
if lTextToDraw = 'True' then lColFont.Style := [fsItalic]; //проверяем значение считанной ячейки, и устанавливаем курсив
lTextToDraw := trim(AViewInfo.GridRecord.DisplayTexts[6]);
if lTextToDraw = 'False' then lColFont.Color := clRed; //проверяем значение считанной ячейки, и красим в красный цвет
ACanvas.Font := lColFont; //устанавливаем получившиеся выделение для всей строки
if ((AViewInfo.Item.Index = 4) and (trim(AViewInfo.GridRecord.DisplayTexts[4]) = '30.12.1899')) then //если мы просматриваем 4й столбец, сравниваем содержимое с нулевой датой
begin
ACanvas.Canvas.FillRect(AViewInfo.Bounds);//при желании можем изменить форматирование ячейки, как описано ранее, но оставляем общее для строки форматирование
ACanvas.DrawText('-', AViewInfo.Bounds, 0);//выводим вместо нулевой даты "-" (минус)
ADone := True;//разрешаем переписать значение ячейки
end;
end;
Аналогичным образом происходит работа со стандартным TStringGrid и TBDGrid.
Программный код на Delphi, который обрабатывает событие CustomDrawCell для компонента TcxGrid (контроль таблицы от разработчика DevExpress). Цель этого кода - настроить внешний вид ячеек в таблице.
Вот шаг за шагом, что код делает:
Он сохраняет стандартные настройки шрифта для ячейки с помощью ACanvas.Font.
Затем он извлекает текст из 5-й колонки таблицы используя AViewInfo.GridRecord.DisplayTexts[5]. 5-я колонка предполагается быть в таблице, но может не быть видимой.
Если извлеченный текст равен 'True', он устанавливает стиль шрифта ячейки в курсив с помощью lColFont.Style.
Затем он извлекает текст из 6-й колонки и проверяет, если он равен 'False'. Если так, он устанавливает цвет текста ячейки в красный с помощью lColFont.Color.
Затем он применяет измененные настройки шрифта к всей строке с помощью ACanvas.Font.
Наконец, он проверяет, если текущий элемент - это 4-я колонка (индекс 4) и текст в этой колонке равен '30.12.1899'. Если так, он заполняет прямоугольник ячейки цветом с помощью ACanvas.Canvas.FillRect, рисует знак минус (-) в верхнем левом углу прямоугольника с помощью ACanvas.DrawText и устанавливает флаг ADone в True.
Код похож на тот, который используется для компонентов TStringGrid и TBDGrid, как вы упоминали.
Вот некоторые предложения:
Вместо использования жестких индексов колонок (например, 4, 5, 6), рассмотрите использование свойства AViewInfo.Item.Index для получения текущего индекса элемента.
Вы можете использовать более надежный способ проверки текста на равенство 'True' или 'False', например, метод EqualText() предоставленный DevExpress.
Рассмотрите добавление обработки ошибок для случаев, когда извлеченный текст null или пустой.
В целом, этот код выполняет некоторые основные настройки ячеек в таблице на основе содержимого конкретных колонок. Если вам нужно болееadvanced настройки, рассмотрите другие события и свойства контроля TcxGrid.
Практическая реализация изменения форматирования ячеек в компоненте TcxGrid от Dev Express, демонстрируя настройку шрифта, курсива и цвета текста, а также изменение вывода для определенных ячеек.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.