FillRect не рисует полную ячейку TStringGrid в Delphi XE2 - PullRequest
15 голосов
/ 10 января 2012

FillRect не окрашивает полную ячейку TStringGrid в Delphi XE2. Слева в 3 пикселя в цвете по умолчанию (с BiDiMode, установленным на bdLeftToRight). Эта проблема не существует в Delphi 6, который я использовал ранее.

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

Я попытался изменить все свойства (включая DrawingStyle) и различные стили кисти, закрашенный прямоугольник не заполняет всю ячейку.

Ответы [ 4 ]

18 голосов
/ 10 января 2012

Это ожидаемое поведение в XE2, когда DefaultDrawing = true и темы включены (. Я не буду спорить о хорошем или плохом - как вы могли заметить, поведение в режиме RigthToLeft отличается ... ).

Обходной путь должен проверить это условие и уменьшить Rect.Left на 4 пикселя перед вызовом FillRect.

3 голосов
/ 11 января 2012

Вместо параметра Rect.

можно использовать StringGrid1.CellRect(ACol, ARow), который возвращает фактический TRect ячейки.
0 голосов
/ 15 мая 2015

Поскольку вы рисуете ячейку сетки самостоятельно, просто отключите свойство сетки DefaultDrawing, установите для него значение false.

0 голосов
/ 10 января 2012

Отключить первые 4 опции в TStringGrid:

  • goFixedVertLine
  • goFixedHorizLine
  • goVertLine
  • goHorizLine

Тогда он не будет рисовать линии сетки, и ваши ячейки сетки будут рисовать прямо по краям. Только что попробовал с XE.

...