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 ItemSet, short IncludeBackColor, short 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((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?