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.