Ver Mensaje Individual
  #1  
Antiguo 19-03-2013
darkamerico darkamerico is offline
Miembro
 
Registrado: dic 2010
Posts: 235
Reputación: 14
darkamerico Va por buen camino
Smile Rutina de Impresion TRichEdit

Saludos amigos, estoy intentando acoplar una rutina de impresion a los documentos de mi sistema de Control Documentario, al presionar el boton Imprimir aparece una ventana donde el usuario fija los margenes en cm y el numero de copias, luego finalmente un boton Listo con el siguiente codigo:

Código Delphi [-]
procedure TForm5.PrintRichEdit(Rich: TRxRichEdit; LMargin, RMargin, TMargin, BMargin: real;
  Copies: integer; JobTitle: string);
var
  Loff, TOff, ROff, BOff   : integer;
  XRes, YRes, XOffs, YOffs : integer;
  R: TRect;
begin
  // Set the margins
   { set your needed values in milimeters }
  LOff := Trunc(StrToFloat(txtMIzq.Text)*10);
  TOff := Trunc(StrToFloat(txtMSup.Text)*10);
  ROff := Trunc(StrToFloat(txtMDer.Text)*10);
  BOff := Trunc(StrToFloat(txtMInf.Text)*10);
  { Get printer data }
  XOffs := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX ); { minimum Left offset }
  YOffs := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY ); { minimum Top offset }
  XRes := GetDeviceCaps(Printer.Handle, LOGPIXELSX); { points per inch in X }
  YRes := GetDeviceCaps(Printer.Handle, LOGPIXELSY); { points per inch in Y }
  {Change Your values to printer Units }
  LOff := Round(LOff*XRes/25.4)-XOffs; { of course You can't set margins less than min offset !!! }
  TOff := Round(TOff*YRes/25.4)-YOffs; { of course You can't set margins less than min offset !!! }
  ROff := 2490-Round(ROff*XRes/25.4)-XOffs; { changing to width, not offset !!!}
  BOff := 3510-Round(BOff*YRes/25.4)-YOffs; { changing to height, not offset !!!}

  Rich.PageRect := Rect( LOff, TOff, ROff, BOff );
  // Print the desired number of copies
  while Copies > 0 do begin
    Application.ProcessMessages;
    Rich.Print(JobTitle);
    Dec(Copies);
  end;
end;

El evento click del boton que llama a la funcion anterior es:

Código Delphi [-]
procedure TForm5.Button1Click(Sender: TObject);
begin
  PrintRichEdit(form2.docView, StrToFloat(txtMIzq.Text), StrToFloat(txtMDer.Text), StrToFloat(txtMSup.Text), StrToFloat(txtMInf.Text), cboNumCopias.Value, form2.DBMemo1.Text);
end;


La idea es imprimir solo documentos de 1 pagina en formato A4, pero esta rutina me imprime pequeñas pociones del documento, y las saca en 4 paginas, al parecer los margenes no cuadran, requiero de su ayuda amigos para ver este caso.

Gracias

Americo
Responder Con Cita