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 

¿Como ir a un bookmark en documento WORD en cuadro de texto

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: ¿Como ir a un bookmark en documento WORD en cuadro de texto Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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 Wink y tampoco se tanto, más bien es que soy curioso.. también aprendo bastante ayudando a otros..
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.