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

Устранение проблемы с методом FillRect в Delphi XE2: закрашиваем ячейки TStringGrid без пробелов

Delphi , Компоненты и Классы , TStringGrid и TDrawGrid

При работе с компонентом TStringGrid в Delphi XE2 пользователи могут столкнуться с проблемой, когда метод FillRect не закрашивает ячейки полностью. В частности, наблюдается пробел в 3 пикселя с левой стороны ячейки. Это поведение отличается от работы в предыдущих версиях, например, в Delphi 6.

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

В процедуре обработчика события OnDrawCell компонента TStringGrid используется метод FillRect для закрашивания ячеек. Однако, в Delphi XE2 возникает проблема: ячейки не закрашиваются полностью из-за пробела в 3 пикселя с левой стороны. Это происходит даже при использовании различных стилей кистей и изменении свойств рисования.

procedure TShapeline.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  StringGrid1.Canvas.Brush.Color:=$00FF80FF;
  StringGrid1.Canvas.FillRect(Rect);
end;

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

Проблема связана с тем, что в Delphi XE2 при включенном DefaultDrawing и активированных темах в коде TStringGrid.DrawCell есть инструкция, которая сдвигает левую границу ячейки на 4 пикселя. Чтобы решить проблему, необходимо перед вызовом FillRect уменьшить значение Rect.Left на 4 пикселя.

procedure TShapeline.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if TStringGrid(Sender).DefaultDrawing and StyleServices.Enabled then
    Rect.Offset(-4, 0);
  StringGrid1.Canvas.Brush.Color:=$00FF80FF;
  StringGrid1.Canvas.FillRect(Rect);
end;

Альтернативные решения

  1. Отключение рисования сетки, установив свойства goFixedVertLine и goFixedHorizLine в false. Это уберет линии сетки, и ячейки будут закрашиваться до краев. Однако, это решение уберет все линии сетки, что может быть нежелательно.

  2. Использование метода CellRect, который возвращает фактический прямоугольник ячейки. Однако, это может быть неэффективно в обработчике OnDrawCell.

  3. Отключение свойства DefaultDrawing, установив его в false. Это потребует дополнительной логики для рисования текста и линий сетки.

Заключение

Для устранения проблемы с методом FillRect в Delphi XE2 рекомендуется использовать проверку на DefaultDrawing и StyleServices.Enabled, после чего корректировать левую границу ячейки. Это позволит закрасить ячейки TStringGrid без пробелов, сохраняя при этом стандартное поведение компонента.

Создано по материалам из источника по ссылке.

При работе с `TStringGrid` в Delphi XE2 возникла проблема с неполным закрашиванием ячеек методом `FillRect` из-за сдвига левой границы на 4 пикселя при активном `DefaultDrawing` и темах.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: TStringGrid и TDrawGrid ::


реклама


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

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