 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
sisabb Lt JG

Registrado: 07 Ago 2003Mensajes: 71
|
Publicado: Vie 18 Mar, 2011 2:33 pm Asunto: ¿Como ir a un bookmark en documento WORD en cuadro de texto |
|
|
Alguien sabe porque si se inserta un marcador dentro de un cuadro de texto en Word no se puede acceder a el con el GOTO.
¿Como se puede acceder a insertar texto en un cuadro de texto? |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mar 22 Mar, 2011 5:45 am Asunto: |
|
|
Quizás porque haya que seleccionar antes el cuadro, al menos así se genera el código al capturar una macro, y aunque se podria hacer, he encontrado un metodo alternativo mas sencillo.
Aquí va un ejemplo sin usar GOTO, en las pruebas que he hecho funciona bien tanto si las marcas están en cuadros de texto como si no, espero que te sirva (he usado un archivo llamado "plantilla.doc" con dos marcas: "nombre" y "direccion"):
| Código: | //Añadir: #include<UtilCls.h> #include<ComObj.hpp>
WideString path = ExtractFilePath(Application->ExeName),
ficheroPlantilla = path + "plantilla.doc",
ficheroGenerado = path + "generado.doc";
//--- Abre Word
Variant Application = CreateOleObject("Word.Application");
Application.OlePropertySet("Visible", false);
//--- Abre el documento que usaremos como plantilla
Variant Documents = Application.OlePropertyGet("Documents");
Variant Document = Documents.OleFunction("Open",
ficheroPlantilla, // Documento
false, // Confirmar conversiones
true, // Modo se solo lectura
false, // Añadir al menu de ficheros recientes
"" // Clave del documento
);
Variant Selection = Application.OlePropertyGet("Selection");
Variant Bookmarks = Document.OlePropertyGet("Bookmarks");
//////////////////////////////////////////////////////////////////////
//--- sustituimos una marca
// Aqui podemos meter el bucle que va a ir reemplanzando palabras
WideString mark;
if (Bookmarks.OleFunction("Exists", mark = "nombre"))
{
Bookmarks.OleFunction("Item", mark).OleProcedure("Select");
// Una vez encontrada la marca insertamos el texto
Selection.OleProcedure("TypeText", "Esto es una prueba");
}
//--- sustituimos otra marca
if (Bookmarks.OleFunction("Exists", mark = "direccion"))
{
Bookmarks.OleFunction("Item", mark).OleProcedure("Select");
Selection.OleProcedure("TypeText", "Otra prueba");
}
//////////////////////////////////////////////////////////////////////
//--- salvamos y cerramos Word
Document.OleProcedure("SaveAs", ficheroGenerado);
Document.OleProcedure("Close", -1);
Application.OleProcedure("Quit");
ShowMessage("Documento generado."); |
(Probado en BCB4, BCB6 y CB2010) |
|
| Volver arriba |
|
 |
sisabb Lt JG

Registrado: 07 Ago 2003Mensajes: 71
|
Publicado: Vie 01 Abr, 2011 7:26 am Asunto: |
|
|
Muchas gracias Leo, como lo que queria copiar era texto enriquecido, lo he efectuado con el siguiente código, apoyandome en el que tu me has pasado.
-------------------------------------------------
Variant vDocCopy, Bookmarks, vSeleccionCopy;
vDocCopy = vDocumentos.OleFunction("Open", lPL_Evolu_Peti_PETIC.c_str(), false, false, false, "" );
Bookmarks = vDocCopy.OlePropertyGet("Bookmarks");
vSeleccionCopy = vWord.OlePropertyGet("Selection");
// Cargamos las observaciones
lValor = Query1->Field("OBSERVACIONES");
TMemoryStream* pms = new TMemoryStream();
pms->Clear();
pms->Write(lValor.c_str(), strlen(lValor.c_str()));
pms->Position=0;
Form1->RichEdit1->Lines->LoadFromStream(pms);
Form1->RichEdit1->SelectAll();
//copiar al portapapeles
Form1->RichEdit1->CopyToClipboard();
if (Bookmarks.OleFunction("Exists", mark = "OBSERVACIONES"))
{
Bookmarks.OleFunction("Item", mark).OleProcedure("Select");
//insertamos el texto del portapapeles
vSeleccionCopy.OleProcedure( "Paste");
}
delete pms;
------------------------------------------------------------------
Solo te podemos pagar con el reconocimiento a tu teson y conocimientos.
Gracias. |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 04 Abr, 2011 8:38 pm Asunto: |
|
|
| sisabb escribió: | | Solo te podemos pagar con el reconocimiento a tu teson y conocimientos. |
Bueno, esta es una de las pocas cosas que hago relacionadas con mi trabajo que no me agobia y tampoco se tanto, más bien es que soy curioso.. también aprendo bastante ayudando a otros.. |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|