Page 1 sur 1

[R] Pourquoi ces lignes s'éxécutent quand elles sont seules

Posté : jeu. 27 mars 2008 10:56
par MissTi
Bonjour,
Depuis 1 semaine que je bosse sur un script, il y a quelque chose que je ne comprend pas.

Le script suivant, lorsqu'il est seul, s'exécute sans problèmes:

Code : Tout sélectionner

WinWait("MapInfo Professional","")
    WinMenuSelectItem("MapInfo Professional","","&Vertical Mapper","Show Grid Manager")
    WinWait("Grid Manager","")
    WinActivate("Grid Manager","")
    WinWaitActive("Grid Manager","")
La fenêtre "Grid Manager" apparaît.

Si j'inclue ce script dans un autre script, cette fenêtre "Grid manager" n'apparaît plus. :shock: :shock:

Code : Tout sélectionner

    ....
    WinActivate("MapInfo Professional","")
    if winexists("Démarrage", "") then     ControlClick("Démarrage", "", "Button7")
    ; on tente de lancer la fenêtre Grid Manager...
    WinWait("MapInfo Professional","")
    WinActivate("MapInfo Professional","")
    WinMenuSelectItem("MapInfo Professional","","&Vertical Mapper","Show Grid Manager")
    WinWait("Grid Manager","")
    WinActivate("Grid Manager","")
    WinWaitActive("Grid Manager","")
    .....
C'est l'horreur car ça m'empêche de continuer. Quelqu'un saurait m'expliquer cette différence d'exécution?

Re: Pourquoi ces lignes s'éxécutent quand elles sont seules?

Posté : jeu. 27 mars 2008 13:09
par moutelous
Bonjour,

En supposant que le

Code : Tout sélectionner

EndIf
se trouve après

Code : Tout sélectionner

WinWaitActive("Grid Manager","")
(sinon c'est une faute de syntaxe), êtes vous sûr que la condition du If est bien vérifiée ? C'est à dire entre-t-on bien dans la boucle ?

A+

Re: Pourquoi ces lignes s'éxécutent quand elles sont seules?

Posté : jeu. 27 mars 2008 13:23
par moutelous
Re,

Oups , lecture trop rapide, il n'y a bien sûr pas de faute faute syntaxe dans ce cas là ....

A+

Re: Pourquoi ces lignes s'éxécutent quand elles sont seules?

Posté : jeu. 27 mars 2008 13:30
par MissTi
il n'y a bien sûr pas de faute faute syntaxe dans ce cas là ...
Moutelous, as-tu une idée sur mon problème?
Parce que je suis bien embêtée...

Re: [..] Pourquoi ces lignes s'éxécutent quand elles sont seules

Posté : jeu. 27 mars 2008 22:57
par Tlem
Je dirais que cette ligne est de trop :

Code : Tout sélectionner

; on tente de lancer la fenêtre Grid Manager...
    WinWait("MapInfo Professional","")  ; <= Celle-ci

Re: [..] Pourquoi ces lignes s'éxécutent quand elles sont seules

Posté : ven. 28 mars 2008 00:15
par moutelous
Yes TLem, on pourrait avoir ce genre de réflexion à la vue des messages précédents, mais bon logiquement et fonctionnellement cela n'a aucun sens. Si néanmoins ton hypothèse est vérifié il y a un vrai bug !

A+

Re: [..] Pourquoi ces lignes s'éxécutent quand elles sont seules

Posté : ven. 28 mars 2008 07:42
par Tlem
Effectivement, après quelques essais avec le bloc note, ce ne peut pas être ça !
Dans ce cas une autre chose qui peut poser problème c'est cette ligne :

Code : Tout sélectionner

    if winexists("Démarrage", "") then     ControlClick("Démarrage", "", "Button7")
 
a vérifier ...

Re: [..] Pourquoi ces lignes s'éxécutent quand elles sont seules

Posté : ven. 28 mars 2008 09:41
par MissTi
J'ai fini par faire autrement:

Code : Tout sélectionner

Send("{ALTDOWN}v{ALTUP}{DOWN}{DOWN}{DOWN}{DOWN}{ENTER}")
Je n'y avait pas pensé avant (ça va rentrer tout ça.... ça rentre petit à petit...)

Par contre, j'ai bien noté vos remarques sur les WinWait()
logiquement et fonctionnellement cela n'a aucun sens.
.
J'avoue que j'ai un peu de mal à comprendre quand mettre tous les WinQuelquechose, même si je comprend ce à quoi ils servent:
WinWait(): attendre que la fenêtre existe.
WinExists(): la fenêtre existe-t-elle?
WinWaitActive(): Attendre que la fenêtre soit active
WinActivate(): rendre active la fenêtre
WinActive(): la fenêtre est-t-elle active?
Vaut-il mieux :

Code : Tout sélectionner

    WinWait("Grid Manager","")
    If Not WinActive("Grid Manager","") Then WinActivate("Grid Manager","")
    WinWaitActive("Grid Manager","")
ou

Code : Tout sélectionner

    WinWait("Grid Manager","")
    If Not WinActive("Grid Manager","") Then WinActivate("Grid Manager","")
    WinWait("Grid Manager","")

Faut-il activer une fenêtre pour utiliser son menu ou ses contrôles?

(Je sais que tout ça se sont des questions de bases, mais une fois ça compris, ça ira mieux...)

Re: [..] Pourquoi ces lignes s'éxécutent quand elles sont seules

Posté : ven. 28 mars 2008 14:40
par tolf
Je ne sais pas si le problème vient de là mais je viens moi-même d'essayer un script qui doit activer une fenêtre avec :

Code : Tout sélectionner

WinActivate("mon_titre en entier")
et je n'ai pas réussir à rendre ma fenêtre active (j'avais pourtant mis le titre exact de la fenêtre et j'ai vérifié en utilisant l'exemple de la fonction WinList).
Il y a donc peut-être un problème de titres qui ne marchent pas (dans mon cas il y avait un espace dans le titre : peut-être que ça a un rôle dans l'affaire ?)
Dans ce cas essayez de mettre cette ligne au début du script :

Code : Tout sélectionner

Opt("WinTitleMatchMode", 2)
Cela permet de choisir l'option "Match any substring in the title", ce qui veut dire qu'il suffit de mettre une partie du titre de la fenêtre pour que ça marche (c'est valable pour toutes les fonctions WinQuelquechose) :

Code : Tout sélectionner

WinActivate("mon_titre")