Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Исправление проблемы отображения цвета фона строк в `TStringGrid` в Delphi 10.1

Delphi , Графика и Игры , Цвета и Палитра

Исправление проблемы отображения цвета фона строк в TStringGrid в Delphi 10.1

Вопрос пользователя связан с использованием компонента TStringGrid в среде разработки Delphi 10.1. При разработке мультиплатформенного приложения на Windows пользователь столкнулся с проблемой, когда при изменении цвета фона строк в TStringGrid, между ячейками появляется серое/серебристое "прокладка". В предыдущих версиях Delphi, таких проблем не возникало.

Описание проблемы

Пользователь определил свойство DefaultDrawing компонента TStringGrid в значении False в событии OnFormCreate. В коде обработчика события OnDrawColumnCell создается объект TBrush для закрашивания фона строк в зависимости от условия. Однако, между ячейками присутствует нежелательное пространство.

Пример кода

procedure Tlist_form.StringGrid1DrawColumnCell(Sender: TObject;
  const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
  const Row: Integer; const Value: TValue; const State: TGridDrawStates);
var
  aRowColor: TBrush;
begin
  aRowColor := TBrush.Create(TBrushKind.Solid, TAlphaColors.Alpha);
  if (StringGrid1.Cells[7, Row] = '1') then
    aRowColor.Color := TAlphaColors.Green
  else
    aRowColor.Color := TAlphaColors.Red;
  Canvas.FillRect(Bounds, 0, 0, [], 1, aRowColor);
  Column.DefaultDrawCell(Canvas, Bounds, Row, Value, State);
  aRowColor.Free;
end;

Подтвержденное решение

Для решения проблемы можно использовать два подхода.

Решение 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




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Цвета и Палитра ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-03-14 11:43:17/0.0034568309783936/0