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?