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