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

 Delphi Discussion :

Comment rendre invisible Word avec une commande Ole ?


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 425
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut Comment rendre invisible Word avec une commande Ole ?
    Bonsoir à toutes et à tous,

    J'aimerai ouvrir un document Word par OpenOffice et l'afficher dans un Tmemo mais sans voir le logiciel qui ouvre ce document.

    Mon code qui fonctionne bien mais qui affiche le logiciel :

    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
     
    procedure TForm1.ButtonOuvrirDocumentExistantClick(Sender: TObject);
    var
      NomFichier:string;
      OpenOfficeDesktop : Variant;
     
    begin
       if OpenDialog1.Execute then
       begin
         NomFichier:=OpenDialog1.FileName;
         // Openoffice travail avec des nom de fichier au "format" URL
         // il faut donc remplacemer les \ par des /
         // et ajouter devant le chemin 'file:///'
         NomFichier := 'file:///'+StringReplace(NomFichier , '\', '/',[rfReplaceAll]);
           //si on se s'est pas déjà connecté au serveur, on le fait
         if VarIsEmpty(ServeurOpenOffice) then 
     
    ServeurOpenOffice:=SeConnecterOpenOffice;
         //On crée une instance OpenOffice
         OpenOfficeDesktop :=
            ServeurOpenOffice.createInstance('com.sun.star.frame.Desktop');
         //On charge le fichier 'NomFichier'
         DocumentOpenOffice :=
            OpenOfficeDesktop.LoadComponentFromURL( NomFichier, '_blank',
            0, VarArrayCreate([0, - 1], varVariant));
            //documentopenoffice.visible := false;
            //OpenOfficeDesktop.visible := false;
       end;
    end;
    Avec Word il suffisait d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WordApplication.Visible := false ;
    Comme j'utilise OpenOffice et non Microsoft Word, je suis un peu perdu.

    Merci si vous avez une idée.

    @+,

    cincap

  2. #2
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Bonsoir Cincap,

    Test ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Propriete.name:='Hidden';
    Propriete.Value:=true;     
    LoadParams[0]:=propriete;

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Nabil donne la bonne piste mais, sans autre explication, c'est un peu court car il faut utiliser une autre API (com.sun.star.reflection.CoreReflection)

    voici donc, un code que j'espère plus complet, pris d'une de mes vieilles applications

    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
    32
     
    var 
         OO_FileName : String;
         OO_Doc,OO_Service,OO_DeskTop,properties,CoreServ,prop : Variant;
         xSheets,vSheet,vCell : Variant;
    begin
    if (VarIsEmpty(OO_Service) or VarIsNull(OO_Service)) then
       OO_Service:=CreateOleObject('com.sun.star.ServiceManager');
    if not(VarIsEmpty(OO_Service) or VarIsNull(OO_Service)) then
     begin
       if (VarIsEmpty(OO_DeskTop) or VarIsNull(OO_DeskTop)) then
              OO_Desktop:= OO_Service.CreateInstance('com.sun.star.frame.Desktop');
     end;
    if (VarIsEmpty(OO_DeskTop) or VarIsNull(OO_DeskTop)) then
     begin
       MessageDlg('Le service Open Office n''est pas ouvert',mtError,[mbOk],0);
       Exit;
     end;
    properties:=VarArrayCreate([0,0],varVariant);
    CoreServ:= OO_Service.CreateInstance('com.sun.star.reflection.CoreReflection');
    CoreServ.forName('com.sun.star.beans.PropertyValue').CreateObject(prop);
    prop.name:='Hidden';
    prop.Value:=True; //true
    properties[0]:=prop;
     
     
    // Creation de la Feuille 
    OO_FileName:='private:factory/scalc';
    OO_Doc := OO_Desktop.LoadComponentFromURL(OO_FileName,
                                              '_blank',
                                               0,
                                              properties);
    et, comme je prévois la question suivante qui sera la sauvegarde peut être sous un format plus lisible par Microsoft voici ma procédure pour sauvegarder en fichier XLS
    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
     
    procedure TFormOOo.SaveOO;
    var CoreServ,prop1,prop2, properties : Variant;
        XL : Boolean;
    begin
    try
      XL:=(ExtractFileExt(SaveDialog1.FileName)='.XLS');
      if XL then properties:=VarArrayCreate([0,1],varVariant)
            else properties:=VarArrayCreate([0,0],varVariant);
      CoreServ:= OO_Service.CreateInstance('com.sun.star.reflection.CoreReflection');
      CoreServ.forName('com.sun.star.beans.PropertyValue').CreateObject(prop1);
      prop1.name:='OverWrite';
      prop1.Value:=true;
      properties[0]:=prop1;
      if XL then begin
       CoreServ.forName('com.sun.star.beans.PropertyValue').CreateObject(prop2);
       prop2.name:='FilterName';
       prop2.Value:='MS Excel 97';
       properties[1]:=prop2;
      end;
      oo_Doc.StoreasURL(OO_FileName,properties);
    except
      ShowMessage('Erreur fermeture');
    end;
    end;
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 425
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut
    Bonjour à toutes et à tous,

    @ Nabil merci pour ta suggestion j'espère que tu vas bien ?

    @ SergioMaster, merci pour ta réponse, j'ai testé et en effet OpenOffice ne s'ouvre pas mais je ne sais pas afficher le document dans mon Tmemo.

    Voici mon nouveau test :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    procedure TForm1.Button3Click(Sender: TObject);
     
    var
         OO_FileName, NomFichier, s : String;
         OO_Doc,OO_Service,OO_DeskTop,properties,CoreServ,prop, texte : Variant;
         xSheets,vSheet,vCell : Variant;
     
    begin
     
    if OpenDialog1.Execute then
       begin
         NomFichier:=OpenDialog1.FileName;
     
         NomFichier := 'file:///'+StringReplace(NomFichier , '\', '/',[rfReplaceAll]);
           //si on se s'est pas déjà connecté au serveur, on le fait
     
    if (VarIsEmpty(OO_Service) or VarIsNull(OO_Service)) then
       OO_Service:=CreateOleObject('com.sun.star.ServiceManager');
     
    if not(VarIsEmpty(OO_Service) or VarIsNull(OO_Service)) then
     
    begin
     
     if (VarIsEmpty(OO_DeskTop) or VarIsNull(OO_DeskTop)) then
              OO_Desktop:= OO_Service.CreateInstance('com.sun.star.frame.Desktop');
     end;
     
    if (VarIsEmpty(OO_DeskTop) or VarIsNull(OO_DeskTop)) then
     begin
       MessageDlg('Le service Open Office n''est pas ouvert',mtError,[mbOk],0);
       Exit;
     end;
     
    properties:=VarArrayCreate([0,0],varVariant);
    CoreServ:= OO_Service.CreateInstance('com.sun.star.reflection.CoreReflection');
    CoreServ.forName('com.sun.star.beans.PropertyValue').CreateObject(prop);
     
    prop.name:='Hidden';
    prop.Value:=True; //true
    properties[0]:=prop;
     
    // Creation de la Feuille
    OO_FileName:='private:factory/scalc';
    OO_Doc := OO_Desktop.LoadComponentFromURL(OO_FileName,
                                              '_blank',
                                               0,
                                              properties);
     
    //Test affichage
    {texte:= CoreServ.getText;
     S:=texte.GetString;
     Memo2.Lines.Add(S) }
     
    end;
    end;
    Je dois avoir loupé quelque chose comme dans mon habitude.

    @+,

    cincap

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par cincap Voir le message
    j'ai testé et en effet OpenOffice ne s'ouvre pas
    ce qui était la réponse à la question du titre

    mais je ne sais pas afficher le document dans mon Tmemo.
    ce qui est en fait une autre question ! à laquelle je ne sais quoi trop répondre n'ayant jamais eu ce cas de figure car le plus souvent j'étais confronté aux tableaux et non aux documents texte

    déjà par rapport à ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // Creation de la Feuille
    OO_FileName:='private:factory/scalc';
    OO_Doc := OO_Desktop.LoadComponentFromURL(OO_FileName,
                                              '_blank',
                                               0,
                                              properties);
     
     texte:= CoreServ.getText;
     S:=texte.GetString;
     Memo2.Lines.Add(S)
    1 - tu n'ouvres pas un document mais crées un nouveau tableau ! la première chose serait donc de remplir correctement le OO_FileName par le nom de ton fichier.
    il faut que le nom soit un nom correct pour open office , pas de \ mais des / pas de blancs mais des %20 etc..
    2 - ce n'est pas CoreServ qui te permettra d'accéder au document mais OO_Doc
    3 - enfin, pour obtenir le texte, je ne suis absolument pas sûr que ce soit GetText.GetString
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 425
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut
    @ SergioMaster, entretemps j'avais vu l'erreur de mon nom de fichier mais même avec cette correction j'ai une erreur avec l'affichage du document doc dans le TMemo.

    Pourtant si j'ajoute l'affichage dans mon premier code, cela fonctionne bien mais OpenOffice est visible et moi j'aimerai qu'il ne le soit pas.

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    procedure TForm1.ButtonOuvrirDocumentExistantClick(Sender: TObject);
    var
      OO_FileName, s:string;
      OpenOfficeDesktop, texte, VariantArr : Variant;
     
    begin
       if OpenDialog1.Execute then
       begin
     
    OO_FileName:=OpenDialog1.FileName;
     
         OO_FileName := 'file:///'+StringReplace(OO_FileName , '\', '/',[rfReplaceAll]);
           //si on se s'est pas déjà connecté au serveur, on le fait
     
     
         if VarIsEmpty(ServeurOpenOffice) then ServeurOpenOffice:=SeConnecterOpenOffice;
     
         {VariantArr := VarArrayCreate([0, 0], varVariant);
     
    	VariantArr[0] := MakePropertyValue('Hidden', true);}
     
         //On crée une instance OpenOffice
         OpenOfficeDesktop :=
            ServeurOpenOffice.createInstance('com.sun.star.frame.Desktop');
     
    //On charge le fichier 'NomFichier'
         DocumentOpenOffice :=
            OpenOfficeDesktop.LoadComponentFromURL( OO_FileName, '_blank',
            0, VarArrayCreate([0, - 1], varVariant));
     
            {);
           OpenOfficeDesktop.setVisible(false);
       OpenOfficeDesktop.setVisible(false);}
     
    //Affichage du document " *.doc" dans le TMemo
     texte:= DocumentOpenOffice.getText;
     S:=texte.GetString;
     Memo1.Lines.Add(S)
       end;
    end;
    Je continue a tester.

    @+,

    cincap

  7. #7
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Citation Envoyé par cincap Voir le message
    Bonjour à toutes et à tous,

    @ Nabil merci pour ta suggestion j'espère que tu vas bien ?
    cincap
    ça va bien Merci cincap.

    Désolé de ne pouvoir t'aider d'avantage car je n'ai pas Open Office installé dans mon pc.
    Bon courage.

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 425
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut
    Bonjour à toutes et à tous,

    @ NABIL74, pas de problème.

    Après bien des essais il n'y a que mon code qui fonctionne et qui affiche le contenu du document Word dans le Tmemo mais en affichant le logiciel OpenOffice.

    Maintenant il y a peut être une autre solution de charger le contenu du document Word directement avec ShellExecute et l'afficher dans le Tmemo ?

    @+,

    cincap

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    sauf que tu n'utilises pas le code que je t'ai fourni
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // avant l'ouverture
    properties:=VarArrayCreate([0,0],varVariant);
    CoreServ:= OO_Service.CreateInstance('com.sun.star.reflection.CoreReflection');
    CoreServ.forName('com.sun.star.beans.PropertyValue').CreateObject(prop);
    prop.name:='Hidden';
    prop.Value:=True; //true
    mais un code que je ne connaissais pas {OpenOfficeDesktop.setVisible(false);} et qui ne fait peut-être pas la même chose

    de même si invisible, il y a peut être une histoire de curseur (TextCursor) et de sélection à mettre en place : à tester

    Maintenant il y a peut être une autre solution de charger le contenu du document Word directement avec ShellExecute et l'afficher dans le Tmemo ?
    non, je crois pas que ce soit une bonne idée.

    J'aimerais bien faire un test mais j'avoue ne pas avoir le courage de m'y mettre je viens juste de résoudre mon problème de FMX.TGrid qui était une épine dans mon pied depuis une bonne semaine, j'entame donc la rédaction d'un paragraphe supplémentaire de mon tuto sur les grilles avec FMX à paraitre (comme c'est parti après les vacances)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 425
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut
    @ SergioMaster, merci de ta réponse.

    Avec ton code, excell s'affiche et le contenu ne se met pas dans le Tmemo malgré que le nom du fichier est un *.doc.

    Pas de problème si tu n'as pas le temps de tester.

    Je continue à chercher.

    @+,

    cincap

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bon, cela me tracassait donc j'ai pris un peu de temps pour faire un essai

    tu m'excuseras de ne pas avoir mis de nom correct pour les composants, de n'avoir pas mis des filtres pour l'ouverture du document (FileOpenDialog1)
    l'important était de vérifier le point : Open Office caché, obtention du texte du document

    dfm simple
    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
    32
    33
    34
    35
    36
    37
    38
    39
    object Form16: TForm16
      Left = 0
      Top = 0
      Caption = 'Form16'
      ClientHeight = 430
      ClientWidth = 734
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      PixelsPerInch = 96
      TextHeight = 13
      object Memo1: TMemo
        Left = 16
        Top = 128
        Width = 681
        Height = 257
        TabOrder = 0
      end
      object Button1: TButton
        Left = 16
        Top = 32
        Width = 177
        Height = 25
        Caption = 'Charger document'
        TabOrder = 1
        OnClick = Button1Click
      end
      object FileOpenDialog1: TFileOpenDialog
        FavoriteLinks = <>
        FileTypes = <>
        Options = []
        Left = 304
        Top = 24
      end
    end
    unité
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    unit UnitOODoc;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
      System.Win.ComObj, System.UITypes,
      Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
     
    type
      TForm16 = class(TForm)
        Memo1: TMemo;
        FileOpenDialog1: TFileOpenDialog;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form16: TForm16;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm16.Button1Click(Sender: TObject);
    var  OO_FileName : String;
         OO_Doc,OO_Service,OO_DeskTop,properties,CoreServ,prop : Variant;
         Texte : Variant;
     
         function FileToURL(F : String) : AnsiString;
          var i : Word;
              R : AnsiString;
          begin
             R:='file:///'+F;
             // transforme le nom du fichier en adresse URL
             while (Pos('\',R)>0) do    {les \ en /}
             begin
              i:=Pos('\',R);
              Delete(R,i,1);
              Insert('/',R,i);
             end;
            while (Pos(' ',R)>0) do    {les espaces en %20}
            begin
              i:=Pos(' ',R);
              Delete(R,i,1);
              Insert('%20',R,i);
            end;
            result:=R;
            end;
     
    begin
    if FileOpenDialog1.Execute then
     begin
        if (VarIsEmpty(OO_Service) or VarIsNull(OO_Service)) then
           OO_Service:=CreateOleObject('com.sun.star.ServiceManager');
        if not(VarIsEmpty(OO_Service) or VarIsNull(OO_Service)) then
         begin
           if (VarIsEmpty(OO_DeskTop) or VarIsNull(OO_DeskTop)) then
                  OO_Desktop:= OO_Service.CreateInstance('com.sun.star.frame.Desktop');
         end;
        if (VarIsEmpty(OO_DeskTop) or VarIsNull(OO_DeskTop)) then
         begin
           MessageDlg('Le service Open Office n''est pas ouvert',mtError,[mbOk],0);
           Exit;
         end;
        properties:=VarArrayCreate([0,0],varVariant);
        CoreServ:= OO_Service.CreateInstance('com.sun.star.reflection.CoreReflection');
        CoreServ.forName('com.sun.star.beans.PropertyValue').CreateObject(prop);
        prop.name:='Hidden';
        prop.Value:=True; //true
        properties[0]:=prop;
     
     
        // Ouverture document
        OO_FileName:=FileToURL(FileOpenDialog1.FileName);
        OO_Doc := OO_Desktop.LoadComponentFromURL(OO_FileName,
                                                  '_blank',
                                                   0,
                                                  properties);
        texte:= OO_Doc.getText;
        Memo1.Lines.Clear; 
        Memo1.Lines.Add(Texte.GetString);
        OO_Service:= unAssigned;
     end;
    end;
     
    end.
    et cela fonctionne, open office caché
    C'est un peu longuet toutefois (normal temps de chargement de Open Office)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 425
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut
    @ SergioMaster,

    Alors la tu m'épates, en effet cela fonctionne correctement mais je suppose que le temps d'attente est normal (ouvrir lire fermer).

    Seule modifications que j'ai du apportées c'est que j'utilise Seven et Delphi 6 (cela me suffit pour bricoler).

    Encore un grand merci pour ta patience, je vais quand même étudier ta solution pour ne pas mourir idiot.

    @+,

    cincap

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

Discussions similaires

  1. Comment Ouvrir un "blob" avec une commande sql
    Par rouletabille63 dans le forum SQL
    Réponses: 7
    Dernier message: 31/01/2014, 17h19
  2. Comment insérer le résultat d'une commande avec vim
    Par zelda dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 28/12/2005, 09h32
  3. Comment créer un lien hypertexte avec une liaison OLE Excel ?
    Par vieuxsinge dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 08/12/2005, 17h16
  4. Réponses: 10
    Dernier message: 19/05/2004, 15h44
  5. comment rendre invisible une FormStyle->fsMDIchild
    Par caluloa dans le forum C++Builder
    Réponses: 5
    Dernier message: 16/05/2003, 14h21

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