[..] La guerre des boutons

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
linvi
Niveau 2
Niveau 2
Messages : 25
Enregistré le : jeu. 10 juil. 2008 15:31
Status : Hors ligne

[..] La guerre des boutons

#1

Message par linvi »

Bonjour,

J'ai créé une interface utilisateur dans laquelle, lorsque l'utilisateur appui sur un bouton "Start",
un nouveau bouton "Stop" face son apparition.

Jusque là tout c'est déroulé sans aucun problème. Je me suis dit chouette, maintenant il ne me reste plus qu'à supprimer le bouton.
Tien aucune fonction apparente pour pouvoir réaliser ça.

J'ai alors fait quelques recherches sur le net et j'ai réalisé ce que je voulais de la façon suivante:

Code : Tout sélectionner

#include <GuiButton.au3>
.......
$ButtonStop = GUICtrlCreateButton("Stop", 250, 125, 30, 25)
.........
_GUICtrlButton_Destroy($ButtonStop)
Auparavant je m'étais dit que la fonction destroy ne pouvait logiquement s'appliquer que sur des boutons créer comme ceci:

Code : Tout sélectionner

$ButtonStop = _GUICtrlButton_Create($GUI, "Stop", 250, 125, 30, 25)
Hors lorsque je créé le bouton de cette manière, le bouton s'affichait correctement mais lorsque je cliquais dessus rien ne se passais.
Lorsque j'ai transformé le bouton en bouton "normal" j'ai finalement pu détecter un clic sur ce bouton de la manière habituelle.

Code : Tout sélectionner

$nMsg = GUIGetMsg()
     Switch $nMsg
        Case $ButtonStop
             ExitLoop
Mes questions:
[R] Est il possible de supprimer un bouton créer "normalement" sans passer par une fonction nécessitant un #include? Si oui comment? :arrow: Message 2

[R] Est il possible de détecter les actions réalisées sur un bouton créer avec _GUICtrlButton_Create? Si oui comment? :arrow: Message 11

[R] Est il possible de cacher un bouton temporairement? Si oui comment? :arrow: Message 2

[R] Est il possible de rendre un bouton inaccessible (à la maniere du bouton "enregistrer" de firefox)? Si oui comment? :arrow: Message 2

[R] Comment peut on indexé les boutons pour pouvoir réaliser une suite de TAB personnalisée? :arrow: Message 5


Plus d'informations sur les boutons tout au long du post.

Je vous remercie de votre attention.
Je vous tiens au courant de mes recherches
Modifié en dernier par linvi le ven. 18 juil. 2008 10:20, modifié 7 fois.
"Le savoir est une arme....
Maintenant tu sais qu'il est important que les gens qui votent pour moi soient désarmés."

Du stylo
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

Re: [..] La guerre des boutons

#2

Message par jbnh »

pour supprimer un bouton:

Code : Tout sélectionner

$ButtonStop = GUICtrlCreateButton("Stop", 250, 125, 30, 25)
.................

GUICtrlDelete($ButtonStop)
Pour rendre un bouton unitilisable:

Code : Tout sélectionner

GUICtrlSetState($ButtonStop, $GUI_DISABLE)
et pour le réactiver:

Code : Tout sélectionner

GUICtrlSetState($ButtonStop, $GUI_ENABLE)
Pour cacher un bouton:

Code : Tout sélectionner

#include <GUIConstants.au3>
$ButtonStop = GUICtrlCreateButton("Stop", 250, 125, 30, 25)
guictrlsetstate(-1, $GUI_HIDE)
Le reste je sais pas trop
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
linvi
Niveau 2
Niveau 2
Messages : 25
Enregistré le : jeu. 10 juil. 2008 15:31
Status : Hors ligne

Re: [..] La guerre des boutons

#3

Message par linvi »

Tout d'abord, je tiens à te remercier pour tes réponses qui ont pour ma part toutes fonctionnées.

J'ai remaqué que dans de nombreux scripts on retrouvé des "-1" à la place des ControlId et je ne comprenais pas à quoi servait ce mystérieux nombre. Ayant eut du mal à chercher j'ai trouvé en compilant certains exemples.
Il m'en est ressorti que le -1 désigne en réalité la dernière création dans notre box :D
jbnh a écrit : Pour cacher un bouton:

Code : Tout sélectionner

#include <GUIConstants.au3>
$ButtonStop = GUICtrlCreateButton("Stop", 250, 125, 30, 25)
[u]guictrlsetstate([b]-1[/b], $GUI_HIDE)[/u]
Egalement, la valeur $GUI_FOCUS permet de dire à quel endroit (souvent des boutons) vous voulez être placé. Il est utilisable de la maniere suivante:

Code : Tout sélectionner

GUICtrlSetState(-1, $GUI_FOCUS); Met le sélecteur d'objet sur le dernier créé.
Je continue à vous tenir au courant des réponses que je trouve.
Modifié en dernier par linvi le mer. 16 juil. 2008 09:25, modifié 1 fois.
"Le savoir est une arme....
Maintenant tu sais qu'il est important que les gens qui votent pour moi soient désarmés."

Du stylo
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] La guerre des boutons

#4

Message par timmalos »

Il m'en est ressorti que le -1 désigne en réalité la dernière création dans notre box :D
Gagné :!:


Je ne pense pas que l'on puisse indexer des boutons vus que les TAB vont d'en haut à en bas et quand 2 boutons sont sur la même ligne, de gauche à droite.
Donc il suffit de bien positionner ses bouttons pour avoir l'indexation souhaitée.
linvi
Niveau 2
Niveau 2
Messages : 25
Enregistré le : jeu. 10 juil. 2008 15:31
Status : Hors ligne

Re: [..] La guerre des boutons

#5

Message par linvi »

Je vais essayer de trouver des informations à ce sujet mais si les TABs se réalisent dans l'ordre que tu me dit cela peut posé des problèmes dans un bon nombre de frames d'informations et d'options avec tout plein de boutons partout :(


:idea: Bon voilà, je viens de trouver...
Comme d'autres langages et différemment d'autres ( :wink: ) la gestion des tabs est en fait réalisée suivant l'ordre de création des différents objets de l'interface.
Ainsi, si nous créons un bouton puis un champ de texte, le bouton sera sélectionner au départ et le Tab nous amènera ensuite sur le champs texte. A l'inverse, si l'on crée le champ texte avant le bouton, le champ texte sera sélectionné au départ puis lors du Tab le bouton sera sélectionné! (J'espère avoir été clair :roll: )
"Le savoir est une arme....
Maintenant tu sais qu'il est important que les gens qui votent pour moi soient désarmés."

Du stylo
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] La guerre des boutons

#6

Message par timmalos »

Ahhhhh je n'avais jamais fait attention à ca je pensais à... non je pensais mal en fait :roll:

Merci de l'info :wink:
linvi
Niveau 2
Niveau 2
Messages : 25
Enregistré le : jeu. 10 juil. 2008 15:31
Status : Hors ligne

Re: [..] La guerre des boutons

#7

Message par linvi »

Je me permet de relancer une question car elle est cachée au milieu de toutes les autres.

Je veux créer, géré les actions réalisées dessus et supprimé un bouton créé à partir de GuiButton.au3.
linvi a écrit :Code:

#include <GuiButton.au3>
.......
$ButtonStop = GUICtrlCreateButton("Stop", 250, 125, 30, 25)
.........
_GUICtrlButton_Destroy($ButtonStop)
Mon problème vient du fait que lorsque j'appuie sur un bouton créé de la manière suivante, celui-ci ne réalise pas les actions à réaliser. Je pense donc que le switch ne se fait pas de la même manière.

Merci d'avance pour vos infos
"Le savoir est une arme....
Maintenant tu sais qu'il est important que les gens qui votent pour moi soient désarmés."

Du stylo
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] La guerre des boutons

#8

Message par timmalos »

La meilleur solution est d'envoyer ton code car ca devrait marcher, il doit y avoir une erreur quelque part:

pour rester avec guibutton.au3, n'utilise pas


_GUICtrlButton_Destroy($ButtonStop)


mais



GUICtrlDelete($ButtonStop)

Comme te l'avait mis JBNH
linvi
Niveau 2
Niveau 2
Messages : 25
Enregistré le : jeu. 10 juil. 2008 15:31
Status : Hors ligne

Re: [..] La guerre des boutons

#9

Message par linvi »

Bon voilà mon code, lorsque tu exécutera le programme et que tu lanceras Download, le clic sur le bouton Stop ne fonctionnera pas. J'ai mis en gras les lignes correspondant aux boutons.
► Afficher le texteMon Code
Modifié en dernier par linvi le ven. 18 juil. 2008 16:19, modifié 1 fois.
"Le savoir est une arme....
Maintenant tu sais qu'il est important que les gens qui votent pour moi soient désarmés."

Du stylo
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] La guerre des boutons

#10

Message par timmalos »

Je pense que la solution se trouve dans l'exemple de _GUICtrlButton_Create
Regarde la fonction Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
dans cet exemple.

Mais je ne connais pas assez cette UDF pour t'aider d'avantage désolé.

La ou je comprend pas, c'est pourquoi tu n'utilise pas ca qui marche très bien:

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <GuiButton.au3>
#include <WindowsConstants.au3>

$GUI = GUICreate("Firefox Download Automatization", 300, 200, -1, -1)
GUICtrlCreateLabel("This Program will help you to download automatically the", 10, 30)
GUICtrlCreateLabel("last version of Firefox!",95 , 50)

$Telecharger = GUICtrlCreateButton("Download" , 161, 125, 80 , 35) ; bouton
$ButtonStop = GUICtrlCreateButton("Stop", 250, 125, 30, 35)
;$ButtonStop = _GUICtrlButton_Create($GUI, "Stop", 250, 125, 30, 35)
$ButtonQuit = GUICtrlCreateButton("Quit", 250, 125, 30, 35)
$grouppercent = GUICtrlCreateGroup("", 10,120, 60,40)
$progressbar1 = GUICtrlCreateProgress (10 , 170 , 280 , 20) ; processbar
$percentage = 100.0


GUICtrlSetColor (- 1 , 32250) ;thème Windows
GUISetState(@SW_SHOW)
GUICtrlSetState($Telecharger, $GUI_FOCUS)
GUICtrlSetState($ButtonQuit, $GUI_HIDE)
;GUICtrlSetState($ButtonStop, $GUI_HIDE)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $Telecharger
            GUICtrlSetData ( $progressbar1 , 0 )
            GUICtrlSetState($ButtonQuit, $GUI_HIDE)
            GUICtrlSetState($Telecharger, $GUI_DISABLE)
            ;GUICtrlSetState($ButtonStop, $GUI_SHOW)
            GUICtrlSetState($ButtonStop, $GUI_FOCUS)
            Global $Url = "http://download.mozilla.org/?product=firefox-3.0rc2&os=win&lang=fr";ici le lien du logiciel à dl http://download.mozilla.org/?product=fi ... in&lang=fr
            InetGet( $Url , @DesktopDir&"/Install-FireFox.exe", 1, 1);il sera dl sur le bureau
            $FileSize = InetGetSize ( $Url ) ; ceci calcul la taille de ton fichier qui se trouve sur internet
           
            While @InetGetActive
                ;$i = TrayTip("Download...",  Int ( ( @InetGetBytesRead * 100 ) / $FileSize )&" %", 10, 16)
                GUICtrlSetData ( $progressbar1 , Int ( ( @InetGetBytesRead * 100 ) / $FileSize ) )
                ;$percentage= (Int(( @InetGetBytesRead * 100 )*100 / $FileSize)/10)
                    ;GUICtrlCreateLabel(Int(( @InetGetBytesRead * 100 )*10 / $FileSize)/10, 60, 90)
                If ($percentage <> (Int(( @InetGetBytesRead * 100 ) / $FileSize))) Then
                    $percentage= (Int(( @InetGetBytesRead * 100 ) / $FileSize))
                    GUICtrlCreateLabel($percentage & "%", 15, 135)
                EndIf
                Sleep(50)
                $nMsg = GUIGetMsg()
                    Switch $nMsg
                        Case $ButtonStop
                            FileDelete("Install-Firefox.exe")
                            ExitLoop
                            FileDelete("Install-Firefox.exe")
                        Case $GUI_EVENT_CLOSE
                            Exit
                    EndSwitch
            Wend
            If (Int ((@InetGetBytesRead * 100 ) / $FileSize) = 100) Then
                $percentage= (Int(( @InetGetBytesRead * 100 ) / $FileSize))
                GUICtrlCreateLabel($percentage & "%", 15, 135)
                $i = TrayTip("Download Done!", "Firefox Download is complete!", 10 , 1)
            Else   
                $i = TrayTip("Download Aborted!", "Firefox Install has been removed!", 10)
            EndIf
            GUICtrlSetState($ButtonQuit, $GUI_SHOW)
            ;_GUICtrlButton_Destroy($ButtonStop)
            GUICtrlDelete($ButtonStop)
            
            GUICtrlSetState($Telecharger, $GUI_ENABLE)
            ;GUICtrlSetState($ButtonStop, $GUI_HIDE)
            Sleep(1000)
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $ButtonQuit
            ExitLoop
    EndSwitch
WEnd
linvi
Niveau 2
Niveau 2
Messages : 25
Enregistré le : jeu. 10 juil. 2008 15:31
Status : Hors ligne

Re: [..] La guerre des boutons

#11

Message par linvi »

timmalos a écrit :La ou je comprend pas, c'est pourquoi tu n'utilise pas ca qui marche très bien
C'est juste pour essayer de comprendre comment fonctionne les boutons qui viennent de GUIButton.au3. C'est juste pour approfondir :wink:

Comment utilisé un bouton créé avec GuiButton.au3?

Tout d'abord je vous conseille d'aller voir l'aide pour la fonction suivante;
- _GUICtrlButton_SetDontClick

Il faut en fait réaliser plusieurs fonctions, une fonction principale qui sera lancé au démarrage de l'éxécution du programme (Func _Main())
Dans cette fonction on va appeler la fonction WM_COMMAND dans laquelle nous allons analyser les interactions sur les boutons.



Bon voilà, toutes les questions que j'ai posée ont étaient résolues, je met donc [R] en en-tête du post (jusqu'à que je trouve de nouvelles questions 8) )
"Le savoir est une arme....
Maintenant tu sais qu'il est important que les gens qui votent pour moi soient désarmés."

Du stylo
linvi
Niveau 2
Niveau 2
Messages : 25
Enregistré le : jeu. 10 juil. 2008 15:31
Status : Hors ligne

Re: [R] La guerre des boutons

#12

Message par linvi »

Et je repars à l'assaut :p

Bon voilà, j'aimerais savoir si il est possible de modifié des propriétés d'un bouton, je veux par exemple dans mon script plus haut, changer le bouton Download - en bouton Resume lorsque j'appui sur le bouton Stop.

J'ai absolument rien trouvé.
Faut il pour cela créer obligatoirement un nouveau bouton?

Merci
"Le savoir est une arme....
Maintenant tu sais qu'il est important que les gens qui votent pour moi soient désarmés."

Du stylo
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] La guerre des boutons

#13

Message par timmalos »

GuiCtrlSetData("tonboutton","ton nouveau texte") :)


ET content que tu es reussi a utilisé le WM_COMMAND et WM_NOTIFY.
linvi
Niveau 2
Niveau 2
Messages : 25
Enregistré le : jeu. 10 juil. 2008 15:31
Status : Hors ligne

Re: [..] La guerre des boutons

#14

Message par linvi »

Encore merci pour ta réponse Tim :)

Je suis en train de plancher sur quelque chose, je vous tiens au courant (mystère et boule de gomme...)
"Le savoir est une arme....
Maintenant tu sais qu'il est important que les gens qui votent pour moi soient désarmés."

Du stylo
linvi
Niveau 2
Niveau 2
Messages : 25
Enregistré le : jeu. 10 juil. 2008 15:31
Status : Hors ligne

Re: [..] La guerre des boutons

#15

Message par linvi »

Comment utiliser un bouton pour réaliser plusieurs actions différentes?

Il m'a semblait intéressant de pouvoir utiliser un bouton pour réaliser plusieurs actions différentes suivant le nom que le bouton possède.
Voici comment faire rapidement ce petit tour de passe-passe :wink:

Tout d'abord nous allons créer un bouton qui sera stocké dans la variable $telecharger.

Code : Tout sélectionner

$Telecharger = GUICtrlCreateButton("Download" , 161, 125, 80 , 35)
Une fois ce bouton créer, nous allons faire en sorte qu'il permette de lancer le fichier télécharger.

Code : Tout sélectionner

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $Telecharger
           If ($temp = "Download") Then
                  GUICtrlSetData($Telecharger , "Install") ; Change le nom du bouton
               Else
                   Run(MonExec.exe)
               EndIf
        Case .....
    EndSwitch
WEnd
 
Et voilà :!:
"Le savoir est une arme....
Maintenant tu sais qu'il est important que les gens qui votent pour moi soient désarmés."

Du stylo
linvi
Niveau 2
Niveau 2
Messages : 25
Enregistré le : jeu. 10 juil. 2008 15:31
Status : Hors ligne

Re: [..] La guerre des boutons

#16

Message par linvi »

Je viens de trouver une sorte de bug que je ne comprends absolument pas, lorsque je déplace la création d'un de mes boutons, celui-ci est normal ou colorié en bleu oO Voici les 2 code...
► Afficher le texteBouton Donwload Normal
► Afficher le texteBouton Download Bleu
"Le savoir est une arme....
Maintenant tu sais qu'il est important que les gens qui votent pour moi soient désarmés."

Du stylo
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] La guerre des boutons

#17

Message par timmalos »

Re:)
Alors ta petite erreur vient de ce fait:

Debut de ton script:

Code : Tout sélectionner

include <GUIConstantsEx.au3>
#include <GuiButton.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>

$GUI = GUICreate("Firefox Download Automatization", 300, 200, -1, -1)

$picb = GUICtrlCreatePic("C:\firefox.jpg",0,0,300,200,BitOR($WS_GROUP,$WS_CLIPSIBLINGS))
$txt1 = GUICtrlCreateLabel("This Program will help you to download automatically the", 10, 30)
$txt2 = GUICtrlCreateLabel("last version of Firefox!",95 , 50)
GUICtrlSetBkColor ( $txt1 , $GUI_BKCOLOR_TRANSPARENT  )
GUICtrlSetBkColor ( $txt2 , $GUI_BKCOLOR_TRANSPARENT  )


$ButtonStop = GUICtrlCreateButton("Stop", 250, 125, 30, 35)
$ButtonQuit = GUICtrlCreateButton("Quit", 250, 125, 30, 35)
$grouppercent = GUICtrlCreateGroup("", 10,120, 60,40)
$grouppercent = GUICtrlCreateGroup("", 99, 99, 1 ,1)
$progressbar1 = GUICtrlCreateProgress (10 , 170 , 280 , 20) ; processbar
$Telecharger = GUICtrlCreateButton("Download" , 161, 125, 80 , 35) ; bouton

If (FileExists(@DesktopDir&"/Install-FireFox.exe") = 1) Then
    $FileSizeIn = FileGetSize (@DesktopDir&"/Install-FireFox.exe")
EndIf
;If ($FileSize = $FileSizeIn) Then
;GUICtrlSetData($Telecharger , "Install")
;EndIf

$percentage = 0
$temp = GUICtrlRead($Telecharger)

GUICtrlSetColor (- 1 , 32250) ;thème Windows
GUISetState(@SW_SHOW)
Cette ligne :

Code : Tout sélectionner

GUICtrlSetColor (- 1 , 32250) ;thème Windows
met le theme windows au guictrlcreate precedant, vu que tu n'a pas donné de nom mais ecrit -1.
Donc si en dernier tu cree ton boutton, c'est lui qui passe en bleu:=), sinon c'est la progressbar
linvi
Niveau 2
Niveau 2
Messages : 25
Enregistré le : jeu. 10 juil. 2008 15:31
Status : Hors ligne

Re: [..] La guerre des boutons

#18

Message par linvi »

Merci Tim

La guerre des boutons commence à s'essouffler, la paix semble devenir de plus en plus une réalité grâce à tes nombreuses réponses... Nous sommes sur la bonne voie! Continuons camarade :wink:

:arrow: Sais tu si l'on peut modifié la taille d'un bouton? Je viens de regarder là et j'ai essayé quelques fonctions mais sans succès.

:arrow: Lorsque le téléchargement de l'installeur de firefox est terminée, mon script me permet de lancer l'installation automatique de firefox. J'aimerais pouvoir stopper l'éxécution de ce script lorsque j'appui sur le bouton $ButtonQuit

Code : Tout sélectionner

$ButtonQuit = GUICtrlCreateButton("Quit", 250, 125, 30, 35)
► Afficher le texteScript d'installation automatique
La seule manière qui m'a semblait fonctionnée était de faire une fonction extérieure qui serait appellée avant chaque WinwaitActive et qui ressemblerait à une fonction de switch.
J'ai pas encore testé mais ça me semble trés trés moche.
Si vous avez une idée, je suis tout ouïe!
► Afficher le texteFonction test bouton
"Le savoir est une arme....
Maintenant tu sais qu'il est important que les gens qui votent pour moi soient désarmés."

Du stylo
linvi
Niveau 2
Niveau 2
Messages : 25
Enregistré le : jeu. 10 juil. 2008 15:31
Status : Hors ligne

Re: [..] La guerre des boutons

#19

Message par linvi »

linvi a écrit ::arrow: Lorsque le téléchargement de l'installeur de firefox est terminée, mon script me permet de lancer l'installation automatique de firefox. J'aimerais pouvoir stopper l'éxécution de ce script lorsque j'appui sur le bouton $ButtonQuit
Je viens de voir qu'il existe une méthode évènementielle, je pense que cela répondra a mon problème, je vous tiens au courant.
"Le savoir est une arme....
Maintenant tu sais qu'il est important que les gens qui votent pour moi soient désarmés."

Du stylo
Répondre