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

Lazarus Pascal Discussion :

Lancement de Libre Office dans une TForm sous Windows


Sujet :

Lazarus Pascal

  1. #1
    Invité
    Invité(e)
    Par défaut Lancement de Libre Office dans une TForm sous Windows
    Bonjour,

    Ma première question est idiote... mais j'ose la poser quand même

    Objectif : Sous Windows, lancer un session de Libre Office dans une TForm.

    Approche : je lance sWriter à partir de Lazarus en utilisant un TShellExecuteInfoA (sous Lazarus) ou un TShellExecuteInfo (Sous Delphi)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ExecAndWait('swriter', '--norestore --nologo')
    sWriter ouvre par son mécanisme propre, une fenêtre "Sans Nom 1".
    Je cherche cette fenêtre (EnumWindows) et l'affecte à une TForm (SetParent) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      then begin
          EnumWindows(@EnumWindowsProc,0);
          Windows.SetParent( fWriterHandle, Handle );
      end;
    Un handle est attribué à l'ouverture de swriter (TShellExecuteInfoA.info), un processus long qui amène à l'affichage de la fenêtre que je repère par fWriterHandle : le code ici présent ne fonctionne pas du fait de la latence de l'ouverture de sWriter à l'apparition de la fenêtre "Sans nom 1". Donc je suis obligé de faire une boucle (avec un TTimer) sur mon EnumWindows qui fonctionne ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if IsWindowVisible(wHandle) then
       if pos('LibreOffice', sTitle ) > 0 then //Un peu bidouille mais je n'ai pas trouvé mieux (Toutes les fenêtres ouvertes par défaut contiennent "Libre Office" dans GetWindowText(wHandle, Title,...) 
         fWriterHandle := wHandle;
    En résumé : je lance sWriter. Celui-ci ouvre une fenêtre "Sans Nom 1" et c'est cette fenêtre que je veux voir apparaître dans une TForm. Le code que j'ai produit avec la boucle est fonctionnel mais je le trouve mal habile et cherche à l'améliorer.

    Questions : Je me demandais si à partir de ExecAndWait, il était possible de détecter l'ouverture de la fenêtre Sans Nom 1 afin de lui affecter comme parent une TForm ou mieux, si dés le départ au lancement de sOffice il était possible de l'affecter à une nouvelle TForm, ce qui serait la solution idéale.

    Remarque : l"approche est particulière à Libre Office. Rien à voir avec la gestion de NotePad dont l"ouverture de la fenêtre ne se fait qu"à partir d'un seul "programme". Pour Libre Office, ce n'est pas le cas : il utilise une succession de sous-programmes.

    Cordialement. Gilles


    PS : autre question idiote. J'ai hésité à poser également la question sur le forum Delphi. Dans les 2 cas, l'approche est identique. Il faut espérer qu'un utilisateur de Delphi lise le forum Lazarus ? Il n'y a pas de partie commune aux 2 forums alors que 90% du code Lazarus Windows LCL peut être compatible avec le code Delphi VCL ?
    Dernière modification par Alcatîz ; 18/03/2018 à 11h26. Motif: préfixe

Discussions similaires

  1. [LibreOffice][Base de données] Indexation sans doublon dans une table sous Libre Office Base, où la trouve t'on ?
    Par Zhebulon dans le forum OpenOffice & LibreOffice
    Réponses: 0
    Dernier message: 09/03/2018, 09h18
  2. Réponses: 0
    Dernier message: 08/01/2013, 16h25
  3. Interdire le Clic Droit dans une appli sous windows XP
    Par new-gate dans le forum Windows
    Réponses: 10
    Dernier message: 03/11/2005, 23h37
  4. Comment inserer une image dans une table sous sql qerveur
    Par zeddy23 dans le forum Bases de données
    Réponses: 4
    Dernier message: 25/02/2005, 08h51
  5. Réponses: 8
    Dernier message: 17/03/2004, 14h40

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