C/Visual C - Ayuda con IPictureDisp

 
Vista:
sin imagen de perfil
Val: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Ayuda con IPictureDisp

Publicado por aguml (272 intervenciones) el 24/02/2015 10:57:11
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:
1
IPictureDisp** ExportPicture(ItemSetConstants ItemSet, short IncludeBackColor, short IncludeBackPick);

En la ayuda del componente podemos ver solo ejemplos de Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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((afSelectedItems, true, true));
 
   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?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder