| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
zankiu Lt Cmdr

Registrado: 23 Ene 2008Mensajes: 106
|
Publicado: Mar 10 Feb, 2009 4:25 pm Asunto: Duda en añadir imagen en Word |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mar 10 Feb, 2009 4:44 pm Asunto: |
|
|
| 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 |
|
 |
zankiu Lt Cmdr

Registrado: 23 Ene 2008Mensajes: 106
|
Publicado: Mie 11 Feb, 2009 11:07 am Asunto: |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mie 11 Feb, 2009 10:18 pm Asunto: |
|
|
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 |
|
 |
zankiu Lt Cmdr

Registrado: 23 Ene 2008Mensajes: 106
|
Publicado: Jue 12 Feb, 2009 9:52 am Asunto: |
|
|
| 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
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...  |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Jue 12 Feb, 2009 2:19 pm Asunto: |
|
|
| 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 |
|
 |
zankiu Lt Cmdr

Registrado: 23 Ene 2008Mensajes: 106
|
Publicado: Vie 13 Feb, 2009 12:19 pm Asunto: |
|
|
| 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 |
|
 |
|