Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-03-2018
rrf rrf is offline
Miembro
 
Registrado: Aug 2003
Ubicación: S/C Tenerife, España
Posts: 402
Poder: 15
rrf Va por buen camino
Pegar texto en una columna de StringGrid desde una fila determinada

Hola.

Quería pegar un texto en una columna de un StringGrid (cada línea es una celda) y lo logré aplicando este código de Ecfisa (que he adaptado) que encontré en este enlace de los foros: https://www.clubdelphi.com/foros/showthread.php?t=81684 (es el comentario #3):

Código Delphi [-]
var
  TS: TStrings;
begin
  if Clipboard.HasFormat(CF_TEXT)
  then
    begin
      TS := TStringList.Create;
      try
        TS.Text := clipboard.AsText;
        StringGrid1.Cols[ 1 ]:= TS;
      finally
        TS.Free;
      end;
    end
  else
    ShowMessage('No hay texto en el PortaPapeles');
end;

Asi se pega el contenido del portapapeles en la columna 1 (la segunda), que es donde quiero.

Ahora bien, el texto empieza a pegarse desde la fila 0 y, aunque me puede servir, lo que realmente quiero es que se pegue desde la fila 1. ¿Es posible hacerlo? ¿Cómo se hace?.

Gracias de antemano y saludos.
Responder Con Cita
  #2  
Antiguo 21-03-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: Dec 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.017
Poder: 29
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 behold
Hola rrf.

Podrías hacer:
Código Delphi [-]
...
var
  TS: TStrings;
  i : Integer;
begin
  if Clipboard.HasFormat(CF_TEXT)
  then
    begin
      TS := TStringList.Create;
      try
        TS.Text := clipboard.AsText;
        for i := 0 to TS.Count-1 do 
          StringGrid1.Cols[1].Strings[i+1] := TS[i];
      finally
        TS.Free;
      end;
    end
  else
    ShowMessage('No hay texto en el PortaPapeles');
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 21-03-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: Dec 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.017
Poder: 29
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 behold
Hola de nuevo.

Y mas reusable sería:
Código Delphi [-]
procedure PasteInColRow(SG: TStringGrid; const aCol, aRow: Integer);
var
  TS: TStrings;
  i : Integer;
begin
  if Clipboard.HasFormat(CF_TEXT)
  then
    begin
      TS := TStringList.Create;
      try
        TS.Text := clipboard.AsText;
        for i := 0 to TS.Count-1 do
          SG.Cols[aCol].Strings[aRow+i] := TS[i];
      finally
        TS.Free;
      end;
    end
  else
    ShowMessage('No hay texto en el PortaPapeles');
end;

Ej. uso:
Código Delphi [-]
   PasteInColRow(StringGrid1, 3, 2);  // ( índice base-cero y sin comprobación de desborde )

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 21-03-2018
rrf rrf is offline
Miembro
 
Registrado: Aug 2003
Ubicación: S/C Tenerife, España
Posts: 402
Poder: 15
rrf Va por buen camino
Muchas gracias Ecfisa.

He probado el código de tu comentario anterior y funciona como un reloj (es decir, muy bien).

Y con ello, has resuelto la duda que tenía.

De nuevo, muchas gracias por tu ayuda.

Saludos.
Responder Con Cita
  #5  
Antiguo 23-03-2018
rrf rrf is offline
Miembro
 
Registrado: Aug 2003
Ubicación: S/C Tenerife, España
Posts: 402
Poder: 15
rrf Va por buen camino
Aunque no lo pregunté, pensaba también añadir la opción de leer una lista de nombres desde un archivo de texto y añadirlos en una columna del StringGrid, a partír de la 2 fila.

Usando el código de Ecfisa (gracias de nuevo), hice una adaptación y aquí lo adjunto por si le puede ayudar a alguien. Con pequeños cambios puede adaptarse para que el texto se escriba desde una celda determinada, según las necesidades de cada cual.

Código Delphi [-]
procedure TCreaLista1.Button2Click(Sender: TObject);
var
  ff: TStrings;
  i : integer;
begin
      // Leer archivo de texto con una lista de nombres
      //-------------------------------------------------

  if OpenDialog1.Execute
  then
    begin

      ff:= TStringList.Create ;
      try
        ff.LoadFromFile( OpenDialog1.FileName );

          // escribe el archivo leido en la 2ª columna, desde la 2ª fila hacia abajo
        for i := 0 to ff.Count-1 do
          StringGrid1.Cols[1].Strings[1+i] := ff[i];

      finally
        ff.Free;
      end;

    end
  else
    begin
      ShowMessage( 'No se seleccionó un archivo de texto.');
      exit ;
    end ;

end;

Saludos.
Responder Con Cita
  #6  
Antiguo 23-03-2018
[egostar] egostar is offline
Registrado
 
Registrado: Feb 2006
Posts: 6.421
Poder: 19
egostar Va por buen camino
Hola

Y porque no usar directamente la propiedad Cells del StringGrid.

Código Delphi [-]
procedure TForm1.actualizaGrid(Texto: string; Registros, Columna: integer; grid: TStringGrid);
var
  Renglon: Integer;
begin
  for Renglon := 1 to Registros do
  begin
    grid.Cells[Columna, Renglon] := Texto;
  end;
end;

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #7  
Antiguo 23-03-2018
rrf rrf is offline
Miembro
 
Registrado: Aug 2003
Ubicación: S/C Tenerife, España
Posts: 402
Poder: 15
rrf Va por buen camino
Hola Egostar.
He leido tu código y creo que copia un texto en varias celdas consecutivas de una columna.
Aunque siempre copia el mismo String (texto) en cada celda.
Lo que no se ajusta a lo que buscaba:
Cita:
... pegar un texto en una columna de un StringGrid (cada línea es una celda) ...
, donde cada línea es diferente a las otras, pues se quiere incluir en el StringGrid una lista de nombres de personas.
Es posible que esté equivocado, puesto que no lo he probado.
De cualquier manera, gracias por tu aportación.
Saludos.
Responder Con Cita
  #8  
Antiguo 23-03-2018
[egostar] egostar is offline
Registrado
 
Registrado: Feb 2006
Posts: 6.421
Poder: 19
egostar Va por buen camino
Cita:
Empezado por rrf Ver Mensaje
Hola Egostar.
He leido tu código y creo que copia un texto en varias celdas consecutivas de una columna.
Aunque siempre copia el mismo String (texto) en cada celda.
Lo que no se ajusta a lo que buscaba:

, donde cada línea es diferente a las otras, pues se quiere incluir en el StringGrid una lista de nombres de personas.
Es posible que esté equivocado, puesto que no lo he probado.
De cualquier manera, gracias por tu aportación.
Saludos.
Claro, es un proceso genérico que pasa un dato fijo, pero que ejemplifica que se puede asignar a la Celda correspondiente el valor que necesites.

Utilizando tu requerimiento podría ser de ésta forma

Código Delphi [-]
:::::
  ff.LoadFromFile( OpenDialog1.FileName );
  // escribe el archivo leido en la 2ª columna, desde la 2ª fila hacia abajo
  for i := 0 to ff.Count-1 do
    StringGrid1.Cells[1, I+1] := ff[i];
:::::

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #9  
Antiguo 24-03-2018
rrf rrf is offline
Miembro
 
Registrado: Aug 2003
Ubicación: S/C Tenerife, España
Posts: 402
Poder: 15
rrf Va por buen camino
Egostar, tienes toda la razón.
Se puede hacer así perfectamente.
Cada problema se puede resolver por muchos caminos distintos. Y seguro que habrán más formas de hacerlo.
Pues el tema está listo y claramente resuelto.
Muchas gracias de nuevo y saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Copiar Y Pegar texto en las celdas de un StringGrid rgstuamigo OOP 2 01-12-2008 13:55:51
Primera columna y fila de un StringGrid gironella OOP 3 01-10-2008 09:42:30
Mostrar archivo de texto desde una ubicación determinada. creus Varios 1 13-11-2006 15:30:15
Insertar en fila determinada el_barto Varios 6 15-08-2006 16:04:26
Pegar texto en un documento desde Delphi mitxael API de Windows 6 25-09-2005 09:15:31


La franja horaria es GMT +2. Ahora son las 23:25:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi