FillRect не создает полную ячейку TStringGrid в Delphi XE2

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) и разные стили кисти, окрашенный прямоугольник не заполнил полную ячейку.

Ответы

Ответ 1

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

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

Ответ 2

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

Ответ 3

Отключите первые 4 параметра в TStringGrid:

  • goFixedVertLine
  • goFixedHorizLine
  • goVertLine
  • goHorizLine

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

Ответ 4

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