Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-02-2015
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
Amigo, si hago esto:

IPictureDisp *pIPD = AddFlow1->ExportPicture(afAllItems, true, true);

Me da este error al compilar:

[C++ Error] Main.cpp(731): E2034 Cannot convert 'IPictureDisp * *' to 'IPictureDisp *'


La ayuda del componente no da mucha ayuda ya que casi todo el soporte lo da para VB y en algun que otro caso pone algun ejemplo en C++. Aqui los tres ejemplos que pone para ese metodo en VB:

Export the diagram to a picture box:

Código PHP:
' here, we copy only the selected items.

Picture1.Picture = AddFlow1.ExportPicture(afSelectedItems, False, False)
 

Example 2 (VB)


Código PHP:
' Copy the diagram to the clipboard:

here we wish to copy all items and the back picture.

Clipboard.Clear

Clipboard.SetData AddFlow1.ExportPicture(afAllItemsFalseTrue)
 
Example 3 (VB)


Código PHP:
' 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(afAllItemsTrueTrue) 

AddFlow1.ShowGrid True

SavePicture pic"myfile.emf"

 

Traceando puedo ver que ExportPicture se declara asi:

Código PHP:
IPictureDisp** __fastcall TAddFlow::ExportPicture(Addflow5lib_tlb::ItemSetConstants ItemSet, 
 VARIANT_BOOL IncludeBackColor,
 VARIANT_BOOL IncludeBackPic)
{

return GetDefaultInterface()->ExportPicture(ItemSetIncludeBackColorIncludeBackPic);




Si entro con F7 llego aqui:

Código PHP:
IPictureDisp** __fastcall ExportPicture(Addflow5lib_tlb::ItemSetConstants ItemSet, 
 VARIANT_BOOL IncludeBackColor, VARIANT_BOOL IncludeBackPic)

 
{
 
_TDispID _dispid(/* ExportPicture */ DISPID(134));
 
TAutoArgs<3_args;&#8233;
 
_args[1] = (int)ItemSet /*[VT_USERDEFINED:0]*/;&#8233;
 
_args[2] = IncludeBackColor /*[VT_BOOL:0]*/;&#8233;
 
_args[3] = IncludeBackPic /*[VT_BOOL:0]*/;&#8233;
 
OleFunction(_dispid_args);&#8233;
 
return (IPictureDisp** /*[C1]*/)(LPDISPATCH/*[VT_DISPATCH:1]*/_args.GetRetVariant();
}&
#8233; 
He traceado por dentro y no veo que en ningun sitio llame a Release() y ya no se que mas puedo probar. 


Última edición por aguml fecha: 01-02-2015 a las 18:46:31.
Responder Con Cita
  #2  
Antiguo 01-02-2015
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
Por favor, que algun administrador elimine la respuesta anterior ya que el formato no está bien. Aqui lo pongo bien:

Amigos, si hago esto:
Código PHP:
IPictureDisp *pIPD AddFlow1->ExportPicture(afAllItemstruetrue); 
Me da este error al compilar:
Código:
[C++ Error] Main.cpp(731): E2034 Cannot convert 'IPictureDisp * *' to 'IPictureDisp *'
La ayuda del componente no da mucha ayuda ya que casi todo el soporte lo da para VB y en algun que otro caso pone algun ejemplo en C++. Aqui los tres ejemplos que pone para ese metodo en VB:

Example 1 (VB)
Código:
' Export the diagram to a picture box:
' here, we copy only the selected items.
Picture1.Picture = AddFlow1.ExportPicture(afSelectedItems, False, False)
Example 2 (VB)
Código:
' 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)
Código:
' 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"
Traceando puedo ver que ExportPicture se declara asi:
Código PHP:
IPictureDisp** __fastcall TAddFlow::ExportPicture(Addflow5lib_tlb::ItemSetConstants ItemSet,
                                                                      
VARIANT_BOOL IncludeBackColor,
                                                                      
VARIANT_BOOL IncludeBackPic)
{
  return 
GetDefaultInterface()->ExportPicture(ItemSetIncludeBackColorIncludeBackPic)

Si entro con F7 llego aqui:
Código PHP:
IPictureDisp** __fastcall ExportPicture(Addflow5lib_tlb::ItemSetConstants ItemSet,
                                                 
VARIANT_BOOL IncludeBackColor,
                                                     
VARIANT_BOOL IncludeBackPic)
{
    
_TDispID _dispid(/* ExportPicture */ DISPID(134));
    
TAutoArgs<3_args;
    
_args[1] = (int)ItemSet /*[VT_USERDEFINED:0]*/;
    
_args[2] = IncludeBackColor /*[VT_BOOL:0]*/;
    
_args[3] = IncludeBackPic /*[VT_BOOL:0]*/;
    
OleFunction(_dispid_args);
    return (
IPictureDisp** /*[C1]*/)(LPDISPATCH/*[VT_DISPATCH:1]*/_args.GetRetVariant();

He traceado por dentro y no veo que en ningun sitio llame a Release() y ya no se que mas puedo probar.
Responder Con Cita
  #3  
Antiguo 02-02-2015
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
He hecho una prueba para intentar ver que pasa:
Código PHP:
   unsigned int DataHandle;
   
HPALETTE APalette;
   
unsigned short MyFormat;
   
TPicture *pic;
   
IPictureDisp *pIPD;

   
//Obtengo el puntero al IPictureDisp
   
pIPD = (IPictureDisp*)AddFlow1->ExportPicture(afAllItemstruetrue);

   try
   {
      
pic = new TPicture//Solicito memoria para el TPicture

      
__try
      
{
         try
         {
            
//Prueba que deberia pasar la imagen al IPictureDisp
            
pic->LoadFromFile("Diagramas.wmf"); //Leo una imagen desde un archivo
            
GetOlePicture(picpIPD); //La paso del TPicture al IPictureDisp
            
SetOlePicture(picpIPD); //La paso 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.");
   } 
Lo que hago es leer una imagen desde el TPicture, luego la paso al IPictureDispatch y luego la vuelvo a pasar al TPicture desde el IPictureDisp. Pues bien:
1- Al IPictureDisp le tengo que hacer un cast mas que extraño al asignarlo para que no de error despues.
2- Tanto GetOlePicture como GetOlePicture devuelven void por lo que no se si fallan pero no dan excepcion ninguna.
3- Cuando uso GetOlePicture no veo que nada cambie en el IPictureDisp.
4- Cuando uso SetOlePicture puedo ver como cambia el valor de FGrafic en su interior.

¿como puede ser que solo con copiar la imagen de uno a otro y luego otra vez volver a hacer lo mismo ya no sea capaz de leer la imagen? Creo que GetOlePicture no hace lo que debe o que IPictureDisp no se inicializa como debe. ¿Alguien puede ayudarme?
Responder Con Cita
  #4  
Antiguo 02-02-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola aguml.

No quiero que te quedes con la idea de que no hay voluntad de ayudarte. En mi caso (y creo que en el de todos los que han leido el hilo) el mutismo se debe al desconocimiento sobre IPictureDisp.

Fijate si este enlace te puede arrojar algo de luz: Converting between IPictureDisp and System.Drawing.Image

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 02-02-2015
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
amigo en ningun caso pensé en que no hubiese voluntad de ayudar, entiendo que unos por falta de tiempo, otros por desconocimiento, y otros por otras razones, pues no ha podido ser y por eso sigo investigando y probando por mi cuenta y compartiendo mis pruebas para ver si alguien que pueda me ayuda. El enlace que indindicas ya lo vi pero usa stdole y no se como hacer para que el builder me lo reconozca ya que no comila con eso.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Portapapeles TImage cmm07 Varios 5 06-02-2009 17:01:06
Copiar al portapapeles johurgi Varios 4 22-11-2006 19:47:48
Monitorizar el portapapeles de windows rsantosr API de Windows 3 26-09-2005 07:29:38
Portapapeles... Perio Varios 3 29-07-2005 16:27:41
StringGrid -> Portapapeles acertij022 OOP 3 17-10-2003 17:14:16


La franja horaria es GMT +2. Ahora son las 22:25:30.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi