Page 1 sur 1

[R] Empêcher le gui de se fermer

Posté : ven. 10 janv. 2014 12:30
par labougie
Bonjour,

J'ai réalisé ma convertion de batch en autoit avec votre aide.
Aujourd'hui, je souhaite comprendre pourquoi mon gui se ferme.

Cas 1 fonctionnel (mon gui est toujours présent)
Je lance le script avec les bonnes données, il déroule normalement, me donne le logfile attendu, puis je peux faire une nouvelle recherche (à partir du gui) sans avoir à refaire un double clique sur l'exe.

Cas 2 non fonctionnel (mon gui disparaît)
Je lance le script avec une mauvaise donnée, (volontairement ou pas), il déroule normalement, me donne le logfile attendu, (pas de fichier trouvé ou alors l'option choisie n'est pas correcte), puis le gui se ferme. Pour faire une nouvelle recherche je dois refaire un double clique sur l'exe.
C'est assez râlant car j'estime que c'est une perte de temps.

Le début du script contient la présentation physique du gui, voici une partie de la boucle infinie
► Afficher le texte
J'ai plusieurs IF que se suivent, j'ai retiré

Exit mais rien n'y fait, dés que l'option choisie n'est mauvaise,(ou que le script ne trouve pas ce que nous lui demandons), j'ai bien la msgbox, le logfile, mais le gui disparaît ensuite.

Comment puis je gérer ce différent?

Labougie

Re: [..] Empêcher le gui de se fermer

Posté : ven. 10 janv. 2014 12:40
par Tlem
Bonjour.
Je n'ai pas regardé dans le détail le code, mais sachez que ceci :

Code : Tout sélectionner

If ($max) <> ("all") or ("")  then ; Si l'utilisateur a saisi une mauvaise option.
    MsgBox (16, "Erreur"," Vous avez utilisé l'option " & """" & $max & """" & " cette option est inconnue" & @crlf & "Attention utiliser soit " & @crlf &  """all"" pour lister tous les lecteurs " &  @crlf & "soit ne rien inscrire dans la case option")
    Exit
EndIf
implique obligatoirement la fermeture de votre script et par conséquent de votre GUI à cause de l'instruction Exit.
L'instruction ContinueCase serait probablement plus appropriée. ;)

Re: [..] Empêcher le gui de se fermer

Posté : ven. 10 janv. 2014 12:44
par labougie
Bonjour Thierry,

Merci pour la réponse, je fais les tests nécessaires, et vous dis quoi.

A première vue cela semble fonctionner.

labougie

Re: [..] Empêcher le gui de se fermer

Posté : sam. 11 janv. 2014 21:57
par mikell

Code : Tout sélectionner

If ($max) <> ("all") or ("")  then ...
ça veut dire quoi ça ? :shock:

Re: [..] Empêcher le gui de se fermer

Posté : sam. 11 janv. 2014 22:01
par jguinch
Ca veut surement dire

Code : Tout sélectionner

If $max <> "all" or $max <> ""  then ...

Re: [..] Empêcher le gui de se fermer

Posté : dim. 12 janv. 2014 02:03
par jchd
Pour clarifier plus avant les deux réponses qui précèdent à l'attention de futurs lecteur de ce fil, non, ça ne veut pas "dire ça" : c'est plutôt ce qu'on peut raisonnablement imaginer que l'auteur voulait exprimer.

Les parenthèses étant inutiles dans l'instruction telle que présentée,
If $max <> "all" OR "" Then ...
s'évalue selon la hiérarchie des opérateurs (Language Reference - Operators: precedence), soit
($max <> "all") OR ""
soit un booléen ($max <> "all") qui devient le premier opérande de
booléen OR ""
où la chaîne vide est convertie en booléen (puisque OR s'applique à deux booléens), et est évaluée à False (*), soit :
booléen OR False
ce qui équivaut à booléen.

En fin de compte, l'instruction équivaut donc à :
If $max <> "all" Then ...

Il est bon d'en tirer le corollaire : dans cette instruction-ci
If $max <> "all" OR "chaîne non vide" Then ...
la condition vaut toujours True, donc Then est toujours exécuté.

(*) Language Reference - Datatypes
Booleans
...
When you use string comparisons with Boolean values, the following rules apply:
Only an empty string ("") will be a Boolean False
Any other string values (including a string equal "0") will be a Boolean True

Re: [..] Empêcher le gui de se fermer

Posté : dim. 12 janv. 2014 19:46
par labougie
Bonjour Tous,

Le "continuecase" est bien la solution à mon problème.
Il a donc aussi fallu que je revois le code afin de mieux gérer le problème des "inputs" vides ou ayant une mauvaise option.

---
mikell a écrit :

Code : Tout sélectionner

If ($max) <> ("all") or ("")  then ...
ça veut dire quoi ça ? :shock:
$Max représente l'option possible, à savoir "all" pour lister tous les lecteurs ou alors "vide" pour laisser le choix de la combobox "Drives"
Le langage boléen est parfois très précieux, et je suis loin de le maîtriser.

J'ai donc solutionné, plutôt contourner mon problème ainsi. (suite au continuecase).

J'ai remplacé ceci

Code : Tout sélectionner

If ($max) <> "all" or ""  then ...
par
► Afficher le texte
$opt ou $max option soit all soit "" soit une erreur de saisie
$choisir résultat de la guictrlread (choix des lecteurs)

Jchd a écrit :Les parenthèses étant inutiles dans l'instruction telle que présentée,
Le dos impose les "" de mémoire quand il y a des espaces vides dans le path, du coup je suis focalisé sur elles.
Je vais tâcher d'être plus averti pour faire un script plus propre.

labougie

J'ai édité
$opt ou $max ce sont deux variables qui font le même travaille dans deux rubriques différentes du script.
Ayant modifié mon script dans la journée, le script sur la rubrique utilisant $opt a été récupéré pour faire l'édit