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

Windows Discussion :

[C++ - Word] Fonction ou API permettant de faire un Enregistrer sous


Sujet :

Windows

  1. #1
    Membre actif
    Inscrit en
    Juin 2003
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 270
    Points : 216
    Points
    216
    Par défaut [C++ - Word] Fonction ou API permettant de faire un Enregistrer sous
    Bonjour,

    je cherche une fonction C++ qui me permettrait de faire l'équivalent du "Enregistrer sous" de Word lorsque le document est sauvé pour la première fois.

    Il y a une fonction qui permet de le faire en VBA mais je souhaiterais pouvoir le faire depuis une DLL C++ (IDE: Visual Studio).

    Est-ce que quelqu'un sait comment faire ?

    Merci !

  2. #2
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    Oui, l'API GetSaveFileName
    L'itération est humaine; la récursion, divine.

  3. #3
    Membre actif
    Inscrit en
    Juin 2003
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 270
    Points : 216
    Points
    216
    Par défaut
    merci, mais je n'ai pas été assez précis dans mon message: je souhaite faire un enregistrer-sous en transparence (sauvegarder le fichier en local dans un répertoire et avec un nom donné).

    Je n'arrive pas à mettre la main dessus dans la MSDN non plus.

  4. #4
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    Citation Envoyé par drinkmilk
    merci, mais je n'ai pas été assez précis dans mon message: je souhaite faire un enregistrer-sous en transparence
    Si c'est créer un fichier que tu veux, il y'a l'api CreateFile.

    Citation Envoyé par drinkmilk
    (sauvegarder le fichier en local dans un répertoire et avec un nom donné).
    Il se trouve ou ce fichier, en mémoire ?
    L'itération est humaine; la récursion, divine.

  5. #5
    Membre actif
    Inscrit en
    Juin 2003
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 270
    Points : 216
    Points
    216
    Par défaut
    La situation est la suivante:

    1. Un utilisateur ouvre Word, ouvre un nouveau document, puis décide de faire "Enregistrer Sous". Mon programme prend la main à cet instant. Le fichier n'a donc toujours pas été créé sur le disque.
    2. Mon programme fait apparaître une fenêtre personnalisée "Enregistrer sous",
    3. Lorsque l'utilisateur clique sur le bouton "Enregistrer" de ma boîte de dialogue, il faut que je trouve une fonction qui enregistre effectivement le fichier à un endroit donné du disque, en transparence (sans qu'une autre boîte de dialogue apparaisse).
    Est-ce plus clair ?

    Merci pour ton aide

  6. #6
    mat.M
    Invité(e)
    Par défaut
    A part faire une macro sous Word et appeler son propre composant je ne vois pas.
    Le mieux est de créer une dll ATL-COM .
    Y placer son code en C++
    Sur le document Word placer un bouton et sur le clic de ce bouton, faire CreateObject de son objet et accéder aux méthodes.

  7. #7
    Membre actif
    Inscrit en
    Juin 2003
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 270
    Points : 216
    Points
    216
    Par défaut
    Je vais finir par me résigner à passer par une macro que ma DLL appellerait ... ce qui me gêne car évidemment c'est quand même plus lisible, maintenable, ... quand tout dépend d'un seul et même composant.

    Cela dit, je pense que la fonction que je cherche existe, ou sinon c'est très surprenant. Mais Google et la MSDN ne m'ont pas permis de trouver quoi que ce soit pour l'instant.

    Si jamais quelqu'un trouve quelque chose ...

  8. #8
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    POur enregistrer dans un fichier, il te suffit de créer un fichier et d'écrire dedans. Aucune boite de dialogue n'intervient. De même, les boites de dialogue sont toujours "transparentes", elles ne font que renvoyer le nom du fichier à créer.
    Pour créer un fichier, Mayti4 t'a donné CreateFile. Il y a des équivalent dans ton langage (fopen...).

  9. #9
    Membre actif
    Inscrit en
    Juin 2003
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 270
    Points : 216
    Points
    216
    Par défaut
    Utiliser fopen pour créer un fichier, OK pas de problème.

    Mais à moins que quelquechose m'échappe, ça ne résoudra pas mon problème.

    Le contexte:
    1. L'utilisateur ouvre Word ou crée un nouveau document Word et saisi du texte.
    2. Il clique sur Enregistrer Sous. Mon développement prend la main avant l'apparition de la boîte de dialogue de Windows (le but est de remplacer cette boîte de dialogue).
    3. La boîte de dialogue personnalisée apparaît.
    Quand l'utilisateur clique OK sur cette boîte de dialogue, il faut que le document soit effectivement sauvé. Je peux créer un fichier avec fopen et écrire dedans. Mais comment écrire ce que l'utilisateur vient de saisir dans le nouveau document ? Aussi, une fois que l'utilisateur a fait son enregistrer sous, il doit pouvoir continuer à travailler sur le fichier qu'il vient de créer, comme dans le cadre d'un enregistrer sous classique. Faut-il donc que je trouve des fonctions permettant de fermer le nouveau document puis ouvrir celui que j'ai créé avec fopen ?

    J'avoue que je suis un peu perdu au milieu de tout ça.

  10. #10
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Tout dépend de ce que tu développes. Si tu fais de l'automation de Word, à priori tu dois demander à Word d'enregistrer son document.
    Comment tu t'y prends pour remplacer la boite standard par la tienne ?

  11. #11
    Membre actif
    Inscrit en
    Juin 2003
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 270
    Points : 216
    Points
    216
    Par défaut
    J'utilise un SDK lié à un produit de gestion documentaire. Il me permet avec une fonction CALLBACK de capter l'évènement Enregistrer sous dans Word et donc de prendre la main avant l'apparition de la boîte de dialogue standard. D'où la possibilité de faire apparaître une boîte personnalisée.

    Je connais très peu Automation, mais il me semble que ce sera compliqué d'instancier un objet CDocument (par exemple) qui fait référence au document Word approprié.

  12. #12
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Le rôle d'une boite de dialogue enregistrer est de permettre la saisie du nom du fichier à créer, et pas d'enregistrer. Je comprends pas pourquoi c'est à ta boite d'enregistrer le document. Normalement, c'est l'appelant de ta boite qui va utiliser le nom renvoyé pour enregistrer le fichier.

  13. #13
    Membre actif
    Inscrit en
    Juin 2003
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 270
    Points : 216
    Points
    216
    Par défaut
    Ca ne fonctionne pas comme ça.

    La fonction CALLBACK me permet de prendre le contrôle avant la boîte Enregistrer sous et d'insérer un traitement. Après le traitement, il y a deux possibilités:
    • reprendre le comportement par défaut (donc appel de la fenêtre standard)
    • ou redonner la main à Word (donc si le traitement ne fait rien ... il ne se passe rien)

  14. #14
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Ah ok. Ben faut voir avec ton SDK, je sais pas comment il fonctionne. Normalement il doit te permettre de communiquer avec Word via l'automation, et alors il faut demander à Word d'enregistrer le document.

Discussions similaires

  1. [PPT-2007] Faire un "enregistrer sous 2003" en vba
    Par stroumfette44 dans le forum VBA PowerPoint
    Réponses: 4
    Dernier message: 06/07/2011, 10h40
  2. Réponses: 2
    Dernier message: 06/04/2011, 16h45
  3. [VB6] Fonction ou API qui retourne l'utilisateur windows courant
    Par nnj dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/05/2006, 18h31
  4. WORD : fonction "Envoyer vers"
    Par tiftay01 dans le forum Word
    Réponses: 4
    Dernier message: 12/05/2006, 22h37
  5. Composant permettant de faire des graphes sous Excel
    Par PrinceMaster77 dans le forum ASP
    Réponses: 2
    Dernier message: 25/10/2005, 22h13

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