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.