1

У меня проблема в Delphi 10.1 в приложении с несколькими устройствами (в Windows). У меня есть StringGrid (подключен к db), и я могу изменить цвет фона строки, но проблема в том, что между ячейками есть «прокладка» (в сером/серебристом).Fmx TStringGrid цвет строки

В onformCreate я определяю:

stringgrid1.DefaultDrawing := False; 

Это мой код:

procedure Tlist_form.StringGrid1DrawColumnCell(Sender: TObject; 
    const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF; 
    const Row: Integer; const Value: TValue; const State: TGridDrawStates); 
    var aRowColor: TBrush; 
begin 
    aRowColor := Tbrush.Create(TBrushKind.Solid,TAlphaColors.Alpha); 


    if (stringgrid1.Cells[7,row]='1') then 
     aRowColor.Color := TAlphaColors.Green 
    else 
     aRowColor.Color := TAlphaColors.Red; 

    Canvas.FillRect(Bounds, 0, 0, [], 1, aRowColor); 
    Column.DefaultDrawCell(Canvas, Bounds, Row, Value, State); 

    aRowColor.free; 

end; 

В Delphi 6 Я никогда не имел эту проблему, и я не знаю, как исправить это, , Спасибо.

ответ

2

Решение 1 (во время разработки):

Для каждого StringColumn найти Padding свойство и изменить все значения от 3 до 0.

Решение 2 (во время выполнения):

Добавить TRectF в местные вары. Назначьте это значение Bounds и Inlfate(). Модифицированный OnDrawColumnCell() выглядит следующим образом:

procedure TForm30.StringGrid1DrawColumnCell(Sender: TObject; 
    const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF; 
    const Row: Integer; const Value: TValue; const State: TGridDrawStates); 
var 
    aRowColor: TBrush; 
    aNewRectF: TRectF; 
begin 
    aRowColor := TBrush.Create(TBrushKind.Solid, TAlphaColors.Alpha); 

    if (StringGrid1.Cells[7, Row] = '1') then 
    aRowColor.Color := TAlphaColors.Green 
    else 
    aRowColor.Color := TAlphaColors.Red; 

    aNewRectF := Bounds; 
    InflateRect(aNewRectF, 3, 3); 
    Canvas.FillRect(aNewRectF, 0, 0, [], 1, aRowColor); 
    Column.DefaultDrawCell(Canvas, Bounds, Row, Value, State); 

    aRowColor.free; 
end; 

сетка выглядит так как с решениями:

enter image description here

+0

он говорит: «Типы E2033 фактических и формальных параметров вар должны быть идентичными» на "InflateRect (aNewRectF, 3, 3); – Rube

+0

Хммм ... Это скомпилировано для меня. Doublecheck, который вы объявили 'aNewRectF' как' TRectF' (заканчивающийся на 'F'), а также попробуйте написать константы в виде float, так как 3.0 –

+0

yep - aNewRectF и TRectF, попытались изменить значение, используя float, используя const, но у меня есть (и курсор идет сразу после первого параметра InflateRect (aNewRectF, 3,3) – Rube