Исправление проблемы отображения цвета фона строк в TStringGrid в Delphi 10.1
Вопрос пользователя связан с использованием компонента TStringGrid в среде разработки Delphi 10.1. При разработке мультиплатформенного приложения на Windows пользователь столкнулся с проблемой, когда при изменении цвета фона строк в TStringGrid, между ячейками появляется серое/серебристое "прокладка". В предыдущих версиях Delphi, таких проблем не возникало.
Описание проблемы
Пользователь определил свойство DefaultDrawing компонента TStringGrid в значении False в событии OnFormCreate. В коде обработчика события OnDrawColumnCell создается объект TBrush для закрашивания фона строк в зависимости от условия. Однако, между ячейками присутствует нежелательное пространство.
Для решения проблемы можно использовать два подхода.
Решение 1 (на этапе дизайна):
Для каждого объекта StringColumn, расположенного в TStringGrid, необходимо изменить свойство Padding на значение 0.
Решение 2 (на этапе выполнения):
Можно модифицировать обработчик OnDrawColumnCell, добавив локальную переменную TRectF и изменив её размеры с помощью метода Inflate. Вот пример измененного кода:
procedure TForm30.StringGrid1DrawColumnCell(Sender: TObject;
const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
const Row: Integer; const Value: TValue; const State: TGridDrawStates);
var
aRowColor: TBrush;
aNewRectF: TRectF;
begin
aRowColor := TBrush.Create(TBrushKind.Solid, TAlphaColors.Alpha);
if (StringGrid1.Cells[7, Row] = '1') then
aRowColor.Color := TAlphaColors.Green
else
aRowColor.Color := TAlphaColors.Red;
aNewRectF := Bounds;
aNewRectF.Inflate(-3, -3); // Исправление на отрицательные значения для устранения прокладки
Canvas.FillRect(aNewRectF, 0, 0, [], 1, aRowColor);
Column.DefaultDrawCell(Canvas, Bounds, Row, Value, State);
aRowColor.Free;
end;
Также, для удаления линий между ячейками, необходимо снять отметки с свойств ColLines и RowLines в опциях TStringGrid.
Комментарии и дополнительные замечания
В процессе решения проблемы пользователь столкнулся с ошибкой компиляции E2033 Types of actual and formal var parameters must be identical при вызове метода InflateRect. Это было вызвано неправильной декларацией переменной aNewRectF как TRect вместо TRectF. Использование метода Inflate напрямую на объекте aNewRectF также решит проблему.
Заключение
Приведенные решения позволят устранить проблему отображения цвета фона строк в TStringGrid в Delphi 10.1. Важно внимательно следить за типами переменных и правильно использовать методы для работы с TRectF.
Проблема отображения цвета фона строк в TStringGrid в Delphi 10.1 при разработке мультиплатформенного приложения на Windows.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.