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

API, COM et SDKs Delphi Discussion :

Comment afficher pour visualisation un document Word, comme Word, dans une Form ?


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 12
    Points : 12
    Points
    12
    Par défaut Comment afficher pour visualisation un document Word, comme Word, dans une Form ?
    Bonjour,


    Je cherche donc à afficher un doc word comme Word l'aurait fait, mais dans une portion de Form Delphi.
    Objectif : avec un treeview à gauche, et faire apparaitre un doc correspondant dans la partie de droite.
    J'ai essayé avec un objet OLE, mais sans activation, on n'a qu'une image partielle de la 1ere page du doc, et on ne peut descendre sur les pages suivantes par un ascenceur.
    Et avec activation du controle, une grande partie de Word se charge et envahit la fenetre en affichant les barres d'outils par dessus les controles existants.
    Et avec l'office 2007, c'est pîre, il affiche aussi le ruban.
    Alors que moi, je ne voulais qu'afficher le contenu du document, dans un espace déterminé.

    Des idées ?

  2. #2
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    Je n'ai aucun des symptômes que tu décris avec Word 2003 et Delphi 2005, en utilisant la procédure suivante :

    1) Pose un TScrollBox

    2) Pose un TOleContainer sur le TScrollBox, mets sa propriété SizeMode à smAutoSize.

    3) Ajuste la visualisation, couleurs, reliefs, etc.

    Le document Word sera placé en mode conception ou à l'exécution par la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     OleContainer1.CreateLinkToFile(MonDocument,false); // MonDocument = chemin vers le document
    Je pense qu'une recherche sur le site t'aurait donné la solution.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    Merci pour la réponse.
    D'abord, j'ai bien cherché avant, mais n'ai rien trouvé qui fonctionne.
    Je ne l'ai pas précisé, mais j'utilise Delphi 7.
    Après essai, ta solution ne change rien à mon problème, sur mon poste.

    ci joint une copie d'écran. Avant activation, je n'ai qu'un petit bout du doc, sans ascenseur (malgré le Tscrollbox). Et après activation, il charge carrément Word (2007)

    Ceci dit, je vais essayer avec Delphi 5 et word 2003.
    Je posterai le résultat.
    ... que voici :
    idem sur un système "neuf", avec Office 2003 tout "neuf" et Delphi 5.
    Tu es sous Windows XP ? Service Pack 2 ?
    Pourrais tu m'envoyer tes sources et ton EXE, s'il te plait ?
    Images attachées Images attachées  

  4. #4
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    Pour les ascenseurs, c'est normal, ils apparaissent automatiquement en fonction des besoins. Réduit la taille de ton TScrollBox en dessous de la taille du document, tu verras.

    Et pour l'activation In-Place qui s'empare de tout l'espace, c'est normal aussi, c'est la norme OLE qui veut ça.

    Pour mon source ? Il n'y a rien de plus que ce que j'ai dit. Un ScrollBox, un OleContainer, une propriété modifiée... c'est tout.

    Mais : je viens de m'apercevoir qu'en réalité il n'y a que la première page du document qui s'affiche... désolé. J'avais fait mon essai avec un document d'une seule page.

    Pas de solution pour le moment... peut-être regarder de plus près dans le fonctionnement de TOleContainer, ou alors chercher un composant équivalent qui n'ait pas cette limitation ?

  5. #5
    Membre du Club
    Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 73
    Points : 61
    Points
    61
    Par défaut
    J'ai fait quelque chose du genre avec un TRichEdit, en utilisant le presse-papier. A gauche de mon Form, un dbgrid sur une table, et dans chaque enregistrement de la tabe il y a (entre autres) le nom complet, avec le path, d'un document word.
    Quand l'utilisateur sélectionne un record de la table, j'appelle la fonction suivante, qui prend en paramètre le nom trouvé dans la table et le TRichEdit qui est sur mon Form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure CopierDocDansRichEdit( pNomDoc: string; pRichEdit: TRichEdit );
    var
       doc, appli : OleVariant;
    begin
       appli := CreateOleObject('Word.Application');
       appli.Visible := False;
       doc := appli.Documents.Open( pNomDocument );
       doc.Application.Selection.WholeStory;
       doc.Application.Selection.Copy;
       pRichEdit.PasteFromClipboard;
    end;
    // le code réel n'est pas celui-là, je l'ai élagué...
    Le résultat n'est pas toujours parfait, car entre le format RTF et le format DOC, il y a parfois des petits écarts mais dans l'ensemble ça donne un truc assez lisible.

    [Pour être complet, je dois préciser que tant de complications ne sont pas tout à fait gratuites. L'appli édite aussi, à côté du RichEdit, une liste des signets contenus dans le document. L'utilisateur peut modifier le contenu des signets dans le StringGrid qui les affiche, puis il a un bouton qui lui permet d'injecter ses encodages dans le document. On a ainsi la certitude que l'utilisateur ne peut modifier dans le document que ce qui est permis, et que le document va s'enregistrer au bon endroit etc etc.]

    Paul

  6. #6
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Tu peux utiliser les composants serveurs dont word .... (version pro et plus)
    sinon tu peux rechercher sur le net comment piloter word par OLE et ainsi acceder a toutes les fonctionnalitées (le site phidels en donne beaucoup d'exemple).

    Sinon une possibilité serait d'installer depuis soit le menu "composant/installer un activeX", soit "projet/Importer une bibliotheque de type" les composants/classes/unitees relative a MS word.

    D'autre part, tu peux aussi te procurer les vieilles versions gratuites de WordViewer qui ne sont que des versions "visualisation".
    Cela permet de pouvoir limiter le nombre de boutons et d'actions quand tu aura reussi l'affichage inplace.

  7. #7
    Membre du Club
    Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 73
    Points : 61
    Points
    61
    Par défaut
    Suite aux messages de CapJack, j'ai réessayé le composant TOleContainer, et voici ce que ça donne, cf PJ.

    Il y a donc bel et bien moyen, avec ce composant, d'avoir Word A L'INTERIEUR d'une Form. Mais ça marche pas à tous les coups, et j'ai pas encore capté quand, lors du double-clic, il ouvre Word en fenêtre libre ou bien à l'intérieur de la Form...

    Cependant, tant qu'on ne double-clique pas dessus (voir propriété autoActivate du TOleContainer) , le composant n'affiche que la première page, et encore sans ascenseur.

    Bon, pas très précis comme message, d'accord, mais ça veut dire juste un truc : c'est possible :-))
    Images attachées Images attachées  

  8. #8
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Salut à tous,

    Je suis confronté au problème, et j'avoue que j'ai du mal à m'y retrouver dans vos propos...
    Y êtes vous arrivés au bout du compte ?

    Si oui, je veux bien savoir comment.

    Merci d'avance.

  9. #9
    Membre du Club

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 24
    Points : 43
    Points
    43
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par PaulR Voir le message
    Suite aux messages de CapJack, j'ai réessayé le composant TOleContainer, et voici ce que ça donne, cf PJ.

    Il y a donc bel et bien moyen, avec ce composant, d'avoir Word A L'INTERIEUR d'une Form. Mais ça marche pas à tous les coups, et j'ai pas encore capté quand, lors du double-clic, il ouvre Word en fenêtre libre ou bien à l'intérieur de la Form...

    Cependant, tant qu'on ne double-clique pas dessus (voir propriété autoActivate du TOleContainer) , le composant n'affiche que la première page, et encore sans ascenseur.

    Bon, pas très précis comme message, d'accord, mais ça veut dire juste un truc : c'est possible :-))

    PaulR Stp tu pourrais expliquer la manière dont tu as procéder ca vas surement aider certaines personnes

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/03/2012, 21h06
  2. Réponses: 0
    Dernier message: 14/11/2011, 15h52
  3. Réponses: 8
    Dernier message: 22/04/2011, 21h27
  4. Réponses: 3
    Dernier message: 19/05/2006, 11h05
  5. [DOM] Comment afficher à l'écran un document DOM
    Par jothi35 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 16/12/2004, 08h54

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