Page 1 sur 1

[R] boutons dans 2 niveau de GUI

Posté : ven. 26 juin 2009 00:02
par krys
Bonsoir,

J'ai lu les règles du forum français et je vais donc essayer de ne pas fournir d'informations confidentielles sur mon script.

Pour des raisons de compréhension j'ai volontairement supprimé PLEIN de lignes donc ne pas essayer de lancer les lignes suivantes ... ça risque de ne pas fonctionner correctement.

Pour faire au plus clair je vais essayer d'être concis, en gros je doit proposer a mes utilisateurs une fenêtre leur permettant de retarder l'installation d'un logiciel.

Ce script affiche une fenêtre principale et en fonction de l'interaction de chaque utilisateur il peut y avoir une nouvelle fenêtre proposant des "options" d'installation.

Afin de laisser l'utilisateur "libre" de son interaction j'avais opté pour une message box avec un timeout mais mon boss a refusé parce que cette fenêtre n'affiche pas "en temps réel" le timeout de la message box.

J'ai donc créé une fonction avec une fenêtre "interactive" ou l'utilisateur voit le temps défiler via un GUICtrlSetData sur un "label"

Mon soucis est le suivant lorsque la fenêtre "d'installation" ou de "report" s'affiche a l'écran je n'arrive pas a faire le "focus" sur l'interaction des boutons.

D'avance merci pour vos lumières ;-))

......... Si besoin ne pas hésiter a me demander l'intégralité du code :-D
► Afficher le texte

Re: [..] boutons dans 2 niveau de GUI

Posté : mar. 07 juil. 2009 07:51
par SagePourpre
Comme je n'avais qu'une partie du code, je n'ai pas pu tester le script pour me figurer exactement le problème mais


GUICtrlSetState($bouton,$GUI_FOCUS) sert à mettre le focus sur un contrôle en particulier, dans ce cas-ci $bouton.



(Si le problème est littéralement un problème de focus... ça devrait le faire... Par contre, si ça te dit, rajoute le code complet pour que je puisse me faire
une idée exacte du problème

Re: [..] boutons dans 2 niveau de GUI

Posté : ven. 10 juil. 2009 15:26
par krys
Bonjour,

D'abord merci d'avoir pris le temps de me répondre ...

En fait il semble que je me suis mal exprimé mais avec le code ci dessous tu devrais mieux comprendre ce que j'avais définis comme "focus"

Encore merci :-)

Re: [..] boutons dans 2 niveau de GUI

Posté : ven. 10 juil. 2009 16:13
par tolf
Merci d'utiliser des fichiers zip pour des codes aussi longs.

Re: [..] boutons dans 2 niveau de GUI

Posté : ven. 10 juil. 2009 23:58
par SagePourpre
Toujours pas certain de comprendre... J'ai exécuté le code, passé outre le message d'erreur de variables non-déclarées
et puis j'ai une fenêtre qui s'affiche avec beaucoup de label "not-found". Lorsque je clique sur un des deux boutons "not-found"

J'ai une deuxième fenêtre avec un timer...


Ce que je comprends de ta questions ...

Tu as quelque chose comme ça

► Afficher le texte

et tu voudrais avoir "l'emphase" sur un des deux boutons ...


ce qui visuellement donne

► Afficher le texte

Du moins, c'est ce que je comprends du problème... (Finalement ma compréhension de la question reste la même ... )

Re: [..] boutons dans 2 niveau de GUI

Posté : sam. 11 juil. 2009 12:51
par krys
bonjour,

OK effectivement je me suis mal exprimé et le code était bien morcelé.
Pour faire simple, lorsque un de mes user répond a certaines conditions il a une fenêtre qui s'affiche afin de lancer ou retarder l'install d'un soft, mise a jour, etc.

il a possibilité de reporter suivant un fichier INI (non fournis) d'un nombre de fois dépendant de quel MAJ je souhaite leur proposer.

la première fenêtre s'affiche puis en fonction de l'interaction du user une autre fenêtre lui demande de confirmer.

Cette seconde fenêtre a deux boutons, mais ceux ci ne produisent pas l'action souhaitée ... c'est a dire rien :-)

je joint le code en ayant pris soin que celui ci puisse afficher ce que je souhaite (les tempo ont été réduites)

Merci

Re: [..] boutons dans 2 niveau de GUI

Posté : sam. 11 juil. 2009 20:47
par SagePourpre
Effectivement... avec le précédent code, c'était très difficile (vu que tous les labels étaient dans un *.ini non inclus)


En faisant un test rapide avec


opt("TrayIconDebug",1)



J'ai pu voir que lorsque la deuxième fenêtre apparaît, le script reste bloqué à la ligne 261 ou 311 selon le bouton pressé ...

Autrement dit, les boucles Do... Until que tu as construites.


Je regarderais de ce côté là ...

****


Après quelques minutes, voilà une modification qui ne résoud pas le problème mais qui augmente l'efficacité de ton script

Code : Tout sélectionner

While $temp_affichage_install_box > "0"
    Sleep ( 100 )
    $temp_affichage_install_box = 15 - Round(TimerDiff($startboxinstalltimer)/1000,0)
    GUICtrlSetData ( $messageboxinstall_delay_updt, $delai_lance_box &" "& $temp_affichage_install_box &" "& $SecondsTxt ) 
   WEnd
au lieu de ce que tu avais au départ

Code : Tout sélectionner

Do  
    Sleep ( 100 )
        If TimerDiff ($startboxretardtimer) >= "1000" Then
            $temp_affichage_retard_box = ($temp_affichage_retard_box - "1" )
            $startboxretardtimer = TimerInit()
            GUICtrlSetData ( $messageboxretard_delay_updt, $delai_retard_box &" "& $temp_affichage_retard_box &" "& $SecondsTxt ) 
        EndIf


La différence entre ma boucle et la tienne, outre le fait que je suis inconfortable avec les Do... Until, est
que je ne réinitialise pas le Timer à chaque 100 ms ... TimerDiff sert exactement à compter le temps depuis
le début d'un timerinit ... Donc, au lieu de faire 15 timerinit, j'en fais seulement un et utilise TimerDiff pour vérifier...

Je crois que c'est plus "optimisé" comme ça ... m'enfin bon, je replonge sur le pourquoi du comment ...


...
Presque 1 heure plus tard, j'ai une solution

► Afficher le texte


Le script ci-dessus est un exemple de comment procéder.


Même avec le plus petit script, j'ai eu le même problème que toi, c'est-à-dire que la seconde gui ne répondait pas correctement.

Cependant, si on enlève le timer, tout fonctionne correctement, voilà pourquoi j'ai mis le compteur (timer) en adlibenable pour pallier à ce problème.

Pour que ça fonctionne correctement, les variables utilisées par le compteur doivent être déclarées auparavant.


:mrgreen: :mrgreen:

Si jamais il y'a un soucis, n'hésite pas ! ... cela corrige entièrement le problème.


P.s. : Je crois remarquer aussi que tu utilise guicreate pour créer la seconde gui à chaque fois que celle-ci a besoin d'être crée
tu devrais utiliser guidelete plutôt que @SW_HIDE selon moi puisque cette gui est recrée à neuf chaque fois.

Re: [..] boutons dans 2 niveau de GUI

Posté : sam. 11 juil. 2009 21:55
par krys
Encore merci de tes réponses

Après avoir essayer ce que tu a posté l'effet en reste identique sur la seconde fenêtre l'action sur le bouton n'a aucun effet :(

Re: [..] boutons dans 2 niveau de GUI

Posté : sam. 11 juil. 2009 22:16
par SagePourpre
krys a écrit :Encore merci de tes réponses

Après avoir essayer ce que tu a posté l'effet en reste identique sur la seconde fenêtre l'action sur le bouton n'a aucun effet :(
Pourtant ...
code 2.zip
(2.66 Kio) Téléchargé 146 fois

J'ai appliqué la modification avec adlibenable et rajouté une boîte de message qui fonctionne bien...


Si tu appuies sur exécuter dans la première fenêtre, puis dans la deuxième
Une msgbox va apparaître derrière ta gui ... ce qui prouve bien que le script
réagit à Guictrlsetonevent($Yes_install_button,"Yes_install_button")

Si tu remplaces la boîte de message par $timer = 0, la nouvelle valeur va être prise en compte immédiatement après.

Re: [..] boutons dans 2 niveau de GUI

Posté : sam. 11 juil. 2009 22:47
par krys
Merci j'ai bien vu la msgbox apparaitre

il vas falloir que je bûche encore un peu dessus alors afin d'intégrer complètement ta solution...

Merci