Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Duda en añadir imagen en Word

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Duda en añadir imagen en Word Responder citando

Estoy exportando las gráficas TChart a Word de la siguiente forma:

Código:
Chart->SaveToMetafile("C:\\graficabarras.wmf");
Variant inlineShapes = Seleccion.OlePropertyGet("InlineShapes");       
String pathImagen = "C:\\graficabarras.wmf";
inlineShapes.OleProcedure("AddPicture", pathImagen.c_str());


ahora me gustaría realizar algunas mejoras y cambiar:

Código:
Chart->SaveToMetafile("C:\\graficabarras.wmf");


a:

Código:
Chart->SaveToMetafile("\graficabarras.wmf");


para guardarlo en la misma ruta donde está la aplicación pero cómo le paso esa ruta en:

Código:
String pathImagen = ".\graficabarras.wmf";


?? ya que lo anterior da una excepción...

Otra duda que tengo es si de alguna forma después de haber añadido la imagen en el documento, ¿la podría eliminar del directorio? (como si fuera un fichero temporal que una vez realizado la exportación en word se elimine)

Gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

zankiu escribió:
Código:
Chart->SaveToMetafile("\graficabarras.wmf");
Chart->SaveToMetafile("\\graficabarras.wmf");
zankiu escribió:
Código:
String pathImagen = ".\graficabarras.wmf";
String pathImagen = ".\\graficabarras.wmf";

Código:
    String appPath = ExtractFilePath(Application->ExeName);
    String pathImagen = appPath + "graficabarras.wmf";
    Chart->SaveToMetafile(pathImagen);
    Variant inlineShapes = Seleccion.OlePropertyGet("InlineShapes");
    inlineShapes.OleProcedure("AddPicture", pathImagen.c_str());
    DeleteFile(pathImagen);
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Buenos días _Leo.

Código:
Chart->SaveToMetafile("\\graficabarras.wmf");

String pathImagen = ".\\graficabarras.wmf";


me indica la aplicación "nombre desconocido"

he probado únicamente con
Código:

Chart->SaveToMetafile("\\graficabarras.wmf");


no me da error, me exporta bien pero no guarda la imagen en la ruta.

en cambio con:

Código:

Chart->SaveToMetafile("\graficabarras.wmf");


sí lo hace.

pero sigo con las mismas de que cómo recupero la ruta para añadir la imagen en word?
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Solo trataba de que vieras que habías puesto barras sueltas en vez de lo correcto que son dobles barras... por si podía estar ahí tu error...

Pero lo que puse más abajo es como yo lo haría y entiendo que es lo que querías, lo has probado ?
Código:
String appPath = ExtractFilePath(Application->ExeName);
    String pathImagen = appPath + "graficabarras.wmf";
    Chart->SaveToMetafile(pathImagen);
    Variant inlineShapes = Seleccion.OlePropertyGet("InlineShapes");
    inlineShapes.OleProcedure("AddPicture", pathImagen.c_str());
    DeleteFile(pathImagen);


Lo que hace es guardar la imagen en el mismo directorio que el ejecutable, la añade en el documento de Word y a continuación la borra del directorio.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Cita:

Solo trataba de que vieras que habías puesto barras sueltas en vez de lo correcto que son dobles barras... por si podía estar ahí tu error...


vale, no entendí bien, aún así con:

Código:

Chart->SaveToMetafile("\graficabarras.wmf");


guarda el achivo en la ruta de la aplicación, en cambio con
Código:

String pathImagen = ".\graficabarras.wmf";


pincha...

así que probando el código que has propuesto, funciona como debe Smile

Aprovechando, he visto en el foro la forma de cambiar el tamaño de las imágenes, suponiendo que tengo dos imágenes con el código adapatado al mio sería así:

Código:
inlineShapes = Seleccion.OlePropertyGet("InlineShapes");
[..]
int numInlineShapes = inlineShapes.OlePropertyGet("Count");
const int wdInlineShapePicture = 3;
for (int i = 1; i <= numInlineShapes; i++)
 {
  Variant shape = inlineShapes.OleFunction("Item", i);
  if (shape.OlePropertyGet("Type") == wdInlineShapePicture)
  {
   shape.OlePropertySet("Width", MmToPoints(100));
   shape.OlePropertySet("Height", MmToPoints(50));
  }
 }


con la correspondiente declaración de:
Código:

inline float MmToPoints(float mm) {return mm * 2.83464567;}


pero no tiene ningún efecto sobre las imágenes... Sad
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

zankiu escribió:
vale, no entendí bien, aún así con

No pretendía ser la solución, esa ya la ponía debajo... Solo pensé que resaltando la barra invertida verías que podías haber cometido un despiste, ya que en C/C++ la barra invertida por si sola no significa nada (puedes hacer una prueba simple: ShowMessage("\grafico"); ). La barra invertida es un carácter especial que se utiliza como inicio de una secuencia: \n (nueva línea), \t (tabulador), \\ (barra invertida), \xFF (carácter hexadecimal), etc... Por tanto si usas una sola barra y no la completas con una combinación valida simplemente es como si no la pusieras, se ignora.

zankiu escribió:
inlineShapes = Seleccion.OlePropertyGet("InlineShapes");
Prueba cambiando esa línea por:
Código:
inlineShapes = Documento.OlePropertyGet("InlineShapes");
//.. nos aseguramos que Documento tenga un valor valido
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Cita:
... Por tanto si usas una sola barra y no la completas con una combinación valida simplemente es como si no la pusieras, se ignora.


que poniendo:

Código:
Chart->SaveToMetafile("\graficabarras.wmf");


como

Código:
Chart->SaveToMetafile("graficabarras.wmf");


es lo mismo... ya caigo ya, ha costao..

Ya funciona, lo tengo así:

Código:

 //Modificar el tamaño de las gráficas
 Variant inlineShapes1 = Documento.OlePropertyGet("InlineShapes");
 int numInlineShapes = inlineShapes1.OlePropertyGet("Count");
 const int wdInlineShapePicture = 3;
 for (int i = 1; i <= numInlineShapes; i++)
 {
  Variant shape = inlineShapes1.OleFunction("Item", i);
  if (shape.OlePropertyGet("Type") == wdInlineShapePicture)
  {
   shape.OlePropertySet("Width", MmToPoints(100));
   shape.OlePropertySet("Height", MmToPoints(50));
  }
 }


y con:

Código:
Variant inlineShapes = Seleccion.OlePropertyGet("InlineShapes");
 inlineShapes.OleProcedure("AddPicture", pathImagen.c_str());


añado las imágenes.

Gracias y un saludo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.