Ver Mensaje Individual
  #3 (permalink)  
Antiguo 25/02/2015, 04:27
aguml
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: Problemas con IPictureDisp en C++Builder

Gracias amigo, como no tenia muy claro muchas cosas, he comentado la parte donde obtengo el **IPictureDisp y me he centrado por ahora solo en la parte de copiar el _di_IPictureDisp al TPicture y el caso es que ahi ya da fallo al intentar copiar la imagen al portapapeles. El codigo ahora mismo lo tengo así despues de las modificaciones:
Código PHP:
void __fastcall TFormMain::Imagendeseleccionadosalportapapeles1Click(
      
TObject *Sender)
{
   
unsigned int DataHandle=0;
   
HPALETTE APalette=0;
   
unsigned short MyFormat=0;
   
TPicture *pic, *pic2;
   
IPictureDisp** lista;
   
_di_IPictureDisp *pIPD;
   
bool error false;

   
pIPD = new (std::nothrow)_di_IPictureDisp;
   if(
pIPD == 0){
      
error true;
   }else{
      
pic = new (std::nothrow)TPicture//Solicito memoria para el TPicture
      
if(pic == 0){
         
error true;
         
delete pIPD;
      }else{
         
pic2 = new (std::nothrow)TPicture//Solicito memoria para el TPicture
         
if(pic2 == 0){
            
error true;
            
delete pIPD;
            
delete pic;
         }
      }
   }

   if(
error == true){
      
ShowMessage("No hay memoria suficiente para realizar esta acción.");
   }else{
      try
      {
         
//ExportPicture devuelve un IPictureDisp** y quiero pasarlo a un _di_IPictureDisp
         //lista = AddFlow1->ExportPicture(afSelectedItems, true, true);
         //pIPD->operator = (lista[0]);

         
pic->LoadFromFile("prueba.bmp");

         
GetOlePicture(pic, *pIPD);
         
SetOlePicture(pic2, *pIPD); //Paso la imagen del IPictureDisp al TPicture

         //Envio la imagen al portapapeles
         
pic2->SaveToClipboardFormat(MyFormat,DataHandle,APalette);
         
Clipboard()->SetAsHandle(MyFormat,DataHandle);
      }catch(...){
         
ShowMessage("Fallo al copiar la imagen al portapapeles.");
      }
      
delete pic//Libero la memoria del TPicture
      
delete pic2;
      
delete pIPD;
   }

Cuando intenta ejecutar la linea:
Código PHP:
pic2->SaveToClipboardFormat(MyFormat,DataHandle,APalette); 
me da la excepcion:
Cita:
Project Project1.exe raised exception class EInvalidGraphicOperation with message 'Invalid operation on TOleGraphic'. Process stopped.
Y claro, si no me funciona ni la parte que copia la imagen de un _di_IPictureDisp a un TPicture, pues creo que primero tengo que hacer que este ejemplo funcione y luego enfocarme en la otra parte donde tengo que obtener el IPictureDisp.
La verdad es que no tengo ni idea de porque falla. ¿pueden ayudarme?