Show ActiveRow in a Grid with Backgroubd.Cell=bcFixed

In a TAdvStringGrid I want to display the header in NonFlatMode, as it is when I have Background.Cells on bcNormal. However, I want to use my own colors. Therefore I have to set Background.Cells to bcFixed. But then I can no longer display the whole ActiveRow highlighted in the grid. There is only one cell selected.
How can I display the beautiful 3D-like header and still see the complete activeRow highlighted.

I'm not sure what you mean. What do you mean with "header"? Is this the first fixed row? Something else? Given you refer to ActiveRow, I guess this is related to a first fixed column?
When you set grid.Look = glClassic, the fixed cells have a 3D look. Do you want the active row to be visible in this fixed column as well?
If so, a possible way to do this is by implementing OnGetCellColor

procedure TForm1.AdvStringGrid1GetCellColor(Sender: TObject; ARow,
  ACol: Integer; AState: TGridDrawState; ABrush: TBrush; AFont: TFont);
  if ACol = 0 then
    if ARow = AdvStringGrid1.Row then
      ABrush.Color := clRed;

With Header I mean the first Fixed Row(0).
The Active Row should not be visible in the header.
With Grid.Look:=glCustom; the grid looks like GridLook1.png.
This is basically OK, but the header is not 3D and the ActiveRowColor cannot be changed.
With Grid.Look:=glClassic; the text in the ActiveRow is no longer readable and the header is not 3D.
How can I adjust the colors of a look?

I used the following code to initialize the grid.

// ****************************************************************************
// * Grid Initialisieren *
// ****************************************************************************
procedure GridInit;
With frmRechVerw.grdRechVerwaltung Do
SaveFixedCells := false;
frmRechVerw.grdRechVerwaltung.SortSettings.Show := True;
ActiveRowShow := True;
ShowSelection := True;

// Hintergrund Farbe aller Zeilen im Grid außer der ausgewählten Zeile
Color := rgb(232, 252, 255);

// Ausgewählte Zeile anzeigen
ShowSelection := True;
SelectionColor := $00DFFFFE; // Helles Gelb

// Ausgewählte Zeilen Farbe
ActiveRowShow := True;
ActiveRowColor := $00DFFFFE; // Helles Blau

// Header Verlauf setzen
ControlLook.FixedGradientFrom := rgb(159, 227, 237);
ControlLook.FixedGradientTo := rgb(94, 163, 173);

// Hintergrund
BackGround.Cells := bcFixed;
BackGround.Display := bdgradientVert;
BackGround.Color := clCream;
BackGround.ColorTo := rgb(129, 191, 230);
Font.Color := clBlack;
BorderColor := clBlack;

FloatFormat:='%2n'; // Tausenderpunkt und 2 Nachkommastellen

FixedCols := 0;


You can use
grid.SelectionTextColor := clBlack
for example

I found two Combinations of Parameters that will fit my needs, but do not both things that i want to have.

The first Example show the Grid with 3D-Header and a selected row but without Gradiant for the Background of the Grid:
// Hintergrund Einstellungen
grd.BackGround.Cells := bcNormal;
grd.BackGround.Display := bdFixed;

// Ausgewählte Zeilen Farbe anzeigen / nicht anzeigen
grd.ActiveRowShow := true;
grd.ActiveRowColor := clInfoBk;

// Ausgewählte Zelle anzeigen / nicht anzeigen
grd.ShowSelection := false;
grd.SelectionColor := clHighlight;

// Header zellen Verlauf setzen
grd.ControlLook.FixedGradientFrom := $00FCE1CB;
grd.ControlLook.FixedGradientTo := $00E0A57D;

// Hintergrund Farbe im Grid
grd.Color := clGradientInactiveCaption;

// Zellen Resizen ermöglichen
grd.Options := grd.Options + [goColsizing] + [goColMoving] - [goRangeSelect];

// ID Row ausblenden
grd.FixedCols := 0;


The second combination show a Gradient Background but no selected-Row:

    // Hintergrund Farbe im Grid
    grd.Color := rgb(232, 252, 255);

    // Ausgewählte Zelle anzeigen
    grd.ShowSelection := true;
    grd.SelectionColor := rgb(97, 187, 201);

    // Ausgewählte zeilen Farbe
    grd.ActiveRowShow := true;
    grd.ActiveRowColor := rgb(171, 228, 237);

    // Header Verlauf setzen
    grd.ControlLook.FixedGradientFrom := rgb(159, 227, 237);
    grd.ControlLook.FixedGradientTo := rgb(94, 163, 173);

    // Hintergrund
    grd.BackGround.Cells := bcNormal;
    grd.BackGround.Display := bdgradientVert;
    grd.BackGround.Color := clCream;
    grd.BackGround.ColorTo := rgb(129, 191, 230);
    grd.Font.Color := clBlack;
    grd.BorderColor := clBlack;

    PnlHeader.Color := rgb(232, 253, 255);
    Label1.Font.Color := clBlack;
    pnlGrid.Color := rgb(232, 253, 255);
    Form1.Color := rgb(232, 253, 255);

    // ID Verstecken
    grd.FixedCols := 0;


Is it possible to use the second example with Gradient and show the selected Row ?

For the 2nd case, add:

procedure TForm1.grdGetCellGradient(Sender: TObject; ARow, ACol: Integer;
  var Color, ColorTo, ColorMirror, ColorMirrorTo: TColor;
  var GD: TCellGradientDirection);
  if arow = 0 then
      color := $00FCE1CB;
      colorto := $00E0A57D;
      colormirror := clNone;
      colormirrorto := clNone;

The problem with the Header was fixed with the two Initialisations i send.
But the Problem with the second Init-Parameters is, that the ActiveRow-Line is not shown, if i set the BackgroundColor grd.BackGround.Display := bdgradientVert.

Can i have a Gradient Background and a ActiveRow with a colored BackColor?
And wich Property should i use to set the Color of the ActiveRow.

The first Picture show like it should look with an ActiveRow shown. But the BackGround of the Grid is in Flat Mode.

The second Picture show like it look with a GradientBackground, but the ActiveRow is not shown, only one Cell. The activeRow should looks like Pic1.



We could understand & investigate this issue now.
We applied a fix that will be included in the next release.

Thank you for your Support