[R] Empêcher le gui de se fermer

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
Avatar du membre
labougie
Niveau 4
Niveau 4
Messages : 68
Enregistré le : dim. 03 nov. 2013 14:36
Status : Hors ligne

[R] Empêcher le gui de se fermer

#1

Message 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
Modifié en dernier par labougie le dim. 12 janv. 2014 16:43, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#2

Message 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. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
labougie
Niveau 4
Niveau 4
Messages : 68
Enregistré le : dim. 03 nov. 2013 14:36
Status : Hors ligne

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

#3

Message 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
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#4

Message par mikell »

Code : Tout sélectionner

If ($max) <> ("all") or ("")  then ...
ça veut dire quoi ça ? :shock:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

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

#5

Message par jguinch »

Ca veut surement dire

Code : Tout sélectionner

If $max <> "all" or $max <> ""  then ...
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

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

#6

Message 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
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
labougie
Niveau 4
Niveau 4
Messages : 68
Enregistré le : dim. 03 nov. 2013 14:36
Status : Hors ligne

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

#7

Message 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
Répondre