PDA

Ver la Versión Completa : Imprimir texto de un TMemo


ixMike
10-10-2006, 20:19:02
Hola a todos,

veréis, me gustaría saber cómo completar un código (puesto más abajo) que tengo que sirve para imprimir el texto de un TMemo. Respeta saltos de línea, cambios de página y fuente (bueno, debería ser así, porque tengo la impresora estropeada y no he podido probarlo). En realidad es una modificación de un código que encontré bastante más sencillo.
El código es un método que le he implementado al un nuevo componente, derivado de TMemo, y lo uso en un programa que muestra un diálogo para elegir impresora.
Me gustaría que tuviera las siguientes características:
- Que tenga ajuste de línea.
- Que se imprima en la impresora que elija (si en el ordenador hay más de una).
- Que se impriman tantas copias como se indiquen.
- Que se imprima en el tamaño de papel que se elija.

No sé si necesito algo más, pero en principio con eso me conformo.

He buscado en los foros, pero no he encontrado nada que me sirva. No me interesa usar QuickReport. Utilizo Delphi 3 Standard.

¿Alguna segerencia?

Este es el código:


Procedure TNewMemo.Print(Title: string);
var
Impresora: TextFile;
n: Integer;
L: string;
begin
If Lines.Count>0 then
begin
AssignPrn(Impresora);
ReWrite(Impresora);
Printer.BeginDoc;
Printer.Title:=Title;
with Printer.Canvas.Font do
begin
Name:=Font.Name;
Size:=Font.Size;
Style:=Font.Style;
Color:=Font.Color;
end;
Printer.Canvas.Pen.Color:=Font.Color;
Printer.Canvas.Brush.Color:=Color; //No se si poner esta línea
L:='';
For N:=1 to Length(Text)do
begin
If Text[n]=CR then
begin
WriteLn(Impresora,L);
L:='';
end else
If Text[n]=PG then
begin
WriteLn(Impresora, L);
L:='';
Printer.NewPage;
end else
If Text[n]<>LF then L:=L+Text[n];
end;
Printer.EndDoc;
CloseFile(Impresora);
end;
end;


Lo que hace es ir caracter por caracter de la propiedad Text del TNewMemo. Si encuentra un CR (#13) imprime la línea, si encuentra un PG (#12, cambio de página) llama a Printer.NewPage, y si el caracter no es LF (#10) pues se lo añade a la cadena a imprimir cuando encuentre otro CR.

Gracias por vuestro interés.