Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Копировать и вставлять ячейки TStringGrid в буфер обмена

01.01.2007
uses
   
Clipbrd;
 
 
//Copy
procedure TForm1
.Button1Click(Sender: TObject);
 
var
   S
: string;
   
GRect: TGridRect;
   C
, R: Integer;
 
begin
   
GRect := StringGrid1.Selection;
   S  
:= '';
   
for R := GRect.Top to GRect.Bottom do
   
begin
     
for C := GRect.Left to GRect.Right do
     
begin
       
if C = GRect.Right then  S := S + (StringGrid1.Cells[C, R])
       
else
         S
:= S + StringGrid1.Cells[C, R] + #9;
     
end;
     S
:= S + #13#10;
 
end;
   
ClipBoard.AsText := S;
 
end;
 
 
// Paste
procedure TForm1
.Button2Click(Sender: TObject);
 
var
   
Grect: TGridRect;
   S
, CS, F: string;
   L
, R, C: Byte;
 
begin
   
GRect := StringGrid1.Selection;
   L
:= GRect.Left;
   R
:= GRect.Top;
   S
:= ClipBoard.AsText;
   R
:= R - 1;
   
while Pos(#13, S) > 0 do
   
begin
     R  
:= R + 1;
     C  
:= L - 1;
     CS
:= Copy(S, 1,Pos(#13, S));
     
while Pos(#9, CS) > 0 do
     
begin
       C
:= C + 1;
       
if (C <= StringGrid1.ColCount - 1) and (R <= StringGrid1.RowCount - 1) then
         StringGrid1
.Cells[C, R] := Copy(CS, 1,Pos(#9, CS) - 1);
       F
:= Copy(CS, 1,Pos(#9, CS) - 1);
       
Delete(CS, 1,Pos(#9, CS));
     
end;
     
if (C <= StringGrid1.ColCount - 1) and (R <= StringGrid1.RowCount - 1) then
       StringGrid1
.Cells[C + 1,R] := Copy(CS, 1,Pos(#13, CS) - 1);
     
Delete(S, 1,Pos(#13, S));
     
if Copy(S, 1,1) = #10 then
       
Delete(S, 1,1);
   
end;
 
end;

Взято с сайта: https://www.swissdelphicenter.ch


Как скопировать выбранные в DBGrid записи в клипборд

Автор: Тенцер А.Л.

const
 FIELD_DELIMITER
= #9;
 RECORD_DELIMITER
= #10;
 
 
procedure
CopyDBGridToClipboard( Grid : TDBGrid );
var
 BM
: String;
 S
: String;
 S1
: String;
 I
: Integer;
begin
 
with Grid  do begin
 
if Assigned( DataSource ) and
     
Assigned( DataSource.DataSet ) and
     
DataSource.DataSet.Active then
 
with DataSource.DataSet do begin
   S
:= '';
   
DisableControls;
   BM
:= BookMark;
   
for I := 0 to Pred( Columns.Count ) do begin
   
if Assigned(Columns.Items[I].Field) then
      S
:= S + Columns.Items[I].Title.Caption + FIELD_DELIMITER;
   
end;
   S
[ Length( S ) ] := RECORD_DELIMITER;
   
First;
   
while not Eof do begin
    S1
:= '';
   
for I := 0 to Pred( Columns.Count ) do begin
     
if Assigned(Columns.Items[I].Field) then
        S1
:= S1 + FieldByName( Columns[I].FieldName ).AsString +
FIELD_DELIMITER
;
   
end;
    S1
[ Length( S1 ) ] := RECORD_DELIMITER;
    S
:= S + S1;
   
Next;
   
end;
   
BookMark := BM;
   
EnableControls;
//   Clipboard.SetTextBuf( PChar( S ) );
   
SendToClipboard( S );
 
end;
 
end;
end;
 
 
 

https://delphiworld.narod.ru/

DelphiWorld 6.0