Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Stringgrid a txt//imprimir texto en el form (https://www.clubdelphi.com/foros/showthread.php?t=16716)

karlita_cb 09-12-2004 00:00:23

Stringgrid a txt//imprimir texto en el form
 
Hola quisiera saber cómo puedo pasar el contenido de un string grid a un documento de texto o a una nueva ventana sin columnas ni filas...
Y para ello también quiero saber cómo puedo hacer que las letras aparezcan directamente en el form... Gracias

roman 09-12-2004 03:34:59

Todo depende de cómo quieras presentar los datos. Vamos a suponer que tu StringGrid se ve así:

Código:

+----+---------+-----------------------------------+--+
|0001|049730450|GONZALEZ Y GARCIA LUIS GERMAN      | 5|
+----+---------+-----------------------------------+--+
|0002|056001213|LAGUIRENNE Y CASTILLO JORGE ARMANDO| 8|
+----+---------+-----------------------------------+--+
|0003|056039483|VEGA ROLDAN OSCAR                  |10|
+----+---------+-----------------------------------+--+
|0004|057062998|ELORDUY ELORDUY AMALIA            | 7|
+----+---------+-----------------------------------+--+
|0005|058026887|KAMICHIKA Y KOHASHI YOSHINO        | 8|
+----+---------+-----------------------------------+--+

Puedes optar por presentar cada fila con los datos separados por comas:

Código:

0001,049730450,GONZALEZ Y GARCIA LUIS GERMAN,5
0002,056001213,LAGUIRENNE Y CASTILLO JORGE ARMANDO,8
0003,056039483,VEGA ROLDAN OSCAR,10
0004,057062998,ELORDUY ELORDUY AMALIA,7
0005,058026887,KAMICHIKA Y KOHASHI YOSHINO,8

O bien en columas de ancho fijo:

Código:

0001 049730450 GONZALEZ Y GARCIA LUIS GERMAN        5
0002 056001213 LAGUIRENNE Y CASTILLO JORGE ARMANDO  8
0003 056039483 VEGA ROLDAN OSCAR                  10
0004 057062998 ELORDUY ELORDUY AMALIA              7
0005 058026887 KAMICHIKA Y KOHASHI YOSHINO          8

o incluso como en la representación del grid que puse al principio.

En todos los casos te puedes valer de la función Format.

Vamos a suponer que presentas la información en un Memo. El primer caso (datos separados por comas) lo haces así:

Código Delphi [-]
const
  fmtLinea = '%s,%s,%s,%d';

var
  Linea: String;

begin
  Linea := Format(fmtLinea, ['0001', '049730450', 'GONZALEZ Y GARCIA LUIS GERMAN', 5]);
  Memo1.Lines.Add(Linea);

  Linea := Format(fmtLinea, ['0002', '056001213', 'LAGUIRENNE Y CASTILLO JORGE ARMANDO', 8]);
  Memo1.Lines.Add(Linea);

  Linea := Format(fmtLinea, ['0003', '056039483', 'VEGA ROLDAN OSCAR', 10]);
  Memo1.Lines.Add(Linea);

  Linea := Format(fmtLinea, ['0004', '057062998', 'ELORDUY ELORDUY AMALIA', 7]);
  Memo1.Lines.Add(Linea);

  Linea := Format(fmtLinea, ['0005', '058026887', 'KAMICHIKA Y KOHASHI YOSHINO', 8]);
  Memo1.Lines.Add(Linea);
end;

El primer parámetro de Format indica el formato para presentra los datos y en el segundo se especifican los datos en sí. En la cadena de formato, %s significa que el dato es una cadena de caracteres y %d que es un número entero.

Para el segundo caso (columnas de ancho fijo), el código es el mismo pero sustituyendo la cadena de formato por:

Código Delphi [-]
const
  fmtLinea = '%-5s%-10s%-36s%2d';

que igualmente indica que hay cuatro datos, tres son cadenas de caracteres y el último un número entero. Pero aquí, los modificadores entre % y s (o % y d) indican el ancho de la columna (5, 10, 36 y 2). El signo - indica que los datos deben presentarse alineados a la izquierda mientras que si no se pone significa que los datos van alineados a la derecha, como en la última columna.

Para que esto funcione bien, los anchos de las columnas deben ser por lo menos tanto como la longitud máxima del dato. Es decir, si un nombre (tercera columna) ocupa más de 35 caracteres se romperá el formato (puse 36 y no 35 para garantizar un espacio en blanco entre columnas).

Si quieres presentar los datos simulando un grid (tal como lo puse al principio) basta cambiar fmtLinea por:

Código Delphi [-]
const
  fmtLinea = |%-4s|%-9s|%-35s|%2d|;

En este caso, simplemente hay que añadir la línea divisoria entre cada dos líneas:

Código Delphi [-]
Memo1.Lines.Add('+----+---------+-----------------------------------+--+');

Claro que aquí los ejemplos está aplicados a datos estáticos. Para hacerlo con el StringGrid simplemente tienes que procesar cada línea con un ciclo:

Código Delphi [-]
var
  Linea: String;
  I: Integer;

begin
  for I := 0 to StringGrid1.RowCount - 1 do
    with StringGrid1 do
    begin
      Linea := Format(
        fmtLinea,
        [Cells[0, I], Cells[1, I], Cells[2, I], Cells[3, I]]
      );

      Memo1.Lines.Add(Linea);
    end;
end;

Aunque aquí, como todos los datos del StringGrid son cadenas de caracteres deberás susituir %d por %s en el último campo.

Finalmente, puedes sustituir Memo1.Lines por un TStringList y usar su método SaveToFile para guardar en un archivo.

Lo de escribir los datos directamente en el formulario supongo que te referías a algo como el Memo.

Ahora que, si realmente quieres escribir los datos directamente en el formulario, también puedes hacerlo. Preparas cada línea igual que antes y usas el método TextOut del Canvas del formulario.

// Saludos

roman 09-12-2004 03:46:47

Se me olvidaba algo muy importante.

En el caso de columnas de ancho fijo, para que los datos se presenten correctamente en el Memo (o en el formulario), es imprescindible que uses una fuente de ancho constante como Courier New.

// Saludos


La franja horaria es GMT +2. Ahora son las 09:26:31.

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