Ver Mensaje Individual
  #2  
Antiguo 01-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
Vamos por partes, puedes copiar el contenido del TPaintbox fácilmente, al menos la parte visible del mismo. Es decir, si parte del paintbox esta tapado por otra ventana, se encuentra fuera de los limites de la pantalla o la ventana esta minimizada la parte que no se vea aparecerá en blanco. Se haría de la siguiente manera:

Código Delphi [-]
uses ClipBrd;

procedure Copiar(Src: TCanvas; X, Y, Width, Height: Integer);
var
  Bitmap: TBitmap;
begin
  Bitmap:= TBitmap.Create;
  try
    Bitmap.Height:= Height;
    Bitmap.Width:= Width;
    Bitmap.Canvas.CopyRect(Rect(0,0,Width,Height),Src,
      Rect(X,Y,X + Width,Y + Height));
    Clipboard.Assign(Bitmap);
  finally
    Bitmap.Free;
  end;
end;

// Para utilizar la funcion
Copiar(PaintBox1.Canvas, 0,0,PaintBox1.Width,PaintBox1.Height);

Esta seria la solución fácil, copiar solo que se ve. Pero no es una solución muy buena, otra solución pasaría por saber como se dibuja el contenido del TPaintbox. Si eres tu el que lo dibuja, no tendrías dificultad alguna en volver a dibujar todo en un bitmap para después copiarlo. Incluso podrías usar el mismo procedimiento para dibujar ambos, pasándole como parámetro el canvas, en un caso el del TPaintbox y en el otro el del Bitmap. Si por el contrario no eres capaz de volver a dibujar todo el contenido del canvas, tendrías que ir pensando en usar un TImage en vez de un TPaintbox, sobre todo porque eso quiere decir que en el método OnPaint de tu TPaintbox seguramente no tienes escrito nada, y cada vez que el TPaintbox es tapado por otra ventana se borra y no lo redibujas.
Responder Con Cita