Ver Mensaje Individual
  #4  
Antiguo 08-12-2012
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Reputación: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Cristhor1982,

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, ClipBrd;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    ClipBoard2StringGrid: TButton;
    StringGrid2Clipboard: TButton;
    txtRows: TEdit;
    Label1: TLabel;
    txtCols: TEdit;
    Label2: TLabel;
    procedure ClipBoard2StringGridClick(Sender: TObject);
    procedure StringGrid2ClipboardClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Divide una cadena de Texto por palabras
procedure Split(const Delimiter: Char; Input: string; const Strings: TStrings);
begin
   Strings.Clear;
   Strings.Delimiter := Delimiter;
   Strings.DelimitedText := Input;
end;

// Copia de Clipboard a StringGrid
procedure TForm1.ClipBoard2StringGridClick(Sender: TObject);
var
   StrList : TStringList;
   Row, Col, Data : Integer;

begin
   StrList := TStringList.Create;

   if Clipboard.HasFormat(CF_TEXT) then
   begin
      Split(' ',Clipboard.AsText,StrList);
      StringGrid1.FixedRows := 1;
      StringGrid1.FixedCols := 1;
      StringGrid1.RowCount := StrToIntDef(txtRows.Text,1)+1; // Por defecto una fila
      StringGrid1.ColCount := StrToIntDef(txtCols.Text,1)+1; // Por defecto una columna

      for Row:= 1 to StringGrid1.RowCount do
         StringGrid1.Rows[Row].Clear;

      for Col:= 1 to StringGrid1.ColCount do
         StringGrid1.Cols[Col].Clear;

      Data := 0;
      for Row:= 1 to StringGrid1.RowCount do
         for Col:= 1 to StringGrid1.ColCount-1 do
         begin
            if (Data <= StrList.Count-1) then
            begin
               StringGrid1.Cells[Col,Row] := StrList.Strings[Data];
               inc(Data);
            end
         end
   end;

   StrList.Free;
end;

// Copia de StringGrid a Clipboard
procedure TForm1.StringGrid2ClipboardClick(Sender: TObject);
var
   StringData : String;
   Row,Col : Integer;

begin
   Clipboard.Clear;

   StringData := '';

   for Row := 1 to StringGrid1.RowCount do
   begin
      for Col := 1 to StringGrid1.ColCount-1 do
      begin
         if (StringGrid1.cells[Col,Row] <> ' ') then
            StringData := StringData + StringGrid1.cells[Col,Row] + #9;
      end;
      StringData := StringData + #13 + #10;
   end;

   Clipboard.AsText := StringData;
end;

end.
El código anterior permite copiar por medio del Clipboard filas y columnas de data desde y hacia un control TStringGrid, es práctico para el intercambio de data con Excel.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 08-12-2012 a las 03:22:55.
Responder Con Cita