Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-12-2011
lucas05 lucas05 is offline
Miembro
 
Registrado: ago 2010
Posts: 116
Poder: 14
lucas05 Va por buen camino
Imprimir directamente

Hola, como puedo hacer para imprimir enviando los datos directamente a la impresora.
Quiero que el usuario presione un button e imprima los datos de una tabla temporal ClientDataSet1, y también el contenido de EDit1, Edit2 (los edits tienen datos que son ingresados por el usuario).

Muchas Gracias.
Responder Con Cita
  #2  
Antiguo 05-12-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
Cita:
Empezado por lucas05 Ver Mensaje
Hola, como puedo hacer para imprimir enviando los datos directamente a la impresora.
Quiero que el usuario presione un button e imprima los datos de una tabla temporal ClientDataSet1, y también el contenido de EDit1, Edit2 (los edits tienen datos que son ingresados por el usuario).
Hola lucas.

Un ejemplo:
Código Delphi [-]
...
uses Printers;

procedure TForm1.btnImprimirClick(Sender: TObject);
var
  i,x,y: Integer;
  s: string;
begin
  with TPrinter.Create do
  try
    i:= 1;
    BeginDoc;
    x := Printer.PageWidth div 15;
    y := Printer.PageHeight div 50;
    Canvas.Font.Name:= 'Times new Roman';
    Canvas.Font.Color:= clBlack;
    Canvas.Font.Height:= Printer.PageHeight div 100;
    ClientDataSet.First;
    while not ClientDataSet.Eof do
    begin
      s:= ClientDataSet.FieldByName('Campo1').AsString +' '+
          ClientDataSet.FieldByName('Campo2').AsString +' '+
          //...
          ClientDataSet.FieldByName('CampoN').AsString;
      Canvas.TextOut(x, i*y , s);
      ClientDataSet.Next;
      Inc(i);
    end;
    Canvas.TextOut(x, i*y, Edit1.Text);
    Inc(i);
    Canvas.TextOut(x, i*y, Edit2.Text);
    EndDoc;
  finally
    Free;
  end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 05-12-2011
lucas05 lucas05 is offline
Miembro
 
Registrado: ago 2010
Posts: 116
Poder: 14
lucas05 Va por buen camino
Hola ecfisa, muchas gracias por tu ayuda, tu código funciona bien.
Quisiera mejorarlo un poco mas, para que se vea mejor.
Te explico que quiero hacer:
1) Agrandar un poco mas el tamaño de la impresión.
2) Imprimir el edit2 a la derecha del edit1 (o sea uno a la par del otro, pero separados por una pequeña distancia)
3) Poner una mensaje estático (como el QRLabel del QReport) a la izquierda de cada edit

Espero que puedas ayudarme. Desde ya Muchas Gracias.
Responder Con Cita
  #4  
Antiguo 05-12-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 Lucas.

Código Delphi [-]
uses Printers;

procedure TForm1.Button1Click(Sender: TObject);
var
  i,x,y: Integer;
  s: string;
begin
  with TPrinter.Create do
  try
    i:= 1;
    BeginDoc;
    x := Printer.PageWidth div 15;
    y := Printer.PageHeight div 50;
    Canvas.Font.Name:= 'Times new Roman';
    Canvas.Font.Color:= clBlack;
    Canvas.Font.Height:= Printer.PageHeight div 60; // Aumentar tamaño del font
    ClientDataSet.First;
    while not ClientDataSet.Eof do
    begin
      s:= ClientDataSet.FieldByName('Campo1').AsString +' '+
          ClientDataSet.FieldByName('Campo2').AsString +' '+
          //...
          ClientDataSet.FieldByName('CampoN').AsString;
      Canvas.TextOut(x, i*y , s);
      ClientDataSet.Next;
      Inc(i);
    end;
    s:= 'ETIQUETA1: '+Edit1.Text+'     ETIQUETA2: '+Edit2.Text; //2 edits en 1 linea, separados y c/u precedido por una etiqueta
    Canvas.TextOut(x, i*y, s);
    EndDoc;
  finally
    Free;
  end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 06-12-2011
lucas05 lucas05 is offline
Miembro
 
Registrado: ago 2010
Posts: 116
Poder: 14
lucas05 Va por buen camino
Hola ecfisa, muchas gracias por tu ayuda, esta siendo muy útil.
Trate de agregarle mas cosas pero tuve algunos problemas:
1) Intente imprimir un titulo en el documento, pero no lo imprime, este es el código que utilice.
Código Delphi [-]
Printer.Title:='El titulo del documento';
2) Intente imprimir el contenido de dos label antes ClientDataSet,y tampoco lo imprime.
Código Delphi [-]
s:= 'Fecha: '+Label10.Caption+'     Nº: '+Label11.Caption;
    Canvas.TextOut(x, i*y, s);
3) Cuando imprimo el contenido del Edit3, este se imprime a la izquierda de la hoja, como puedo hacer para que salga un poco mas a la derecha de la hoja.

Muchas Gracias.
Responder Con Cita
  #6  
Antiguo 06-12-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 Lucas.

1) y 2):
Código Delphi [-]
  ...
    Canvas.Font.Color:= clBlack;
    Canvas.Font.Height:= Printer.PageHeight div 60; // Aumentar tamaño del font
    s:= 'El titulo del documento';
    Canvas.TextOut((Printer.PageWidth-Canvas.TextWidth(s)) div 2, i*y, s );  // Título centrado
    Inc(i);
    s:= 'Fecha: '+Label10.Caption+'     Nº: '+Label11.Caption;
    Canvas.TextOut(x, i*y, s);
    Inc(i);
    ClientDataSet.First;
    while not ClientDataSet.Eof do
    ...

3) No sé si se me está escapando... Pero no veo al Edit3 ni donde debería imprimirse


Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 06-12-2011
lucas05 lucas05 is offline
Miembro
 
Registrado: ago 2010
Posts: 116
Poder: 14
lucas05 Va por buen camino
Hola, las modificaciones funcionan bien.
El edit3 debe imprimirse despues del ClientDataSet.
Código Delphi [-]
Canvas.TextOut(x, i*y,'Total: '+Edit3.Text);
Inc(i);
.
Como puedo dejar mas espacio entre las lineas, para que no se imprima todo junto.
Esta es la idea, imprimir el titulo del documento (dejar un espacio), luego imprimir los labels (dejar un espacio), imprimir el clientdataset (dejar un espacio) y por ultimo el edit3 (quiero que se imprima mas a la derecha de la hoja, debajo de la ultima columna del clientdataset).

Gracias.
Responder Con Cita
  #8  
Antiguo 06-12-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 Lucas.

A ver si de este modo te resulta más sencillo:
Código Delphi [-]
...
uses Printers;

function LinesDown(ACanvas: TCanvas; const Lineas: Integer): Integer;
begin
  ACanvas.TextOut(Printer.PageWidth div 15, Lineas*Printer.PageHeight div 50,'');
  Result:= Lineas
end;

procedure PrintLineAt(ACanvas:TCanvas; const X: Integer; var Y: Integer;
  const Str: string);
begin
  ACanvas.TextOut(ACanvas.TextWidth('O')*X, Y* Printer.PageHeight div 50, Str);
  Inc(Y)
end;

procedure PrintLine(ACanvas: TCanvas; const X:Integer; var Y: Integer;
  const Str: string);
begin
  Acanvas.TextOut(X, Y * Printer.PageHeight div 50, Str);
  Inc(Y)
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  x, y: Integer;
  nLin: Integer;
  s: string;
begin
  with TPrinter.Create do
  try
    x := Printer.PageWidth div 15;
    y := Printer.PageHeight div 50;
    nLin:= 1;
    BeginDoc;
    Canvas.Font.Name:= 'Times new Roman';
    Canvas.Font.Color:= clBlack;
    Canvas.Font.Height:= Printer.PageHeight div 60;
    PrintLine(Canvas,(Printer.PageWidth-Canvas.TextWidth(s)) div 2, nLin, 'El titulo del documento');
    nLin:= LinesDown(Canvas, 3); // TRES LINEAS ABAJO
    PrintLine(Canvas, x, nLin, 'Fecha: '+Label10.Caption+'     Nº: '+  Label11.Caption);
    ClientDataSet.First;
    while not ClientDataSet.Eof do
    begin
      s:= ClientDataSet.FieldByName('Name').AsString +' '+
          ClientDataSet.FieldByName('Capital').AsString;
      PrintLine(Canvas,Printer.PageWidth div 15, nLin, s);
      ClientDataSet.Next;
    end;
    PrintLineAt(Canvas, 10, nLin, 'Total: '+ Edit3.Text);  // 10 A LA DERECHA
    PrintLine(Canvas, x, nLin,'ETIQUETA1: ' + Edit1.Text + '  ETIQUETA2: ' + Edit2.Text);
    EndDoc;
  finally
    Free;
  end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Imprimir directamente con fastReport 4 David Impresión 1 17-04-2009 15:34:15
Imprimir directamente a un puerto COM krlosrp Varios 1 20-08-2007 19:07:55
Imprimir directamente en LPT1 con VB.net cocomo .NET 1 27-05-2007 23:09:24
Imprimir directamente Alexander Impresión 5 07-07-2006 06:31:26
Imprimir directamente en Rave5? danytorres Impresión 1 08-10-2003 00:41:28


La franja horaria es GMT +2. Ahora son las 08:26:59.


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