2

How can I do inverse selection in AdvStringGrid (TMS)?

YoungMaster
  • 395
  • 3
  • 17

1 Answers1

4

Assuming, that NGLN is right, you'll need to set the proper Disjunct...Select option in Grid.MouseActions to select the kind of selection you'll allow, and then you can call this procedure:

PROCEDURE InvertSelection(Grid : TAdvStringGrid);
  VAR
    C,R : Cardinal;

  BEGIN
    IF Grid.MouseActions.DisjunctCellSelect THEN
      FOR R:=Grid.FixedRows TO PRED(Grid.RowCount) DO FOR C:=Grid.FixedCols TO PRED(Grid.ColCount) DO Grid.SelectedCells[C,R]:=NOT Grid.SelectedCells[C,R]
    ELSE IF Grid.MouseActions.DisjunctRowSelect THEN
      FOR R:=Grid.FixedRows TO PRED(Grid.RowCount) DO Grid.RowSelect[R]:=NOT Grid.RowSelect[R]
    ELSE IF Grid.MouseActions.DisjunctColSelect THEN
      FOR C:=Grid.FixedCols TO PRED(Grid.ColCount) DO Grid.ColSelect[C]:=NOT Grid.ColSelect[C]
  END;

This will make all unselected rows/columns/cells selected and vice-versa.

HeartWare
  • 7,464
  • 2
  • 26
  • 30
  • Sorry, but this function doesn't work. Do you try to use this code? – YoungMaster Oct 11 '11 at 09:35
  • @YoungMaster, I've tested it and it works. You probably missed the part how to set the `MouseActions.DisjunctCellSelect` or `MouseActions.DisjunctRowSelect` or `MouseActions.DisjunctColSelect` property to `True` on your `TAdvStringGrid`. One of them must be set which allows you to select something else than rectangle. This is perfectly acceptable answer ;) – TLama Oct 11 '11 at 15:07