Ver Mensaje Individual
  #1  
Antiguo 12-12-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Reputación: 11
aguml Va por buen camino
Concatenar imagenes y copiar al portapapeles

Hola amigos, estoy intentando concatenar imagenes de diferentes tamaños en un TBitmap y guardarlo en el portapapeles pero no se que hago mal que no se guarda correctamente en el portapapeles y si intento pegarlo por ejemplo en paint me dice "Error al obtener informacion del portapapeles".

Esto es lo que tengo hecho:
Código PHP:
void __fastcall TForm1::CopyCatImagesToClipBoard()
{
   
unsigned int DataHandle;
   
HPALETTE APalette;
   
unsigned short MyFormat;
   
int x=0,y=0;
   
TRect ARectBRect;

   
//Solicito memoria para el bitmap que contendrá el concatenado de imagenes
   
Graphics::TBitmap *FullMap = new (nothrowGraphics::TBitmap();

   if(
FullMap != NULL)
   {
      
Graphics::TBitmap **= new (nothrowGraphics::TBitmap*[CheckListBox->Count];

      if(*
!= NULL)
      { 
//Si se obtuvo memoria correctamente...
         
for(int i=0CheckListBox->Counti++)
         {
            
//Asigno memoria a cada Bitmap que contendrá a cada imagen
            
b[i] = new (nothrowGraphics::TBitmap();

            if(
b[i] != NULL)
            { 
//Si se obtuvo memoria correctamente...
               
try
               {
                  
//Meto cada imagen en su Bitmap
                  
b[i]->LoadFromFile(ChangeFileExt(CheckListBox->Items->Strings[i],".bmp"));

                  
//Le sumo el ancho de la imagen actual a y
                  
+= b[i]->Width;

                  
//Relleno el TRect para la imagen concatenada
                  
ARect.Left 0;
                  
ARect.Top 0;
                  
ARect.Right b[i]->Width;
                  
ARect.Bottom b[i]->Height;

                  
//Relleno el TRect para la imagen actual
                  
BRect.Left x;
                  
BRect.Top 0;
                  
BRect.Right y;
                  
BRect.Bottom b[i]->Height;

                  
// Añado el canvas a la imagen que contendrá el concatenado de imagenes
                  
FullMap->Canvas->CopyRect(BRectb[i]->CanvasARect);

                  
//Le sumo el ancho de la imagen actual a x
                  
+= b[i]->Width;
               }
               catch(...)
               {
                  
//Si huvo algun error libero toda la memoria obtenida y salgo de la funcion
                  
for(int v=0<= iv++)
                     
delete b[v];
                  
delete [] b;
                  
delete FullMap;
                  
FullMap NULL;
                  
Application->MessageBoxA("Hubo un error al copiar las imagenes concatenadas al portapapeles""Error"MB_OK MB_ICONERROR);
               }
               
//Si huvo algun error salgo
               
if(FullMap == NULL)
                  return;
            }else{ 
//Si no se pudo obtener la memoria suficiente...
               //Libero toda la memoria obtenida y salgo de la funcion
               
for(int v=0iv++)
                  
delete b[v];
               
delete [] b;
               
delete FullMap;
               
Application->MessageBoxA("Hubo un error al copiar las imagenes concatenadas al portapapeles""Error"MB_OK MB_ICONERROR);
               return;
            }
         }

         try
         {
            
// generate a clipboard format, with data and palette
            
FullMap->SaveToClipboardFormat(MyFormat,DataHandle,APalette);

            
// save the data to the clipboard using that format and
            // the generated data
            
Clipboard()->SetAsHandle(MyFormat,DataHandle);
         }
         catch(...)
         { 
//Si huvo algun error libero toda la memoria obtenida
            
for(int v=0CheckListBox->Countv++)
               
delete b[v];
            
delete [] b;
            
delete FullMap;
            
FullMap NULL;
            
Application->MessageBoxA("Hubo un error al copiar las imagenes concatenadas al portapapeles""Error"MB_OK MB_ICONERROR);
         }
         
//Si huvo algun error salgo de  la funcion
         
if(FullMap == NULL)
            return;

         
//Libero toda la memoria obtenida
         
for(int i=0;CheckListBox->Counti++)
            
delete b[i];
         
delete [] b;
         
delete FullMap;
      }else{ 
//Si no se pudo obtener la memoria suficiente...
         //Libero toda la memoria obtenida
         
delete FullMap;
         
Application->MessageBoxA("Hubo un error al copiar las imagenes concatenadas al portapapeles""Error"MB_OK MB_ICONERROR);
      }
   }else{
      
Application->MessageBoxA("Hubo un error al copiar las imagenes concatenadas al portapapeles""Error"MB_OK MB_ICONERROR);
   }

¿que me falta para que funcione?
Responder Con Cita