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

Hola amigos, estoy usando un componente ActiveX llamado AddFlow, el cual permite dibujar diagramas. El componente se puede usar de manera libre y te muestra un mensaje diciendo que ha sido creado con la version no registrada y claro, antes de comprar nada lo tengo que probar y mas esto que cuesta la licencia unos 700€. La empresa que creó el AddFlow no me da soporte porque dice que solo dan soporte a las personas que tienen licencia, algo que no comparto ya que primero hay que probarlo bien y si te convence lo compras y si no te convence pues no lo compras.
Os explico el problema.
El componente tiene el método:
Código PHP:
IPictureDisp** ExportPicture(ItemSetConstants ItemSetshort IncludeBackColorshort IncludeBackPick); 
En la ayuda del componente podemos ver solo ejemplos de Visual Basic:
Código:
Example 1 (VB)

' Export the diagram to a picture box:
' here, we copy only the selected items.
Picture1.Picture = AddFlow1.ExportPicture(afSelectedItems, False, False)
Example 2 (VB)

' Copy the diagram to the clipboard:
' here we wish to copy all items and the back picture.
Clipboard.Clear
Clipboard.SetData AddFlow1.ExportPicture(afAllItems, False, True)
Example 3 (VB)

' Save the diagram in a file:
' here we don›t want to save the grid.
Dim pic As IpictureDisp
AddFlow1.ShowGrid = False
Set pic = AddFlow1.ExportPicture(afAllItems, True, True) 
AddFlow1.ShowGrid = True
SavePicture pic, "myfile.emf"
Haciendo pruebas en C++Builder he llegado a esto:
Código PHP:
unsigned int DataHandle;
   
HPALETTE APalette;
   
unsigned short MyFormat;
   
TPicture *pic;
   
_di_IPictureDisp *pIPD = new _di_IPictureDisp;

   
//ExportPicture devuelve un IPictureDisp** y quiero pasarlo a un _di_IPictureDisp
   
pIPD->operator =((IPictureDisp*)AddFlow1->ExportPicture((afSelectedItemstruetrue));

   try
   {
      
pic = new TPicture//Solicito memoria para el TPicture
      
__try
      
{
         try
         {
            
SetOlePicture(pic, *pIPD); //Paso la imagen del IPictureDisp al TPicture

            //Envio la imagen al portapapeles
            
pic->SaveToClipboardFormat(MyFormat,DataHandle,APalette);
            
Clipboard()->SetAsHandle(MyFormat,DataHandle);
         }catch(...){
            
ShowMessage("Fallo al copiar la imagen al portapapeles.");
         }
      }
__finally{
         
delete pic//Libero la memoria del TPicture
      
}
   }catch(...){
      
ShowMessage("No hay memoria suficiente.");
   } 
El caso es que no funciona y no se como conseguir hacerlo. ¿Alguien puede ayudarme?