IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Acquerir un Style de Word


Sujet :

C++Builder

  1. #21
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Pour commencer un tuto sur le site
    et le lien sur la FAQ
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  2. #22
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut Demende de complements sur la Faq
    Bonjour,
    J'ai exploité les données de la Faq Word et j'y ai trouvé ce qu'il fallait pour ouvrir un document et le clore, mais je n'ai rien vu sur la lecture d'un paragraphe et la gestion du pointeur sur le texte, qui sont mes besoins de base
    Comment trouver ces renseignements, ce serait

  3. #23
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut JeanNoel53
    Que veux tu faire exactement sur la manipulation des paragraphes, l'ideale si tu sais manipuler VB Word c'est de poster un bout de code Visual basic
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  4. #24
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut Mon besoin
    Bonjour,

    Mon application actuelle lit un document Word bloc par bloc. Un bloc est constitué du test qui précède un retour chariot, soit un paragraphe.
    Pour chaque paragraphe, il analyse le style et le format du texte
    Je dois donc avoir l'équivalent sous OLE et si j'ai bien trouvé dans les liens que tu a fourni jusqu'à présent j'ai tout ce qui faut pour le style et le format. Mis je n'ai rien sur le read text ni sur la gestion du curseur sur le bloc courant.
    La partie Layout est facile pour moi à convertir avec ce que j'ai sur le net
    La difficulté pour moi est dans InitializePointBloc, GoNextBloc et ReadBloc

    ce serait d'avoir ces informations.

  5. #25
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut Ce qu'il faut aborder
    La partie Layout est facile pour moi à convertir avec ce que j'ai sur le net
    La difficulté pour moi est dans InitializePointBloc, GoNextBloc et ReadBloc
    Pour le link je link avec Trois librairies borland
    bcbaxserver, memmanager et OLE32
    Par contre le module est au coeur d'une DLL qui parle à l'application maîtresse

  6. #26
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    La il faut proceder par etape et traduire un module, on commence par " InitializePointBloc " que doit executer ce module
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  7. #27
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut Initialize Point Bloc
    Bonjour,
    Quels sont les références sur ce sujet?

  8. #28
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Que doit executer ton module " InitializePointBloc "
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  9. #29
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut l'objectif
    Bonjour,

    voici le besoin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    /*---------------------------------------------------------------*/
    /*Name          : InitializePointBloc                            */
    /*---------------------------------------------------------------*/
    /*Role          : Point on bloc of text in the document          */
    /*Preconditions : The document is open                           */
    /*In            : Nothing                                        */
    /*InOut         : Nothing                                        */
    /*Resources     : MS WORD API                                    */
    /*Return        : Error code                                     */
    /*Constraints   :                                                */
    /*Behavior      :                                                */
    /*---------------------------------------------------------------*/
    //
    //PROC InitializePointBloc
    //DO
    //  IF(Document is not empty) THEN
    //    [Point on the first available Bloc]
    //  ELSE
    //    [Error code ="Empty document"]
    //  FI
    //OD

  10. #30
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Je ne comprend pas ce que tu veux, que represente Bloc
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  11. #31
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut Le bloc
    Dans ce cas le bloc est une portion de texte limité par un retour chariot, soit le texte présent entre deux retour chariot acceptant la convention que le début du document et la fin du document ont le même rôle que le retour chariot.

  12. #32
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Pour Word une chaine de caracteres terminee par un retour chariot est un paragraphe, pour selectionner un paragraphe et placer le curseur au debut ou a la fin du paragraphe voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // OleFunction("Item", 1) represente le paragraphe 1
    vWDocument.OlePropertyGet("Paragraphs").OleFunction("Item", 2).OlePropertyGet("Range").OleFunction("Select");
    // on place le curseur au debut du paragraphe
    vMSWord.OlePropertyGet("Selection").OleFunction("MoveLeft", 2, 1);
    // on place le curseur a la fin du paragraphe
    vMSWord.OlePropertyGet("Selection").OleFunction("MoveRight", 2, 1);
    si c'est pour un paragraphe quelconque et le curseur place n'importe ou dans ce paragraphe ceci suffit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // on place le curseur au debut du paragraphe
    vMSWord.OlePropertyGet("Selection").OleFunction("MoveLeft", 2, 1);
    // on place le curseur a la fin du paragraphe
    vMSWord.OlePropertyGet("Selection").OleFunction("MoveRight", 2, 1);
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  13. #33
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut Avancons ensemble
    Bonjour,

    D'abord des chaleureux remerciement pour l'aide déjà apportée.
    J'ai retenu la première proposition pour InitPointBloc et j'ai réussi à régénérer la DLL de lecture Word. J'ai donc commencé a tester et j'ai buté sur la première requête OLE avec une exception EOLESysError avec le message "opération non disponible"
    je met le code ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     vMSWord = Variant::GetActiveObject("Word.Application");
    C'est la première des requêtes OLE.
    Peut être aurais je du faire quelque chose avant, ou ma requête est elle mal formée?
    Je serait bien de savoir

  14. #34
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Le code s'ecrit comme ceci, on verifie que Word n'est pas deja ouvert ce qui evite d'avoir plusieur fois l'application ouverte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    try
            {
    // ici on regarde si Word est deja ouvert
        vMSWord = Variant::GetActiveObject("Word.Application");
            }
    catch(...)
            {
    // sinon on ouvre Word
        vMSWord = Variant::CreateObject("Word.Application");
            }
    En essayant le programme en mode pas a pas en passant par le try...catch une exeption est levee et le debuger nous previent, en mode programme cette exeption est egalement levee mais rien ne l'indique c'est un comportement normal, c'est pour cela que je mets en commentaire cette ligne pour mes essais
    // vMSWord = Variant::GetActiveObject("Word.Application");
    donc tu click OK pour signaler que tu a vue l'execption et tu verra que ton programme reprend dans le catch
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  15. #35
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut La Faq et l'implémentation
    Bonjour, et merci encore pour ton suivi

    J'ai modifié un peu l'initialisation pour tenir compte des observations du débugger
    voici le bloc de code que j'ai implémenté:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    ErrorCode = INIT_NO_ERROR;
      try
      {
         if( bIsConnected == false)
         {
            bIsConnected = false;
            // sinon on ouvre Word
            vMSWord = Variant::CreateObject("Word.Application");
            vMSWord.OlePropertySet("Visible", true); // ("Visible", false)
            ErrorCode = INIT_NO_ERROR;
        }
        if(ErrorCode == INIT_NO_ERROR)
           bIsConnected = true;
        else if( ErrorCode == E_INVALIDARG)
           bIsConnected = false;
        else if( ErrorCode == E_UNEXPECTED)
           bIsConnected = false;
      }
      catch(Exception &exception)
      {
        bIsConnected = false;
        ErrorCode = objStrConv.CreateReturnCode(TYPE_ERROR, MSG_CANT_START_WORD_API,MODULE_ID_WORD_READER,
                          MODULE_ID_WORD_READER, START_WORD_API,
                          CANT_START_WORD_API);
      }
      return ErrorCode;
    Si on prend le bloc de code de la FAQ, dans mon implémentation, on butte sur
    l'instruction GetActiveObjet qui renvoi au catch de l'appelant et pas à celui de la fonction.
    L'inconvénient de cette procédure c'est qu'en test on ouvre autant de Word qu'on passe sur le démarrage de l'api. opérationnellement ce n'est pas problématique car si l'utilisateur à un doc ouvert il est pertinent d'ouvrir le document de l'application dans une autre instance de Word.
    Ce choix n'est pas définitif, et je reviendrai peut-être à ton implémentation ultérieurement.
    J'ai implémenté le code de la FAQ pour l'Open:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    AnsiString  NomDocument;
      erc         ErrorCode;
     
      ErrorCode = INIT_NO_ERROR;
      NomDocument = WideCharToString((wchar_t *) wsFullPathName.c_str());
      try
      {
        vFileName = NomDocument;
        vLink = Unassigned;
        vReadOnly = false; // lecture seule
        vFormat = Unassigned;
        vReadPass = Unassigned; // mot de passe du document
        vWDocuments = vMSWord.OlePropertyGet("Documents");
        // ici on charge un document sur la feuille
        vWdDocument = vWDocuments.OleFunction("Open", vFileName, vLink, vReadOnly, vFormat, vReadPass);
      }
      catch(...)
      {
        ErrorCode = objStrConv.CreateReturnCode(TYPE_ERROR, MSG_CANT_OPEN_DOCUMENT,MODULE_ID_WORD_READER,
                          MODULE_ID_WORD_READER, OPEN_DOCUMENT,
                          CANT_OPEN_DOCUMENT);
      }
     
      if (ErrorCode == INIT_NO_ERROR)
      {
        m_bDocumentIsOpen = true;
      }
     
      return ErrorCode;
    }
    et je sort avec l'erreur EOleSysError, Type de variable incorrect. J'ai essayé avec open en minuscule même résultat et dans le code de sysvari.h, on voit que l'arg[0] est null. est ce normal ?
    Ce sera d'avoir ta réponse

  16. #36
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    comment a tu declare tes variables
    vLink
    vReadOnly
    vFormat
    vReadPass
    l'ideale est d'avoir declare ses variables en Variant
    pour NomDocument essaie pour les essais de le declarer comme ceci " c:\\nom de chemin " declare en Variant si cela passe sans erreur il faut modifier une seule chaine a la fois sinon cela devient difficile a debugger
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  17. #37
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut J'ai tout déclaré en Variant
    Bonjour,

    J'ai tout déclaré en variant voilà le bloc de déclaration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Variant vMSWord;
    Variant vWDocuments;
    Variant vFileName;
    Variant vLink;
    Variant vReadOnly;
    Variant vFormat;
    Variant vReadPass;
    Variant vWdDocuments;
    Variant vWdDocument;
    long m_lNumberOfParagraphs;
    long m_lNumberOfWords;
    extern CWReader *pReader;
    extern CStrConv objStrConv;
    bool bIsConnected;
    J'ai modifié la déclaration de NonDocument pour le faire passer en variant.
    Je l'affecte une seul fois par le chemin absolue de mon document: "E:\\usr\\thèse\\Tailgate\\Spx\\tailgate.doc" et cette valeur est présente dans tous les variables observées.
    Mais le statut est le même, plantage au même endroit.

  18. #38
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    tu peu essayer
    WideString(vFileName)
    on ne sais jamais
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  19. #39
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut Ca ne change rien
    Bonjour,

    Je suis toujours tes conseils avec intéret
    J'ai essayé ta proposition
    Je te joins le code dans lequel se produit l'erreur, car elle ne provient peut-être pas du nom de fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    template <class P1, class P2, class P3, class P4, class P5>
      Variant Variant::OleFunction(const String& name, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5)
      {
        TAutoArgs<5> args;
        args[1] = p1;  args[2] = p2;  args[3] = p3;
        args[4] = p4;  args[5] = p5;
        return OleFunction(name, static_cast<TAutoArgsBase*>(&args));
      }
    Dans ce code le premier argument de Args est null.
    Je n'ai pas réussi a atteindre la fonction OleFunction( name, static cast(...))
    je vous remercie à nouveau du suivi que vous apportez à ce problème, c'est

  20. #40
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut Cloture de ces essais
    Bonjour
    J'ai essayé la faq en dll, en normal et en static ,en le mettant dans le produit, et l'erreur ci dessus s'est reproduite.
    Ma conclusion est que la Faq ne marche pas. Je laisse les responsables du site le soin de l'infirmer ou de modifier la faq.
    Comme les titres ont une morphologie différente des paragraphe, j'ai extrait l'information de la morphologie du texte
    Et donc de ce fait le problème est résolu
    à+

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Impression de la Zone de style sous Word
    Par marcoutze dans le forum VBA Word
    Réponses: 7
    Dernier message: 24/01/2008, 23h47
  2. [ListView] Abréger des paths (style MS Word)
    Par MiJack dans le forum Delphi
    Réponses: 2
    Dernier message: 09/03/2007, 17h25
  3. Réponses: 5
    Dernier message: 12/06/2006, 10h31
  4. Créer des barres flottantes de style MS Word
    Par MiJack dans le forum Composants VCL
    Réponses: 7
    Dernier message: 03/04/2006, 19h10
  5. Reconnaître du style dans Word
    Par semaj_james dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 24/06/2004, 09h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo