Jak zaznaczyć w TCustomGrid dany zakres komórek i zrobic SelectAll

Johnny_Bit

zakres w komórkach dowolnego grida (descenata TCustomGrid) jest wyrażany typem TGridRect.

Komórki w Gridach liczy się od zera do ColCount/RowCount, więc zaznaczanie danego obszaru (przykład z helpa delphi):

var
  myRect: TGridRect;
begin
  myRect.Left := 5;
  myRect.Top := 1;
  myRect.Right := 9;
  myRect.Bottom := 7;
  StringGrid1.Selection := myRect;
end;

Da to zaznaczenie od 5 kolumny i pierwszego wiersza do 9 kolumny i 7 wiersza.

Select all z uwzględnienim że szarych komórek (FixedCols i Fixedrows) nie zaznaczamy wygląda następująco:

var
  myRect: TGridRect;
begin
  myRect.Left := StringGrid1.FixedCols;
  myRect.Top := StringGrid1.FixedRows;
  myRect.Right := StringGrid1.ColCount;
  myRect.Bottom := StringGrid1.RowCount;
  StringGrid1.Selection := myRect;
end;

Mam nadzieje iż wyjaśniłem problem zaznaczania w TCustomGrid i jego descenatach oraz iż pytania na forum dot. zaznaczania w TStringGrid i TCustomGrid bedą kwitowane: "Jest już w FAQ".

2 komentarzy

"Komórki w Gridach liczy się od zera do ColCount/RowCount"
Skoro od zera to do ColCount-1/RowCount-1

A dokładniej, zaznaczenie wszystkich komórek powinno się wykonać tak:
var
myRect: TGridRect;
begin
myRect.Left := StringGrid1.FixedCols;
myRect.Top := StringGrid1.FixedRows;
myRect.Right := StringGrid1.ColCount-1; // -1
myRect.Bottom := StringGrid1.RowCount-1; // -1
StringGrid1.Selection := myRect;
end;

To sie nie uda: "Grid index out of range" przy probie uzycia scrolla myszki (o ile nie klikniesz na StringGrid i zaznaczysz ja poprzez SetFocus()).