Hola.
Probe tu código y funciona de forma correcta, solo lo modifiqué un poco para darle reusabilidad:
Código PHP:
...
#include<clipbrd.hpp>
...
void WinCtrlToClipboard( TWinControl *wCtrl )
{
TClipboard *cb = Clipboard();
Graphics::TBitmap *bmp = new Graphics::TBitmap;
HDC hdc = GetWindowDC( wCtrl->Handle );
bmp->Width = wCtrl->Width;
bmp->Height = wCtrl->Height;
BitBlt( bmp->Canvas->Handle, 0, 0, bmp->Width, bmp->Height, hdc, 0, 0, SRCCOPY );
cb->Assign( bmp );
ReleaseDC( wCtrl->Handle, hdc );
delete bmp;
}
Ejemplo de uso:
Código PHP:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if ( fFicPer == NULL )
fFicPer = new TfFicPer( NULL );
Graphics::TBitmap *dest = fFicPer->QRImage1->Picture->Bitmap;
WinCtrlToClipboard( this );
dest->LoadFromClipboardFormat( CF_BITMAP, Clipboard()->GetAsHandle(CF_BITMAP), 0 );
fFicPer->qFicPer->Preview();
delete fFicPer;
fFicPer = NULL;
}
Form:
Preview:
Declaré el parámetro de modo que la función pueda recibir cualquier descendiente de
TWinControl, de modo que las siguientes llamadas tambien son correctas:
Código PHP:
WinCtrlToClipboard( Panel1 );
...
WinCtrlToClipboard( Edit3 );
...
WinCtrlToClipboard( Button1 );
...
Saludos