PDA

Ver la Versión Completa : ¿Como imprimir con el canvas ?


judoboy
14-05-2003, 14:17:36
Hola como imprimir con el canvas un componente que tengo es el
TPlannerCalendarGroup de TMS, tiene los procedimientos:


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


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
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.
SetMapMode(Printer.Handle,MM_LOMETRIC);
begindoc;

//lo que se imprime

enddoc; en el caso de que trabajemos en mm