Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Imprimir Canvas en un TCustomControl (https://www.clubdelphi.com/foros/showthread.php?t=76607)

salvica 12-11-2011 22:50:55

Imprimir Canvas en un TCustomControl
 
Hola a todos, de nuevo por estos lares :D

He hecho un componente a partir de un TCustomControl, que me dibuja una gráfica en un Canvas mayor que la ventana (1650 x 389)

El problema viene cuando intento imprimirlo, ya que solo soy capaz de imprimir la parte visible.
  1. He intentado copiar el Canvas a un TBitmap y solo copio la parte visible :mad:
  2. He intentado asignar el canvas a un TImage o TBitmap, pero me da el error "Cannot assign TControl.Canvas to a TBitMap.Canvas" :mad:
  3. He intentado dibujar la gráfica directamente en el Canvas de un TImage o TBitmap, pero no me muestra nada (solo un area gris) :mad:
  4. He intentado derivar el componente de un TImage o TBitmap, pero sigo sin ver nada :mad:
¿Podeis decirme como se hace?
El código de impresión (que solo copia la parte visible)
Código Delphi [-]
procedure TBanda.ImprimirBanda;
var
  Bitmap     : TBitmap;
  AreaBitmap : TRect;
begin
  AreaBitmap := FAreaBanda;
  Bitmap     := TBitmap.Create;
  try
    Bitmap.Height := FAreaBanda.Bottom;
    Bitmap.Width  := FAreaBanda.Right;
    Bitmap.Canvas.CopyRect(FAreaBanda, Canvas, FAreaBanda);
    PrintScaled(Bitmap); <---- esto imprime el bitmap en el canvas de la impresora
  finally
    Bitmap.Free;
  end;
end;
Saludos
salvica

salvica 14-11-2011 14:36:36

Bueno, pues me respondo
 
He pasado los métodos del Paint a un procedimiento DibujarBanda, con lo que queda así:
Código Delphi [-]
procedure TBandaPluvio.Paint;
var
  BitmapBanda : TBitmap;
begin
  BitmapBanda := TBitmap.Create;
  try
    DibujaBanda(BitmapBanda);
    Canvas.Draw(0, 0, BitmapBanda); <--- aqui copio el Bitmap en el Canvas
  finally
    BitmapBanda.Free;
  end;
end;

y la impresión queda así
Código Delphi [-]
procedure TBandaPluvio.ImprimirBanda;
var
  BitmapBanda : TBitmap;
begin
  BitmapBanda := TBitmap.Create;
  try
    DibujaBanda(BitmapBanda);
    PrintScaled(BitmapBanda);
  finally
    BitmapBanda.Free;
  end;
end;

Saludos
salvica


La franja horaria es GMT +2. Ahora son las 05:18:22.

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