Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Hay alguna manera de imprimir el contenido de un Listbox (https://www.clubdelphi.com/foros/showthread.php?t=45331)

David 29-06-2007 11:39:09

Hay alguna manera de imprimir el contenido de un Listbox
 
Hola

Tengo un ListBox , que relleno de esta manera :
Código Delphi [-]
var
 mivariable : TStrings;
begin
   // Obtengo los valores en mivariable
  ListBox1.AddStrings(mivariable);
end;

Se muestra el contenido de listbox , una serie de lineas .

La pregunta es , hay alguna manera de imprimir el contenido del listBox . Estoy mirando por ahí y no veo forma de hacerlo.

Un saludo.

marcoszorrilla 29-06-2007 12:08:43

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
n:Integer;
begin
 for n:=0 to listbox1.Items.Count -1 do
 begin
 Form1.Canvas.Textout(100,n*20, listbox1.Items.Strings[n]);
 end;

En vez de Form1, pones Printer, tienes que utilizar la Unidad Printers para que te funcione correctamente.

Un Saludo.

ixMike 29-06-2007 18:57:29

Yo utilizo esto:

Código Delphi [-]
Procedure Imprimir(Lista: TStrings);
var
tx: TextFile;
n: integer;
begin
AssignPrn(Printer, tx);
Rewrite(tx);
Printer.NewDoc;
for n:=0 to Lista.Count-1 do
  begin
  WriteLn(tx, Lista[n]);
  end;
Printer.EndDoc;
CloseFile(tx);
end;

De todas formas, este código lo he puesto un poco de memorieta, y no estoy seguro de que esté completamente bien. Si alguien encuentra algún fallo, por favor, lo comunique.

Salu2 :)

David 30-06-2007 12:21:03

La realidad es que ninguno de los dos códigos me funciona , el de ixMike no compila y el de marcoszorrilla , si compila pero luego da un error que dice : "Printer is not currently printer"

marcoszorrilla 30-06-2007 18:30:22

Código Delphi [-]
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus,Printers,DB, ToolWin, ComCtrls, Buttons, StdCtrls;

procedure TForm1.Button1Click(Sender: TObject);
var
n:Integer;
begin
Printer.BeginDoc;
 for n:=0 to listbox1.Items.Count -1 do
 begin
Printer.Canvas.Textout(100,n*20, listbox1.Items.Strings[n]);
 end;

Printer EndDoc;

Pues te tiene que funcionar puesto que yo le he usado durante mucho tiempo para imprimir recibos y medidas no estándar.

Un Salduo.

David 30-06-2007 19:42:47

Si que funciona , pero no imprime bien , pongo 4 lineas por ejemplo y las 3 primeras apenas se ven ,estan como solapadas , la ultima si sale medio bien .

Otra cosa , menos importante , pero que si se puede hacer , mejor y es que imprime directamente , sin preguntar en que impresora quieres imprimir . Esto seria un plus .

David 30-06-2007 19:59:26

bueno si en lugar de poner n * 20 pongo n * 40 sale bien ya .

Pero eso si , imprime directo

marcoszorrilla 30-06-2007 21:43:11

Como se trata de un ejemplo no me esmerado mucho, pero ese número que has cambiado sería la separación entre una línea y otra por eso al aumentarlo puedes ver bien el texto.

Para más información consulta la ayuda del objeto Printer.

Puedes cambiar el tipo de letra y tamaño etc...

Código Delphi [-]
  Printer.Canvas.Font.Size:=14;
  Printer.Canvas.Font.Name:='Arial';

Un Saludo.

ixMike 24-07-2007 18:32:45

Mi código, un poco más completo, está aquí.

Pero igualmente creo que aún tiene un fallo (no sé dónde).

jhonny 24-07-2007 18:47:58

Si por X o Y razón, decides no usar las opciones que Marcos y ixMike te han proporcionado, también puedes usar el evento OnNeedData del QuickReport, para recorrer tu ListBox e imprimirlo, de esa manera, podrás tener las ventajas que ofrece un reporteador.

ixMike 28-10-2007 17:31:31

Bueno, lo primero, quería decir que el método que puse lo copié de alguna parte, no recuerdo de donde, el caso es que me funcionó cuando lo copié. Pero eso fue hace años, y ya no recordaba muy bien como era. Lo siento.

El caso es que ese fue de cuando era un muy novato. Ahora que lo soy menos, me he dedicado a ojear un poco el código. Lo que hace es tomar la impresora como la salida de un fichero de texto. En la ayuda de Delphi del método AssignPrn está bien explicado. Seguramente el fallo estaba al utilizar también el objetro Printer (BeginDoc, EndDoc...).

Bueno, aquí van unas líneas sencillas y comentadas, que no deberían fallar:

Código Delphi [-]

uses Printers;

{...}

procedure TfrmMain.mImprimirClick(Sender: TObject);
var
Impresona: TextFile;
n: integer;
begin
AssignPrn(Impresora); //Asigna el archivo de texto Impresora a la impresora por defecto
Rewrite(Impresora); //Abre el archivo para escribir, en este caso imprimir
for n:=0 to ListBox1.Items.Count -1 do //para cada item del ListBox
  WriteLn(Impresora, ListBox.Items[n]); //imprime la línea
CloseFile(Impresora); //Cierra el archivo
end;

Espero haber sido claro, y que funcione.

Saludos.


La franja horaria es GMT +2. Ahora son las 06:27:21.

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