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

4 ответа

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

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

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

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

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

  • goFixedVertLine
  • goFixedHorizLine
  • goVertLine
  • goHorizLine

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

Другие вопросы по тегам