Hola GerTorresM.
Cuando dijiste:
Cita:
quiero copiar el contenido de un DBGrid en el portapapeles, agradezco de antemano la colaboración
|
Supuse que eran los Datos que el
DBGrid mostraba en pantalla en ese momento, de ahí que desprotegí a la clase
TDBgrid para obtener
la propiedad
Row. Pero veo por tu código que es todo el contenido del DataSet...
En ese caso creo que es más simple hacerlo así:
Código Delphi
[-]
procedure TForm1.DBGridToClipboard(ADataSet: TDataSet);
var
BM: TBookmarkStr;
i: Integer;
s: string;
begin
ADataSet.DisableControls;
try
BM:= ADataSet.Bookmark;
ADataSet.First;
s:= '';
while not ADataSet.Eof do
begin
for i:= 0 to ADataSet.FieldCount-1 do
begin
s:= s + ADataSet.Fields[i].AsString;
if i < ADataSet.RecordCount then
s:= s + #9; end;
s:= s + #10#13;
ADataSet.Next;
end;
ClipBoard.SetTextBuf(PChar(s));
finally
ADataSet.Bookmark:= BM;
ADataSet.EnableControls;
end;
end;
Y llamar al procedimiento así:
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
begin
DBGridToClipboard(DBGrid1.DataSource.DataSet);
end;
Demás está decir que si el DataSet está muy cargado sería bueno que preevieras la posibilidad de desbordes de memoria...
Saludos.