Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Llamar procedimiento para impresion (https://www.clubdelphi.com/foros/showthread.php?t=74199)

leogobo 04-06-2011 23:23:54

Llamar procedimiento para impresion
 
Hola,

estoy llamando a un procedimiento para impresión pero al hacer esto no esta cambiando el tipo de letra ni el font. Este el el codigo resumido de lo que estoy haciendo:

Código Delphi [-]
 
Procedure imprimir;  
begin
form3.Canvas.Font.Color := clBlack;
form3.Canvas.Font.Size := 15;
Printer.Canvas.TextOut(250, 650, 'Destino: ');
end;

if printdialog1.Execute then
  begin
 with Printer do
  try
    Printer.BeginDoc;
            imprimir;
finally
  Printer.EndDoc;
  end;
end;

Cuando imprime 'Destino: ' no lo hace con el tamaño y letra que especifico. Que hago mal??

Gracias

ecfisa 04-06-2011 23:53:00

Hola.

Probá haciéndolo así:
Código Delphi [-]
...

uses Printers;

Procedure imprimir(Prn: TPrinter);
begin
  with Prn do
  begin
    BeginDoc;
    Canvas.Font.Color := clBlack;
    Canvas.Font.Size := 15;
    Canvas.TextOut(250, 650, 'Destino: ');
    EndDoc;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Printer: TPrinter;
begin
  if PrintDialog1.Execute then
  begin
    Printer:= TPrinter.Create;
    try
      imprimir(Printer);
    finally
      Printer.Free;
    end;
  end;
end;

Saludos.

leogobo 05-06-2011 19:21:45

Vale, si funciono, pero cuando quiero hacer varias immpresiones, al momento de dar clic por segunda vez en el boton de imprimir aparece el error "SIGSEGV".

ecfisa 05-06-2011 21:19:47

Hola leogobo.

Vas a tener que poner el el contéxto (código) donde se te presenta el error ya que si me limito al ejemplo no dá ningún error.
Hice con el mismo una prueba enviando más de diez veces consecutivas a imprimir sin problemas.


Saludos.

leogobo 05-06-2011 21:50:13

Bueno, en seguida pongo el codigo completo que estoy utilizando:

Código Delphi [-]
 
Procedure imprimir(Prn: TPrinter);
var

bmp : TBitmap;
begin

   with prn do
   begin
   BeginDoc;

   canvas.pen.Width:=15;
   canvas.Rectangle(40,40,3450,2430);

   Canvas.Font.Name := 'Arial';
   Canvas.Font.Color := clBlue;
   Canvas.Font.Size := 22;
   Canvas.TextOut(250, 250, 'CORRESPONDENCIA EL TIEMPO');

   Canvas.Font.Color := clBlack;
   Canvas.Font.Size := 15;
   Canvas.TextOut(250, 650, 'Destino: ' + form3.DataSource1.DataSet.FieldByName('Ciudad Destino').AsString);

  Canvas.TextOut(250, 850, 'Direccion: ' + form3.DataSource1.DataSet.FieldByName('Ruta').AsString);

   Canvas.TextOut(250, 1050, 'Destinatario: ' +form3.DataSource1.DataSet.FieldByName('Nombre Destinatario').AsString);

 
   Canvas.TextOut(250, 1550, 'Remitente: ' + form3.DataSource1.DataSet.FieldByName('Nombre Remitente').AsString);

 
   Canvas.TextOut(250, 1750, 'Fecha envio: ' + form3.DataSource1.DataSet.FieldByName('Fecha').AsString);

 
    Canvas.Font.Size := 30;
    Canvas.Font.Name := 'Code128bWin';
    Printer.Canvas.TextOut(2400, 2000,form3.DataSource1.DataSet.FieldByName('id').AsString);
 
   newpage;
   EndDoc;
  end;
end; 

procedure TForm3.Button1Click(Sender: TObject);

begin
   u:=1;
  If MessageDlg ('Desea imprimir la etiqueta para esta entrada?', mtConfirmation ,[mbyes,mbno],0) = mrYes Then
    begin
    if printdialog1.Execute then
     begin
         dbf2.Last;
       try

      while u <= StrToInt(contregedit.Text) do
       begin
        imprimir(Printer);
        u:=u+1;
      end;
     finally
  Printer.Free;
  end;
 end;
end;
end;

tambien tengo el problema que necesito imprimir varias paginas en el mismo documento, pero ya que enddoc; esta en el procedimiento solo se imprime de a una.

Mi intecion es que pueda utilizar el codigo del procedimiento en varias partes del programa sin tener que escribirlo de nuevo.

leogobo 06-06-2011 02:18:49

Hola,

estaba cometiendo un error muy bobo, ya todo marcha bien.

Gracias

vitadiaz 06-06-2011 03:44:13

deberias esclarecer dandonos la solucion a este tema
 
Si solucionaste el problema
Deberias incorporar la solucion
Dado que puede que alguien reutilice el codigo deberias indicarnos cual fue la solucion a tu problema y asi potenciar este hilo proveyendo la solucion definitiva al tema
Salu2
Pd. es una cuestion de etica y salubridad informatica

leogobo 08-06-2011 04:46:56

Bueno, pues el error básicamente era que si se observa en cada ciclo del while se llama al procedimiento "imprimir;", y ya que en este ciclo esta begindoc y enddoc, pues cada vez que entra en el, crea un nuevo documento, osea una por cada pagina.

Muchas gracias


La franja horaria es GMT +2. Ahora son las 10:50:04.

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