Club Delphi  
    Paypal   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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-10-2013
Avatar de Dexter182
Dexter182 Dexter182 is offline
Miembro
 
Registrado: jul 2005
Ubicación: Argentina
Posts: 95
Poder: 22
Dexter182 Va por buen camino
¡Muchas gracias ecfisa por contestar!

Reconozco que no me expliqué bien.
Voy a intentar explicarlo con un ejemplo:
Supongamos que el StringGrid tiene 40 filas.
Al darle imprimir, el procedimiento Imprimir verificará en la impresora predeterminada que tamaño de hoja tiene definido y en base a eso calculará cuantas hojas necesitará y actualizará las opciones correspondientes en el PrintDialog (propiedades FromPage, MinPage, ToPage y MaxPage).
Supongamos que la impresora predeterminada tiene definido una A4 y la otra impresora tiene una hoja más pequeña. En una A4 las 40 filas entrarían sin problemas; en cambio en la otra hoja me llevaría dos páginas.
La idea sería que si en el PrintDialog elijo la otra impresora, el procedimiento vuelva a hacer los cálculos y actualice las opciones en el PrintDialog automáticamente (al ser una hoja más chica deberían cambiar MaxPage y ToPage).
Digamos, se como cambiar esas propiedades antes de que aparezca el diálogo, pero no como hacerlo en "vivo y en directo".

Espero que se entienda.

Muchas gracias de nuevo!

Saludos!
Responder Con Cita
  #2  
Antiguo 01-11-2013
Avatar de Dexter182
Dexter182 Dexter182 is offline
Miembro
 
Registrado: jul 2005
Ubicación: Argentina
Posts: 95
Poder: 22
Dexter182 Va por buen camino
Ahora también descubrí otro error...

Si mando a imprimir lo mismo varias veces, el valor de las variables AltRenglon y CantRenglon difiere de la primera vez que mando a imprimir al de todas las posteriores.
Cada vez entiendo menos.

He estado mirando ejemplos en Internet y todos se parecen a mi procedimiento.
No entiendo en que estoy fallando...

Saludos!
Responder Con Cita
  #3  
Antiguo 01-11-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 Dexter182.

Creo que el problema radica en que llamas al TPrintDialog después de haber asignado valores de la impresora asignada. Ejemplo:
Código Delphi [-]
...
AltRenglon   := Printer.Canvas.TextHeight('H') + (Printer.Canvas.TextHeight('H') * 0.2);
...
 If PrintDialog.Execute then begin

      //Define desde que página comenzará la impresión
...

Te pongo este código (el tuyo con algunos cambios) para que lo pruebes:
Código Delphi [-]
procedure TForm1.Imprimir(PD: TPrintDialog; SG: TStringGrid; ED: TEdit);
var
  AltRenglon: Single;
  CantRenglon,Paginas, Fila, i, Y: Integer;
begin
  with Printer do
  begin
    AltRenglon  := Canvas.TextHeight('H') + (Canvas.TextHeight('H') * 0.2);
    CantRenglon := Round(PageHeight / AltRenglon) - 7;
    if SG.RowCount - 1 > CantRenglon then
      Paginas := Ceil((SG.RowCount - 1) / CantRenglon)
    else
      Paginas := 1;

    if PD.FromPage <= 1 then
      Fila := 1
    else
     Fila := ((PD.FromPage - 1) * CantRenglon) + 1;
    BeginDoc;
    try
      while Fila < SG.RowCount do
      begin
        Canvas.Font.Name  := 'Arial';
        Canvas.Font.Size  := 10;
        Canvas.Font.Style := [fsBold, fsUnderline];
        Canvas.TextOut(80,   Round(AltRenglon * 2), 'Descripción');
        Canvas.TextOut(Round(PageWidth * 0.68) - Canvas.TextWidth('Cant.'),
          Round(AltRenglon * 2), 'Cantidad');
        Canvas.TextOut(Round(PageWidth * 0.83) - Canvas.TextWidth('Precio'),
          Round(AltRenglon * 2), 'Precio');
        Canvas.TextOut(PageWidth - 80 - Canvas.TextWidth('Subtotal'),
          Round(AltRenglon * 2), 'Subtotal');
        Canvas.MoveTo(0, Round(AltRenglon * 2.5));
        Canvas.Font.Style := [];
        for i := 1 to CantRenglon do
        begin
          Y :=  Canvas.PenPos.Y + Round(AltRenglon);
          Canvas.TextOut(80, Y, SG.Cells[1, Fila]);
          Canvas.TextOut(Round(PageWidth * 0.68) - Canvas.TextWidth(SG.Cells[2,Fila]),
            Y, SG.Cells[2,Fila]);
          Canvas.TextOut(Round(PageWidth * 0.83) - Canvas.TextWidth(SG.Cells[3,Fila]),
            Y, SG.Cells[3,Fila]);
          Canvas.TextOut(PageWidth - 84 - Canvas.TextWidth(SG.Cells[4,Fila]),
            Y, SG.Cells[4,Fila]);
          Fila := Fila + 1;
        end;
        Canvas.Font.Style := [fsBold];
        Canvas.TextOut(80, PageHeight - Round(AltRenglon * 2 ),
          'Hoja Nº ' + IntToStr(PageNumber));
        Canvas.Font.Size  := 14;
        Canvas.TextOut(PageWidth - 80 - Canvas.TextWidth('TOTAL: ' + ED.Text),
          PageHeight - Round(AltRenglon * 2 ), 'TOTAL: '+ED.Text);
        if PageNumber < Paginas then
          NewPage;
      end;
    finally
      EndDoc;
    end;
  end;
end;

Llamada de prueba:
Código Delphi [-]
procedure TForm1.btnImprimirClick(Sender: TObject);
begin
  if PrintDialog1.Execute then
    Imprimir(PrintDialog1, StringGrid1, Edit1);
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 01-11-2013
Avatar de Dexter182
Dexter182 Dexter182 is offline
Miembro
 
Registrado: jul 2005
Ubicación: Argentina
Posts: 95
Poder: 22
Dexter182 Va por buen camino
¡Muchas gracias por contestar!

Cita:
Empezado por ecfisa Ver Mensaje
Creo que el problema radica en que llamas al TPrintDialog después de haber asignado valores de la impresora asignada.
Nop, no hay caso...

Te comparto unas pruebas de impresión para que veas lo que me hace:
https://www.dropbox.com/sh/b6kga2ki9ys5uey/3E3aklMxCQ

Siempre me sigue tomando la impresora predeterminada para calcular el tamaño de hoja.
Igual lo que más me está preocupando ahora es que la primera impresión hace una cosa y todas las siguientes son idénticas, pero diferentes a la primera.
Sinceramente ya no se que hacer.

Por si sirve de algo, estoy usando Delphi 7 en Windows XP.

Agradezco enormemente tu tiempo.

Saludos y gracias!
Responder Con Cita
  #5  
Antiguo 02-11-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 Dexter182.

No sé que puede estar sucediendo... En mis pruebas luego de seleccionar el tamaño de hoja en el PrintDialog, queda determinado el alto y ancho correspondiente. Las pruebas las hice sobre Delphi 7, Windows 8 y PDFCreator.

¿ Has probado de visualizar los valores de alto y ancho luego de haber seleccionado el tipo de página ?, algo como:
Código Delphi [-]
   if PrintDialog1.Execute then
     with Printer do
      ListBox1.Items.Add(Format('Height: %d, Width: %d',[PageHeight,PageWidth]));
de ese modo podrías comprobar si el cambio del tamaño del papel que haces en opciones avanzadas queda asentado, en mi caso sí lo hace.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 04-11-2013
Avatar de Dexter182
Dexter182 Dexter182 is offline
Miembro
 
Registrado: jul 2005
Ubicación: Argentina
Posts: 95
Poder: 22
Dexter182 Va por buen camino
¡Gracias nuevamente ecfisa por responder!

Cita:
Empezado por ecfisa Ver Mensaje
En mis pruebas luego de seleccionar el tamaño de hoja en el PrintDialog, queda determinado el alto y ancho correspondiente.
Ah, OK. Ahí probé y de esa manera si lo hace.
Es decir, si elijo la otra impresora y luego defino el tamaño de hoja desde las propiedades, si me toma los cambios (me armé un "ShowMessage" para ir viendo los valores de PageHeight y PageWidth).
Ahora, si solo elijo la impresora desde el PrintDialog pero no voy a Propiedades a definir la hoja, sigue tomando los valores de hoja definidos en la impresora predeterminada.

Y lo que más me está haciendo renegar es que la primera impresión es diferente a todas las posteriores (en la primera impresión calcula mal la cantidad de renglones por hoja, no se por qué. Eso se aprecia en los archivos que subí a DropBox).

Mis pruebas las hago sobre una HP LaserJet M1132 y una impresora de PDF llamada doPDF.

Te agradezco enormemente la ayuda que me estás brindando.

Saludos!
Responder Con Cita
  #7  
Antiguo 05-11-2013
Avatar de Dexter182
Dexter182 Dexter182 is offline
Miembro
 
Registrado: jul 2005
Ubicación: Argentina
Posts: 95
Poder: 22
Dexter182 Va por buen camino
Cita:
Empezado por Dexter182 Ver Mensaje
Y lo que más me está haciendo renegar es que la primera impresión es diferente a todas las posteriores (en la primera impresión calcula mal la cantidad de renglones por hoja, no se por qué).
¡¡¡Logré resolver eso al menos!!!

Cambié esto:
Código Delphi [-]
Printer.Canvas.Font.Name := 'Arial';
Printer.Canvas.Font.Size := 10;
//Altura en pixeles de cada renglón
AltRenglon   := Printer.Canvas.TextHeight('H') + (Printer.Canvas.TextHeight('H') * 0.2);

Por esto:
Código Delphi [-]
//Altura en pixeles de cada renglón
AltRenglon  := AltText + (AltText * 0.2);

AltText es una constante que la definí en 48.

Saludos!
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
Imprimiendo labels y facturas principiante22 Varios 6 12-11-2008 21:27:31
Problemas imprimiendo informes.. Paradiso Varios 7 07-03-2008 18:56:57
Mensaje Imprimiendo En Crystal JULIOCTORRESG Internet 0 06-03-2007 20:49:43
Problema imprimiendo con QuickReport 3.0 gamez2809 Impresión 2 22-02-2007 11:21:05
Imprimiendo un listbox....... Rafe Impresión 1 09-08-2005 02:42:04


La franja horaria es GMT +2. Ahora son las 23:06:29.


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