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

Composants VCL Delphi Discussion :

[Ole Word] Fermeture du OleContainer


Sujet :

Composants VCL Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 10
    Points : 10
    Points
    10
    Par défaut [Ole Word] Fermeture du OleContainer
    a l'activation de ma form2 je cree l'objet document de word
    je recupere le champ blob de ma base mysql

    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
     if olecontainer1.State = osempty then
          olecontainer1.createobject('Word.document.8',false) ;
      vmsword := Olecontainer1.OleObject ;
      olecontainer1.DoVerb(0);
     
      vMSword.application.Selection.Font.Size:=12;
      form34.ClientDataSet1.Edit ;
      blob := form34.ClientDataSet1.CreateBlobStream(form34.ClientDataSet1.FieldByName('textfax'), bmReadWrite) ;
     
      try
        blob.Seek(0, soFromBeginning);
        fs := TFileStream.Create(chemin + 'temp.rtf', fmcreate or fmShareDenyWrite);
        try
        fs.CopyFrom(blob, blob.Size) ;
        finally
        fs.Free
        end;
      finally
        blob.Free
      end ;
      vmsword.application.Selection.InsertFile(FileName:= chemin + 'temp.rtf') ;
    ensuite l'utilisateur change ce qu'il veut ds le document

    j'enregistre ds ma base mysql

    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
     procedure TForm37.Enregistrer1Click(Sender: TObject);
    begin 
      vmsword.saveas(chemin + 'tmp.rtf') ;
     
      SQLREQ.Close ;
      SQLREQ.CommandText := 'update g_faxenv set textfax = :text '
            + ' where numaff = :numaff and nocfenv = :nocfenv' ;
     
      fic := chemin + 'tmp.rtf' ;
      SQLREQ.Params[0].LoadFromFile(fic,ftblob) ;
      SQLREQ.Params[1].AsString := form34.Edit6.Text ;
      SQLREQ.Params[2].AsString := form34.nocfenv ;
      SQLREQ.ExecSQL(false) ;
      vmsword.application.Selection.Endkey ;
      showmessage('enregistrement effectué') ;
    mon bouton quitter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TForm37.Quitter1Click(Sender: TObject);
    form34.SQLdataset1.Close ;
    form34.ClientDataset1.Close ;
    Olecontainer1.destroyobject ;
    form34.Close ;
    close ;
    je fais destroy object pour effacer le texte saisi lors de la derniere utilisation de cette form2

    je peux fermer la form2 la réouvrir avec un autre enregistrement pas de probleme ça marche

    ( une forme principale avec un bouton qui va sur form2 )
    ( sur form 2 on choisit l'enregistrement que l'on veut faire afficher ds word .. bouton qui va sur form3 )
    ( form3 ..mon olecontainer et un menu Enregistrer Quitter)

    mais quand je quitte la form principale de mon application , j'ai le message d'erreur :

    violation d'acces a l'adresse 7FF47C10 dans le module ole32.dll
    je ne peux pas faire de vmsword.close ou vmsword.application.quit (vmsword est le variant correspondant a l'oleobject du ole container )

    vous remarquerez que je crée un document word et pas une instance de l'application MSWord

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    olecontainer1.createobject('Word.document.8',false) ;
    si vous avez une idée de la provenance de ce message d'erreur ?..

    j'ai pensé a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    olecontainer.oleobjectinterface._release
    mais je ne sais pas trop à quoi ça correspond "acces de bas niveau à l' API OLE"

    Merci pour votre aide

  2. #2
    Membre averti
    Profil pro
    xxxxxxxxxxx
    Inscrit en
    Juin 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : xxxxxxxxxxx

    Informations forums :
    Inscription : Juin 2004
    Messages : 308
    Points : 407
    Points
    407
    Par défaut
    - avez-vous essayé un avant le destroyobject ?
    - avez-vous le même problème sans le destroyobject ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    oui exactement pareil

  4. #4
    Membre averti
    Profil pro
    xxxxxxxxxxx
    Inscrit en
    Juin 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : xxxxxxxxxxx

    Informations forums :
    Inscription : Juin 2004
    Messages : 308
    Points : 407
    Points
    407
    Par défaut
    Il faudrait tracer en F7 depuis le OnDestroy de la form afin de tenter de voir s'il n'y aurait pas un Free ou un release sur un objet déjà libéré... :

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    en fait, c'est à cause du variant vmsword :

    donc on remplace tous les vmsword par l'object du container et plus de problemes !!
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    olecontainer1.OleObject.saveas(chemin + 'tmp.rtf') ;
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    olecontainer1.oleobject.application.Selection.TypeText (Text := 'Destinataires') ;
    à la fermeture de la forme Ne pas oublier sinon MSWord reste dans la liste des processus .. cette erreur fait planter l'executable

    c'est tres penible les olecontainer mais l'interface est tres agréable dans votre application , le doc word est integre dans la form et les barres d'outils sont fusionnées


  6. #6
    Membre averti
    Profil pro
    xxxxxxxxxxx
    Inscrit en
    Juin 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : xxxxxxxxxxx

    Informations forums :
    Inscription : Juin 2004
    Messages : 308
    Points : 407
    Points
    407
    Par défaut
    Content que ça marche !
    C'est vrai que l'intégration des outils Office dans une appli est sympa.
    @ +

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup de ton aide, c'est ça :
    n'y aurait pas un Free ou un release sur un objet déjà libéré
    qui m'a fait penser que le variant ne se remettait pas à vide, en fait il faisait n'importe quoi ce variant lol @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 14/01/2015, 00h41
  2. Pilotage OLE Word avec Visual C++
    Par baka02 dans le forum MFC
    Réponses: 2
    Dernier message: 20/03/2006, 13h04
  3. Delphi7 + OLE Word Choix de l'imprimante
    Par Wilco dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 16/03/2006, 17h20
  4. OLE Word => serveur RPC indisponible !?
    Par qi130 dans le forum Langage
    Réponses: 4
    Dernier message: 31/10/2005, 22h36
  5. [OLE / Word] Ecriture sur en tete et pied de page
    Par Mijakely dans le forum VBA Word
    Réponses: 1
    Dernier message: 10/08/2005, 14h39

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