Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Imagen de portapapeles a QRImage (https://www.clubdelphi.com/foros/showthread.php?t=91314)

Angel.Matilla 29-12-2016 12:09:19

Imagen de portapapeles a QRImage
 
Tengo este código:
Código:

void __fastcall TfPersona::PerFicClick(TObject *Sender)
{
    Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
    HDC hdcSrc = GetWindowDC(this->Handle);

    pBitmap->Width  = this->Width;
    pBitmap->Height = this->Height;
    BitBlt(pBitmap->Canvas->Handle, 0, 0, pBitmap->Width, pBitmap->Height, hdcSrc, 0, 0, SRCCOPY);
    Clipboard()->Assign(pBitmap);

    ReleaseDC(this->Handle, hdcSrc);

    if (Clipboard()->HasFormat(CF_BITMAP))
    {
          Application->CreateForm(__classid(TfFicPer), &fFicPer);

          Clipboard()->Open();
          pBitmap->LoadFromClipboardFormat(CF_BITMAP, Clipboard()->GetAsHandle(CF_BITMAP), 0);
          Clipboard()->Close();

          fFicPer->QRImage2->Picture->Assign(pBitmap);
          cReportTitle = "FICHA PERSONAL " + Nombre->Text + " " + Apellidos->Text;
          fFicPer->qFicPer->Preview();
          delete fFicPer;
    }
    delete pBitmap;
    this->SetFocus();
}

para volcar un copia de pantalla en un QucikReport a través del portapapeles. He comprobado que en el mismo sí está la imagen pero al hacer el Preview me sale el formulario en blanco. ¿Alguna idea?

ecfisa 30-12-2016 07:08:29

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 WinCtrlToClipboardTWinControl *wCtrl )
{
  
TClipboard *cb Clipboard();
  
Graphics::TBitmap *bmp = new Graphics::TBitmap;
  
HDC hdc GetWindowDCwCtrl->Handle );

  
bmp->Width  wCtrl->Width;
  
bmp->Height wCtrl->Height;
  
BitBltbmp->Canvas->Handle00bmp->Widthbmp->Heighthdc00SRCCOPY );
  
cb->Assignbmp );

  
ReleaseDCwCtrl->Handlehdc );
  
delete bmp;


Ejemplo de uso:
Código PHP:

void __fastcall TForm1::Button1Click(TObject *Sender)
{

  if ( 
fFicPer == NULL 
    
fFicPer = new TfFicPerNULL );
  
Graphics::TBitmap *dest fFicPer->QRImage1->Picture->Bitmap;

  
WinCtrlToClipboardthis );
  
dest->LoadFromClipboardFormatCF_BITMAPClipboard()->GetAsHandle(CF_BITMAP), );
  
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:

  WinCtrlToClipboardPanel1 );
  ...
  
WinCtrlToClipboardEdit3 );
  ... 
  
WinCtrlToClipboardButton1 );
  ... 

Saludos :)


La franja horaria es GMT +2. Ahora son las 01:57: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