Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Imprimir contenido TListBox (https://www.clubdelphi.com/foros/showthread.php?t=66085)

jandro 01-02-2010 14:53:31

Imprimir contenido TListBox
 
Hola a todos!!

Alguien conoce alguna funcion para poder imprimir el contenido de un ListBox??

Yo en este caso en particular tengo una lista de personas y su respectiva foto dentro del ListBox.

Gracias de antemano.
Saludos.

rgstuamigo 01-02-2010 15:52:14

Vaya..:eek: desconocia que en ListBox se pudiera poner Imagenes..humm :rolleyes:.
Bueno para poder imprimir el contenido de un ListBox, tienes muchas Opciones..entre las cuales te puedo mencionar:
1.-Mandar a imprimir directamente al puerto de la Impresora, esto requiere un poco de practica y la programcion es un poco tediosa.
2.- Utilizar algun reporteador (Quick Report,Rave Report, fast Report,etc,etc,) para mandar a Imprimir.
3.- Utilizar algun Componente de la VCL como mediador para imprimir.
4.- Otro.
Si utilizas la Primera Opcion puedes utilizar el Objeto Printer de la unidad Printers. aqui un codigo ejemplo:
Código Delphi [-]
Uses ...,...,...,Printers;//<--;)
...
...
...
procedure TForm1.Button2Click(Sender: TObject);
begin
 with Printer do
  begin
    BeginDoc;
    Canvas.TextRect(Rect(200,200,PageWidth-200,PageHeight-200),
                    200, 200, ListBox1.Items.Text);//Imprimo en esa cordenada
    EndDoc;
  end;
end;

Si eliges la segunda Opcion tendras que Hacerte un reporte utilizando los componentes y herramientas que tu reporteador te Brinda.;)

En el caso que elijas la tercera opcion que te estoy proponiendo, pues se me ocurre que utilizes el componente TRichEdit como mediador ya que posee un metodo para imprimir. Por ejemplo:
Código Delphi [-]
Uses ...,...,...,ComCtrls;//<--;)
...
... 
procedure TForm1.Button1Click(Sender: TObject);
var aux:TRichEdit;
begin
  aux:=TRichEdit.Create(Application);// creo un objeto TRichEdit
  aux.Parent:=Form1;//Pongo a Mi Formulario como padre del objeto Aux
  aux.Visible:=False;// Hago no visible al objeto Aux
  aux.Lines.Assign(ListBox1.Items);//Asigno los item que tengo en el ListBox al objeto Aux
  aux.Print('Mi Titulo de Impresion');//Mando a imprimir
  aux.Free;//Destruyo  y Libero el Objeto Aux.
end;
Espero te sea de utilidad.;)
Saludos...:)

delphi.com.ar 01-02-2010 17:00:54

Cita:

Empezado por rgstuamigo (Mensaje 352504)
1.-Mandar a imprimir directamente al puerto de la Impresora, esto requiere un poco de practica y la programcion es un poco tediosa.

Si tienes una impresora local, o mappeado el puerto de una impresora remota, y solo quieres imprimir texto sin formato, puedes hacer esto:
Código Delphi [-]
MiListBox.Items.SaveToFile('LPT1')


PD: Mil disculpas nuevamente al compañero rgstuamigo que le edité accidentalmente el post y volvió a escribirlo con lujo de detalles.

Saludos!

Neftali [Germán.Estévez] 01-02-2010 17:04:48

Cita:

Empezado por jandro (Mensaje 352497)
Yo en este caso en particular tengo una lista de personas y su respectiva foto dentro del ListBox.

A mi en particular tampoco me ha quedado claro cómo tienes la imagen dentro del ListBox.
¿Puedes explicarlo?
¿Se debe imprimir la foto además del texto? Varía la forma de hacerlo asi es así.

rgstuamigo 01-02-2010 17:08:05

Cita:

Empezado por delphi.com.ar (Mensaje 352519)
Si tienes una impresora local, o mappeado el puerto de una impresora remota, y solo quieres imprimir texto sin formato, puedes hacer esto:
Código Delphi [-]MiListBox.Items.SaveToFile('LPT1')

Saludos!

Interesante respuesta :eek:, pero tal parece que ami no me funciona :o, tengo una impresora local, pero al mandar a imprimir con el puerto LPT1, simplemente la aplicacion se congela y no hace nada.:o

delphi.com.ar 01-02-2010 19:35:16

Cita:

Empezado por rgstuamigo (Mensaje 352522)
Interesante respuesta :eek:, pero tal parece que ami no me funciona :o, tengo una impresora local, pero al mandar a imprimir con el puerto LPT1, simplemente la aplicacion se congela y no hace nada.:o

No comprendo porque no funciona, básicamente es lo mismo que imprimir en el puerto a la vieja usanza.

rgstuamigo 01-02-2010 19:38:28

Cita:

Empezado por delphi.com.ar (Mensaje 352540)
No comprendo porque no funciona, básicamente es lo mismo que imprimir en el puerto a la vieja usanza.

Pues lo he probado amigo Fede, pero no me imprime:o...Me gustaria saber si tú lo has probado y si te funciona.:rolleyes:.
Saludos...:)

delphi.com.ar 01-02-2010 21:07:20

Digamos.. no lo porbé en el momento que escribí el hilo, pero lo hice infinidad de veces!... En este momento no tengo una impresora física, pero "mappie" el "Microsoft XPS Document Writer" en LPT1 y funcionó sin problemas.

¿Que sistema operativo tienes instalado?

Prueba si te funciona desde la línea comandos:
Código:

dir > lpt1
Prueba alguno de estos ejemplos:
Imprimir un archivo de texto
Imprimir una Línea

Saludos!

rgstuamigo 01-02-2010 21:36:50

Pues te cuento amigo Fede que no me funciona ninguno de esos ejemplos..tal parece algo debo tener mal...como te dije anteriormente la aplicacion se congela e incluso desde la linea de Comando no me hace nada.
Cuando lo hago desde delphi ni si quiera se deja cerrar el formulario, tengo que ir al IDE y terminar la aplicacion Run>Program Reset :o y a veces me sale el siguiente error ---------------------------
Cita:

Project1
---------------------------
Insufficient memory for this operation.
---------------------------
Aceptar
---------------------------
Y tal parece que no se deja Resetear ni correr nuevamente pues me sale este otro error
Cita:

---------------------------
Error
---------------------------
Debugger fatal error during process reset:'Unable to terminate process:Acceso denegado'.Please save you work and
restart Delphi.
---------------------------
OK
---------------------------
Asi que ni modo..:o no me queda otra que reiniciar Delphi de nuevo.;)

Por si las dudas utilizo Windows XP Profesional con el Service Pack 2 y Delphi 7.;)

Talves alguien que tenga Delphi 7 y windows XP lo pueda probar y nos comenta.
No se si es sólo a mi a quien le pasa esto, por eso te pregunte si lo habias probado, es decir llevar de la teoria a la practica.;)
Saludos...:)

delphi.com.ar 01-02-2010 21:51:24

Cita:

Empezado por rgstuamigo (Mensaje 352561)
...incluso desde la linea de Comando no me hace nada....

Leyendo esto sacaría a Delphi de la disolución, estas seguro que en la configuración de la impresora tienes capturado el puerto LPT1 ?... de ser así buscaría algún problema por el lado de los controladores del dispositivo, o del mismo puerto.

rgstuamigo 01-02-2010 22:17:16

Cita:

Empezado por delphi.com.ar (Mensaje 352563)
Leyendo esto sacaría a Delphi de la disolución, estas seguro que en la configuración de la impresora tienes capturado el puerto LPT1 ?... de ser así buscaría algún problema por el lado de los controladores del dispositivo, o del mismo puerto.

Jee, jee..en realidad no tenia Capturado el puerto LPT1 ami impresora aunque ya tenia su puerto configurado era un puerto USB (virtual printer port for USB ;)) que supongo es el que se pone por defecto; lo he cambiado por el LPT1 para hacer la prueba, aunque la aplicacion ya no se congela, pues de todas formas igual no se puede imprimir, tal parece, como dices tú puede ser un problema de Driver.;).
Por si acaso mi Impresora es una Canon PIXMA IP1700.;)
Saludos...:)

ElKurgan 02-02-2010 12:56:53

Una solución consiste en redirigir la salida del puerto paralelo a la impresora usb. Eso se consigue con el comando NET USE (si tienes Windows XP o superior).

Por ejemplo, yo tengo en mi PC (denominado "CASA") la impresora CANON a la que he puesto en propiedades que es una impresora compartida llamada "MiCanon". La redirección se haría desde la línea de comandos con esta instruccíón:

C:\>net use LPT1 \\CASA\MiCanon

Por lo menos me funciona así
Un saludo

jandro 10-02-2010 20:59:04

Antes de nada, perdon por tardar tanto pero he estado fuera de casa todo este tiempo.

Para los que querian saber como metia imagenes en el ListBox aqui dejo la funcion del evento DrawItem del ListBox

procedure TfMain.MemoListadoDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
with (Control as TListBox) do begin
begin
MemoListado.Canvas.FillRect(Rect);
MemoListado.Canvas.TextOut(Rect.Left+ImageList1.Width+5,Rect.Top,Memo Listado.Items[Index]);
ImageList1.Draw(MemoListado.Canvas,Rect.Left,Rect.Top,Index);
end;
end;

Las imagenes la coge de un ImageList en BMP.

He probado varios metodos de impresion que aqui habeis puesto pero ninguna imprime las imagenes. Alguna idea de como hacerlo??

Gracias a todos de nuevo
Saludos.

P.D.: Alguien me puede decir como era para que el codigo saliera bonito?? :D


La franja horaria es GMT +2. Ahora son las 20:26:06.

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