Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-06-2011
leogobo leogobo is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 49
Poder: 0
leogobo Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 04-06-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 04-06-2011 a las 23:58:46.
Responder Con Cita
  #3  
Antiguo 05-06-2011
leogobo leogobo is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 49
Poder: 0
leogobo Va por buen camino
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".
Responder Con Cita
  #4  
Antiguo 05-06-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 05-06-2011
leogobo leogobo is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 49
Poder: 0
leogobo Va por buen camino
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.

Última edición por leogobo fecha: 05-06-2011 a las 21:53:40.
Responder Con Cita
  #6  
Antiguo 06-06-2011
leogobo leogobo is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 49
Poder: 0
leogobo Va por buen camino
Hola,

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

Gracias
Responder Con Cita
  #7  
Antiguo 06-06-2011
vitadiaz vitadiaz is offline
Registrado
NULL
 
Registrado: ene 2011
Posts: 3
Poder: 0
vitadiaz Va por buen camino
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
Responder Con Cita
  #8  
Antiguo 08-06-2011
leogobo leogobo is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 49
Poder: 0
leogobo Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
LLamar procedimiento de creación de Objetos. Robin1 Varios 3 30-11-2009 14:04:54
Procedimiento para llamar formas Luis OOP 7 11-03-2005 14:29:43
Ayuda, como llamar a un procedimiento desde otro procedimiento? Ariatna Varios 1 01-02-2005 04:05:35
ayuda al llamar un procedimiento... ronimaxh Firebird e Interbase 8 27-04-2004 01:53:33
llamar procedimiento cmgenny Varios 2 12-08-2003 00:28:13


La franja horaria es GMT +2. Ahora son las 23:44:38.


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
Copyright 1996-2007 Club Delphi