Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour à tous,
Je viens tout juste de migrer une application PB 5.0 en PB 12.0.
Je suis confronté au problème suivant :
Lors de l'ouverture d'un document Word, l'application PowerBuilder reste au premier plan.
Sous PB 5.0 le document Word était bien au premier plan. J'ai donc essayé d'utiliser les fonctions SetForegroundWindow et FindWindowA mais c'est toujours le même résultat. L'application est toujours au premier plan.
A l'ouverture de ce document Word une macro est exécutée. Cette macro ouvre des MessageBox de saisie.
Outils : PowerBuilder 12.0 sous Windows Seven et Microsoft Word 2003.
Merci pour votre aide.
Dernière modification par Damien (06-12-2012 10:55:53)
Hors ligne
Tu ouvres comment ton doc word ? Avec Run ?
Personellement j'évite Run, car aucun contrôle sur l'applie lancée, au profit d'ole.
OleObject lol_word lol_word = Create OleObject lol_word.ConnectToObject( "C:\...\foobar.doc") lol_word.Application.visible = true lol_word.Application.Activate
Hors ligne
Oui je l'ouvre via :
ole.object.application.documents.open(...doc)
Édit : code=pb
Dernière modification par Damien (06-12-2012 10:53:21)
Hors ligne
Merci d'avance
Hors ligne
Nickel Damien, t'as essayé d'ajouter le .activate ?
Hors ligne
Oui, même résultat. Une information en plus : quand la fenêtre de saisie s'ouvre sous Word je ne peux plus rien faire sous mon application PB (sablier)
Hors ligne
Donc le ".activate" n'est pas exécuté.
Si tu n'exécute pas la macro, ça fonctionne ?
Dans ce cas, ne pas lancer la macro à l'ouverture du coument, mais la déclencher depuis ton application (après le .activate)
Hors ligne
Alors pour que ce soit plus clair voici le code :
string ls_version boolean lb_readonly SetPointer( HourGlass! ) is_document = as_document // crée une instance Word IF ole.insertclass( "word.application" ) < 0 THEN RETURN -901 // impossible d'ouvrir Word END IF // Affiche la fenêtre de Word et maximize l'écran ole.object.application.visible = TRUE ole.object.application.WindowState = 1 // Ouvre le document lb_readonly = ab_readonly ole.object.application.StatusBar = "1. Veuillez patienter quelques instants...Ouverture du document en cours. " ole.object.application.documents.open(is_path_modeles + "\" + as_document + is_extension,false, lb_readonly) IF ib_inError THEN ib_inError = FALSE return -903 END IF // ajoute le fichier de macros dans les compléments de macro du document ole.object.application.AddIns.Add(is_path_modeles + "\" + as_modele_macro, True ) IF ib_inError THEN ib_inError = FALSE return -904 END IF ole.object.application.StatusBar = "2. Veuillez patienter quelques instants...Création du document en cours. " IF ib_inError THEN ib_inError = FALSE return -905 END IF ole.object.system.cursor = 0 IF ib_inError THEN ib_inError = FALSE return -906 END IF ole.object.application.activate // Exécute la macro ole.object.application.run( as_macro + as_parametre) IF ib_inError THEN ib_inError = FALSE return -907 END IF RETURN 0
Je préfère mettre tout le code, peut être que vous verrez le truc qui fait que ça fonctionne pas.
Dernière modification par Damien (06-12-2012 10:54:53)
Hors ligne
Si je mets en commentaire cette partie de code :
// Exécute la macro ole.object.application.run( as_macro + as_parametre) IF ib_inError THEN ib_inError = FALSE return -907 END IF
Le document Word n'est toujours pas au premier plan.
Dernière modification par Damien (06-12-2012 10:55:18)
Hors ligne
Je ne trouve toujours pas de solution, avez vous des idées ? des remarques ?
Edit :
En fait, j'ouvre un document Word. Ensuite j'exécute la macro. Cette macro ouvre un deuxième document Word avec des MessageBox de saisie. C'est ce dernier document Word (+ MessageBox de saisie) que je n'arrive pas à mettre au premier plan.
Dernière modification par Damien (07-07-2010 07:52:32)
Hors ligne
Du coup c'est à la macro qui ouvre le 2ème doc de faire le boulot en VBA :
ton_doc.Application.Activate
Hors ligne
Essaie de faire tout ton traitement avec excel invisible et de le rendre visible uniquement à la fin complètement. J'ai déjà eu ce problème avec excel et c'est ce que j'ai fait.
Hors ligne
Merci Erasorz, le .activate m'a mis sur la piste !
Hors ligne
Déterrage de topic level 100
Hors ligne
rincevent a écrit:
Déterrage de topic level 100
Archeologist achievement unlocked !
Hors ligne
N'empêche que le problème était toujours d'actualité il y a encore deux jours ... ;)
Hors ligne