Ver Mensaje Individual
  #6  
Antiguo 28-12-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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; // separador elegido
      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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 28-12-2010 a las 16:01:07.
Responder Con Cita