Good morning to all,

in my grid i need to allow edit only in 3 columns.

Two are contiguous, the last one no.

The effect who i try to get is, with the arrow key or mouse, move the cursor only in this 3 cells.

For example for 10 columns grid only the 3,4 and 7 are editable.

When the form is showed, by defaut, the grid start with the cursor in cell[3,1], so if j press the left key nothing append, if i press the rigth key go to column 4 and if i press the rigth key again the curso need to move (jump) to column 7.

I try to do this via CellChanging event, but i'm not able to jump from column 4 to 7

Here my event

procedure TFMRG.SG1CellChanging(Sender: TObject; OldRow, OldCol, NewRow,

NewCol: Integer; var Allow: Boolean);



if (NewCol=3) or (NewCol=4) or (NewCol=7) then Allow:=True


if NewCol=5 then






In this case the curso move to column 5, even newcol is setted to 7 (this is rigth because NewCol is not VAR).

Is it possible to get this "effect"?

If yes ... how ?

Thank's for your reply.



The mistake here is that NewCol, NewRow are not var parameters. So, either, when you set Allow = true, the grid will move to NewCol,NewRow itself and when you set Allow = false, you need to programmatically update the new focused cell yourself from this event, i.e. by setting grid.Col / grid.Row properties. 

You'd need to handle from here left & right arrow key handling, so to jump over columns 5, 6 something like:

    if (OldCol < NewCol) and (NewCol=5) then
      advstringgrid1.Col := 7;
      Allow := false;
    if (OldCol > NewCol) and (NewCol=6) then
      advstringgrid1.Col := 4;

Hi Bruno,

thank's ..... i didn't think !!!!