Hola GerTorresM.
Creo que podrías hacer así:
Código Delphi
[-]
type
TDBGridEx = class(TDBGrid);
TForm1 = class(TForm)
...
DBGrid1: TDBGrid;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
public
procedure DBGridToClipBoard(DBGrd: TDBGridEx);
end;
...
implementation
uses ClipBrd;
...
procedure TForm1.DBGridToClipBoard(DBGrd: TDBGridEx);
var
i,j: Integer;
BM: TBookmarkStr;
s: string;
begin
DBGrd.DataSource.DataSet.DisableControls; try
BM:= DBGrd.DataSource.DataSet.Bookmark; DBGrd.DataSource.DataSet.MoveBy(1 - DBGrd.Row); s:= '';
for i:= 1 to DBGrd.RowCount - 1 do begin
for j:= 0 to DBGrd.FieldCount - 1 do begin
s:= s + DBGrd.Fields[j].AsString;
if i < DBGrd.RowCount then s:= s + '-'; end;
s:= s + #10#13; DBGrd.DataSource.DataSet.Next; end;
ClipBoard.SetTextBuf(PChar(s)); DBGrd.DataSource.DataSet.Bookmark:= BM; finally
DBGrd.DataSource.DataSet.EnableControls;
end;
end;
...
Ejemplo de uso:
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
begin
DBGridToClipboard(TDBGridEx(DBGrid1));
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage(ClipBoard.AsText);
end;
Saludos.