Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   ¿Como imprimir con el canvas ? (https://www.clubdelphi.com/foros/showthread.php?t=422)

judoboy 14-05-2003 14:17:36

¿Como imprimir con el canvas ?
 
Hola como imprimir con el canvas un componente que tengo es el
TPlannerCalendarGroup de TMS, tiene los procedimientos:

Código:

PaintTo(Canvas:TCanvas;X:integer;Y:integer);
No sé si alguno utilizareis este componente,o algo parecido.

__cadetill 14-05-2003 15:55:00

Hola

pues acabo de hacer esta prueba y me ha funcionado

Código:


procedure TForm1.Button1Click(Sender: TObject);
begin
    Printer.BeginDoc; // INICIO UN NUEVO DOCUMENTO
    With Printer.canvas do //CON EL OBJETO PRINTER.CANVAS HAGO LO SIGUIENTE
      Begin
          //TITULO QUE APARECE EN LA COLA DE IMPRESION
          Printer.Title := 'El titulo del documento que quiero';
          Font.Name := 'MS Sans Serif'; //ASIGNO UN TIPO DE LETRA
          Font.Color := ClBlack; //LE ASIGNO UN COLOR A LA LETRA
          Pen.Color := ClBlack; //COLOR DE LA LINE DE LOS RECUADROS
          Font.Size := 12; //TAMAÑO DE LA LETRA
          Font.Name := 'Times New Roman';
          Font.Size := 12;

          PlannerCalendarGroup1.PaintTo(printer.Canvas, 10, 10);

          // imprimimos ListView
      end;
    Printer.EndDoc;
end;

Solo que he tenido un pequeño problema, me ha salido mu pequeñito. Tampoco lo he probado mucho, pero a ver si te sirve ;)

SnaKe 14-05-2003 16:43:33

Hola,

El código de kdtill es totalmente correcto, y ocurre lo que él ya comenta, sale muy pequeño. A mi se me ha ocurrido otra cosilla que puede solucionarte el problema.

En lugar de pintar sobre el canvas de la impresora, pon un objeto TImage en tu formulario y hazlo invisible o bien crealo en tiempo de ejecución y cuando le den al botón pinta sobre el canvas del TImage, algo así:

PlannerCalendarGroup1.PaintTo(Image1.Canvas,0,0);

Luego te creas un QuickReport, pones una banda Title y en ella un control TQRImage con el tamaño que quieras que salga por la impresora y la propiedad Stretch a True, en el click de tu botón imprimir calendario el código quedaría más o menos de la siguiente forma:

begin
PlannerCalendarGroup1.PaintTo(Image1.Canvas,0,0);
FQuickReport1.QrImage1.Picture.Assign (Image1.Picture);
FQuickReport1.QuickRep1.Preview; // O .Print como prefieras
end

De esta forma te aseguras que sale del tamaño que tú quieras.

Un saludo.

judoboy 15-05-2003 09:12:09

Gracias a los dos por responder.

Cadetill: la impresión se me realiza bien, pero vamos necesito microscopio para verlo:D . Si conoces alguna forma de hacerlo más grande me lo dices Ok.

Snake: Con tu forma creo el QuickReport y lo visualizo correctamente. Pero a la hora de imprimirlo, donde deberia estar el calendario sale todo negro,negro, pero muy negro:eek:

SnaKe 16-05-2003 08:53:17

Hola,

Pues es extraño que te salga todo negro, yo lo he probado y me funciona perfectamente, comprueba que lo has hecho todo bien, puedes hacer una prueba a ver si se te está copiando bien en el control TImage poniendo visible a True temporalmente, luego haz un .Preview del QuickReport a ver si se ve bien en el preliminar. En caso de que se vea correctamente en los dos sitios debes tener un problema al imprimir gráficos.

No se me ocurre otra cosa.

Un saludo.

judoboy 16-05-2003 09:32:36

Pues en el TImage no se me visualiza, pero en el QReport, si. Porque puede ser?

SnaKe 16-05-2003 09:47:00

Ahora, si que me has descolocado... eso si que no lo comprendo, ¿seguro que estás pintando el PlannerCalendarGroup sobre el canvas del TImage y no sobre el canvas del TQRImage y luego haciendo el Assign?, de todas formas si en la previsualización del report ves la imagen correctamente al darle a imprimir el report desde el preview se debería imprimir correctamente.

Un saludo.

emenchi34 16-09-2006 16:27:22

escalar impresion
 
El problema de la letra chiquita esta q cuando empiezan lo q quieren imprimir no declaran el sistema de medicion q van a usar, osea que en algunas impresoras van a imprimir chiquito como en otras pueden imprimir en cualquiier lado.
Código:

SetMapMode(Printer.Handle,MM_LOMETRIC);
begindoc;

//lo que se imprime

enddoc;

en el caso de que trabajemos en mm


La franja horaria es GMT +2. Ahora son las 10:37:33.

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