Programowanie w języku Delphi » FAQ

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

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 komentarze

Terrmit 2008-01-22 22:16

"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;

Lothan 2007-11-21 12:54

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()).