Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Imprimir texto de un TMemo (https://www.clubdelphi.com/foros/showthread.php?t=36387)

ixMike 10-10-2006 19:19:02

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.


La franja horaria es GMT +2. Ahora son las 17:38:32.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi