Ученый-компьютерщики решили облегчить жизнь юзеров и создали ракету системы "Земля - Провайдер".
Используйте событие drawColumnCell. И не забудьте выставить defautlDrawing в
False
procedure TMain.ProjectGridDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
projectGrid.canvas.brush.color := clWindow;
projectGrid.canvas.fillRect(rect);
if gdSelected in state thenbegin
projectGrid.canvas.brush.color := clHighlight;
if fsBold in projectGrid.canvas.font.style thenbegin
projectGrid.canvas.font.color := clHighlightText;
projectGrid.canvas.font.style := [fsBold];
endelse
projectGrid.canvas.font.color := clHighlightText;
endelseif gdFocused in state thenbegin
projectGrid.canvas.brush.color := clWindow;
if fsBold in projectGrid.canvas.font.style thenbegin
projectGrid.canvas.font.color := clWindowText;
projectGrid.canvas.font.style := [fsBold];
endelse
projectGrid.canvas.font.color := clWindowText;
endelseif gdFixed in state thenbegin
projectGrid.canvas.brush.color := clHighlight;
if fsBold in projectGrid.canvas.font.style thenbegin
projectGrid.canvas.font.color := clHighlightText;
projectGrid.canvas.font.style := [fsBold];
endelse
projectGrid.canvas.font.color := clHighlightText;
end;
with globalDataModule.qProjects dobegin// тестовая запись. Устанавливаем свойства для перекрытия заданных по умолчанию;if fieldByName('EST_COMPL_DATE').asDateTime < date then
projectgrid.Canvas.font.color := clRed;
if compareStr(fieldByName('STAT_CODE').asString, 'HD') = 0 then
projectgrid.Canvas.font.color := clOlive;
if (compareStr(fieldByName('CHANGED').asString, 'Y') = 0) and
(fieldByName('ASSIGN_EMP_ID').asInteger = userRecord.UserId) then
projectgrid.Canvas.font.style := [fsBold];
end;
projectGrid.canvas.textOut(rect.left + 2, rect.top + 2, column.field.text);
end;
Код, предоставленный ниже, является процедурой для рисования ячейки в компоненте DBCtrlGrid, называемом projectGrid. Процедура предназначена для выделения определенных ячеек на основе конкретных условий.
Вот что код делает:
Он устанавливает цвет кисти канваса в clWindow (стандартный серый цвет) и заливает прямоугольник этим цветом.
Если ячейка выбрана (gdSelected в параметре State), он изменяет цвет кисти на clHighlight, ярко-синий цвет, и применяет жирный стиль шрифта, если текстовый шрифт имеет стиль fsBold.
Если ячейка фокусирована (gdFocused в параметре State), он устанавливает цвет кисти обратно в clWindow и применяет жирный стиль шрифта с белым текстовым цветом, если текстовый шрифт имеет стиль fsBold.
Если ячейка зафиксирована (gdFixed в параметре State), он изменяет цвет кисти на clHighlight, ярко-синий цвет, и применяет жирный стиль шрифта с желтым текстовым цветом, если текстовый шрифт имеет стиль fsBold.
Затем код проверяет конкретные условия для каждого записи в таблице:
Если поле EST_ COMPL_ DATE ранее даты текущего дня, он устанавливает цвет шрифта в красный.
Если поле STAT_ CODE равно 'HD', он устанавливает цвет шрифта в оливковый зеленый.
Если поле CHANGED равно 'Y' и поле ASSIGN_EMP_ID соответствует ID текущего пользователя, он применяет жирный стиль шрифта.
Наконец, код рисует текст в ячейке с помощью метода textOut канваса.
Обратите внимание, что этот код использует компоненты базы данных Delphi (TField, TDataSet, и т.д.) и предполагает конкретную структуру данных. Он также использует некоторые константы, такие как clWindow, clHighlight, clWindowText, fsBold и другие, которые являются частью библиотеки VCL Delphi.
В статье описывается способ окрашивания строк в DBCtrlGrid с помощью события drawColumnCell и изменения цвета текста в зависимости от условий.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.