`
**uses** Clipbrd;
**function** StringGridSelectText(mStringGrid: TStringGrid): **string** ;
**var**
I, J: Integer;
S: **string** ;
**begin**
Result := **_''_** ;
**if** **not** Assigned(mStringGrid) **then** Exit;
**for** J := mStringGrid.Selection.Top **to** mStringGrid.Selection.Bottom **do**
**begin**
S := **_''_** ;
**for** I := mStringGrid.Selection.Left **to** mStringGrid.Selection.Right **do**
S := S + **_#9_** + mStringGrid.Cells[I, J];
Delete(S, **1** , **1** );
Result := Result + S + **_#13#10_** ;
**end** ;
**end** ; _{ StringGridSelectText }_
**procedure** StringGridPasteFromClipboard(mStringGrid: TStringGrid);
**var**
vTextList: TStringList;
vLineList: TStringList;
I, J: Integer;
**begin**
vTextList := TStringList.Create;
vLineList := TStringList.Create;
vLineList.Delimiter := **_#9_** ;
**try**
vTextList.Text := Clipboard.AsText;
**for** J := **0** **to** vTextList.Count - **1** **do**
**begin**
**if** J + mStringGrid.Row >= mStringGrid.RowCount **then** Break;
vLineList.DelimitedText := vTextList[J];
**for** I := **0** **to** vLineList.Count - **1** **do**
**begin**
**if** I + mStringGrid.Col >= mStringGrid.ColCount **then** Break;
mStringGrid.Cells[I + mStringGrid.Col, J + mStringGrid.Row] := vLineList[I];
**end** ;
**end** ;
**finally**
vTextList.Free;
vLineList.Free;
**end** ;
**end** ; _{ StringGridPasteFromClipboard }_
**procedure** StringGridCopyToClipboard(mStringGrid: TStringGrid);
**begin**
Clipboard.AsText := StringGridSelectText(mStringGrid);
**end** ; _{ StringGridCopyToClipboard }_
**procedure** TForm1.MenuItemCopyClick(Sender: TObject);
**begin**
StringGridCopyToClipboard(StringGrid1);
**end** ;
**procedure** TForm1.MenuItemPasteClick(Sender: TObject);
**begin**
StringGridPasteFromClipboard(StringGrid1);
**end** ;
**procedure** TForm1.StringGrid1KeyDown(Sender: TObject; **var** Key: Word;
Shift: TShiftState);
**begin**
**if** ssCtrl **in** Shift **then**
**case** Key **of**
Ord( ** _'C'_** ): StringGridCopyToClipboard(TStringGrid(Sender));
Ord( ** _'V'_** ): StringGridPasteFromClipboard(TStringGrid(Sender));
**end** ;
**end** ;
`