Ver Mensaje Individual
  #1  
Antiguo 10-10-2006
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Reputación: 24
ixMike Va por buen camino
Red face Imprimir texto de un TMemo

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:

Código Delphi [-]
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.
Responder Con Cita