Caption := sgShopList.Rows[sgShopList.RowCount +1000].CommaText;
Caption := sgShopList.Rows[sgShopList.RowCount -1000].CommaText;
Rows[]的索引值,可以超过 RowCount,但是不能 小于0
Cells[]的索性值,读取时可以任意,包括-1 或者10000,不会报错。
with TStringGrid.Create(Self )do try Parent := Self; ShowMessage( Cells[-1, 1000] ); finally free end;
function TStringGrid.GetCells(ACol, ARow: Integer): string; var ssl: TStringSparseList; begin ssl := TStringSparseList(TSparseList(FData)[ARow]); if ssl = nil then Result := '' else Result := ssl[ACol]; end;
写入时,不能是 -1,但可以是 100000等
with TStringGrid.Create(Self )do try Parent := Self; Cells[100, 1000] := '123555'; ShowMessage( Cells[100, 1000] ); finally free end;
function TSparseList.Get(Index: Integer): Pointer; begin if Index < 0 then TList.Error(SListIndexError, Index); Result := FList[Index] end;
property Row: Longint read FCurrent.Y write SetRow;
procedure TCustomGrid.SetRow(Value: Longint); begin if Row <> Value then FocusCell(Col, Value, True); end;
procedure TCustomGrid.FocusCell(ACol, ARow: Longint; MoveAnchor: Boolean); begin MoveCurrent(ACol, ARow, MoveAnchor, True); UpdateEdit; Click; end;
procedure TCustomGrid.MoveCurrent(ACol, ARow: Longint; MoveAnchor, Show: Boolean); var OldSel: TGridRect; OldCurrent: TGridCoord; begin if (ACol < 0) or (ARow < 0) or (ACol >= ColCount) or (ARow >= RowCount) then InvalidOp(SIndexOutOfRange); if SelectCell(ACol, ARow) then begin OldSel := Selection; OldCurrent := FCurrent; FCurrent.X := ACol; FCurrent.Y := ARow; if not (goAlwaysShowEditor in Options) then HideEditor; if MoveAnchor or not (goRangeSelect in Options) then begin FAnchor := FCurrent; if goRowSelect in Options then FAnchor.X := ColCount - 1; end; if goRowSelect in Options then FCurrent.X := FixedCols; if Show then ClampInView(FCurrent); SelectionMoved(OldSel); with OldCurrent do InvalidateCell(X, Y); with FCurrent do InvalidateCell(ACol, ARow); end; end;