Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-12-2004
karlita_cb karlita_cb is offline
Miembro
 
Registrado: mar 2004
Posts: 30
Poder: 0
karlita_cb Va por buen camino
Question 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
Responder Con Cita
  #2  
Antiguo 09-12-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #3  
Antiguo 09-12-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 16:28:47.


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
Copyright 1996-2007 Club Delphi