[R] Icones qui disparaissent GUI

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
0xyg3n
Niveau 2
Niveau 2
Messages : 25
Enregistré le : jeu. 07 mars 2013 22:43
Status : Hors ligne

[R] Icones qui disparaissent GUI

#1

Message par 0xyg3n »

Bonjour,

Je me suis lancé dans la fabrication d'une GUI pour facilité l'utilisation d'un outil d'extraction pour des collègues de boulot.
Après une rude bataille pour réussir à remplacer les boutons par des icônes "cliquables" avec une changement d'images lorsque le curseur de la souris passe dessus. (tous cela à partir d'une lecture d'un .dll)
Etant nouveau pour moi il a fallut que je fase beaucoup de recherches.

J'ai finalement trouvé cet UDF (http://www.autoitscript.fr/forum/viewto ... =21&t=7132) qui est extrêmement simple d'utilisation je dois dire.
Après test et configuration de cette partie de mon code, tous va bien, cela fonctionne parfaitement.

Cependant, je ne pourrais pas dire pourquoi et la raison, mais maintenant, un des icônes me donne un phénomène bizarre.
Ce "bouton Icone" sert en fait à ouvrir un FileOpenDialog() pour sélectionner les fichier souhaités. Maintenant, ça m'ouvre bien la fenêtre pour sélectionner le fichier, mais dès que je bouge la souris, l'icône disparait !
Si je m'amuse a déplacer ma souris sur les autres icônes, après que le premier ai disparu, eux aussi disparaissent.
Lorsque je ferme la fenêtre FileOpenDialog(), et que je repasse sur les icônes, ils réapparaissent...(redéclenchement des Icons_Hover)

La seule chose que j'ai fait entre le moment où ça marchait et le moment ou ça buggait, c'est simplement que j'ai rajouté la fonction _GUICtrlListView_CreateArray() dans l'include "GUIListView.au3" (je ne vois pas comment ça pourrait être lié)

Voici une partie de ma GUI si jamais il y a besoin

Code : Tout sélectionner

;include pour la GUI
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIConstants.au3>
#include <GUIListView.au3>
#include <ListViewConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <_GUIXViewEx.au3>
;Include perso
#include "3StatIcon.au3"
#include <ID_Constantes_v1.0.au3>
#include <toolkit_v1.0.au3>
#include <Array.au3>
#region ### START Koda GUI section ###
Global $GUI = GUICreate($k_GUI_Title, 601, 509, 192, 124)
;GUISetBkColor(0xFFFFFF)
;Création des boutons icônes
Global $I_OpenFile = _3StatIcon_Create("Icons.dll",6,10,5,40,40,"Icons.dll",7,"Icons.dll",7)
Global $I_OpenTree = _3StatIcon_Create("Icons.dll",8,60,5,40,40,"Icons.dll",9,"Icons.dll",9)
Global $I_Extract = _3StatIcon_Create("Icons.dll",4,110,5,40,40,"Icons.dll",5,"Icons.dll",5)
Global $I_Option = _3StatIcon_Create("Icons.dll",10,160,5,40,40,"Icons.dll",11,"Icons.dll",11)
;Global $I_Log = _3StatIcon_Create("Icons.dll",6,210,5,40,40,"Icons.dll",7) ==> Pour rajout des logs plus tard
Global $I_About = _3StatIcon_Create("Icons.dll",0,210,5,40,40,"Icons.dll",1,"Icons.dll",1)
Global $I_Exit = _3StatIcon_Create("Icons.dll",2,260,5,40,40,"Icons.dll",3,"Icons.dll",3)
;Ajout des bulles infos sur les icônes
GUICtrlSetTip($I_OpenFile,"Ouvrir un fichier")
GUICtrlSetTip($I_OpenTree,"Ouvrir une arborescence")
GUICtrlSetTip($I_Extract,"Commencer l'extration")
GUICtrlSetTip($I_About,"A propos de " & $k_GUI_Title)
GUICtrlSetTip($I_Exit,"Quitter le programme")
;GUICtrlSetTip($I_Log,"Ouvrir le dossier log")
GUICtrlSetTip($I_Option,"Ouvrir les options")
;Création de la ListView
Global $TopList = GUICtrlCreateListView($k_TopList, 0, 56, 601, 430, BitOR($LVS_EDITLABELS, $LVS_REPORT))
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 150)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 290)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 100)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 3, 50)
_GUICtrlListView_SetExtendedListViewStyle($TopList, BitOR($LVS_EX_GRIDLINES, $LVS_EX_TRACKSELECT, $LVS_EX_FULLROWSELECT))
Global $BottomList = GUICtrlCreateListView($k_BottomList, 0, 486, 601, 29)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 100)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 100)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 250)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 3, 145)
;Création du menu contextuel pour la TopList
Global $TopListcontext = GUICtrlCreateContextMenu($TopList)
Global $MenuTopList1 = GUICtrlCreateMenuItem("Extraire le fichier", $TopListcontext)
Global $MenuTopList2 = GUICtrlCreateMenuItem("Supprimer le fichier", $TopListcontext)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###

While 1

    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $I_OpenFile

            GUICtrlSetState($I_OpenFile,$GUI_DISABLE)
            $f_Array = _OpenFiles()     ;Array retournée avec les liens des fichiers
            $nb_Items = _GUICtrlListView_GetItemCount($TopList)     ;On récupère le nombre d'items dans la liste
            ConsoleWrite("Nombre d'items: " & $nb_Items & @CRLF)
            Select
                Case $nb_Items = 0
                For $i = 0 To UBound($f_Array)-1
                    _AjoutItems($TopList,$f_Array[$i],$i,"PRET")
                Next

                Case Else
                    $items_Array = _GUICtrlListView_CreateArray($TopList)
                    For $x = 0 To UBound($f_Array)-1
                        $Compare = _Compare($f_Array[$x],$items_Array)
                        If $Compare = False Then
                            _AjoutItems($TopList,$f_Array[$x],$x,"PRET")
                        EndIf
                    Next
            EndSelect
            $nb_Items = _GUICtrlListView_GetItemCount($TopList)
            $k_BottomList = "|" & $nb_Items & " Fichiers|x archive(s) extraite(s)| "
            GUICtrlSetData($BottomList,$k_BottomList)
            GUICtrlSetState($I_OpenFile,$GUI_ENABLE)
    EndSwitch
WEnd
En l'état elle ne fonctionnera pas pour vous étant donné qu'elle fait appelle a des fonctions perso distinctes.

Si vous avez une idée de ce bug (d'affichage simplement pour moi ?) ou bien d'une mauvaise utilisation de la GUI (vraiment pas impossible)

Merci d'avance

0xyg3n




/edit1: Désolé, le code n'est pas très beau, mais je suis en phase de test, donc les commentaires et la mise en forme plus jolie se fait après pour moi ^^

/edit2: Tiens, si je le désactive ($GUI_DISABLE) pour le contrôle au moment ou je lance la fonction, l'icône disparait et réapparait tout de suite. Mais les autres peuvent toujours disparaitre si je passe dessus.
Modifié en dernier par 0xyg3n le mar. 27 août 2013 21:26, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Icones qui disparaissent GUI

#2

Message par mikell »

Tente le coup de mettre à chaque bouton juste après sa création

Code : Tout sélectionner

GUICtrlSetState(-1, $GUI_ONTOP)
" 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
0xyg3n
Niveau 2
Niveau 2
Messages : 25
Enregistré le : jeu. 07 mars 2013 22:43
Status : Hors ligne

Re: [..] Icones qui disparaissent GUI

#3

Message par 0xyg3n »

Salut mikell,
Déjà merci de te pencher sur mon problème.

Malheureusement ça ne change rien au problème :/

/edit: J'ai essayé de changer la fonction appelée par le clic sur cette icône (à tout hasard) et là ça fonctionne ! Pas de problème.
Donc le problème vient de cette fonction:

Code : Tout sélectionner

Func _OpenFiles()

    Local $ArFiles = FileOpenDialog("Selectionner le(s) fichier(s) à extraire","","Format de l'archive (*.7z;*.zip;*.gzip;*.bzip2;*.tar;*.rar)",1+4)
    If @error Then  Return
    ConsoleWrite($ArFiles & @CRLF)
    Local $l_ArrayUnique[1]
    Select
        Case StringInStr($ArFiles,"|") = 0
            $l_ArrayUnique[0] = $ArFiles
            Return $l_ArrayUnique
        Case StringInStr($ArFiles,"|") > 0
            $l_Array = StringSplit($ArFiles,"|")
            ;_ArrayDisplay($l_Array)
            For $i = 2 To UBound($l_Array)-1
                $l_Array[$i] = $l_Array[1] & "\" & $l_Array[$i]
            Next
            _ArrayDelete($l_Array,0)
            _ArrayDelete($l_Array,0)
            ;_ArrayDisplay($l_Array)
            Return $l_Array
    EndSelect
EndFunc     ;==> _OpenFiles()
Elle est pas très jolie, j'en conviens. Mais pourquoi ça engendre un tel bug, je ne saurais dire... Sachant que la fonction que j'ai essayé est exactement la même mais au lieu d'ouvrir un FileOpenDialog(), j'appelle un FileSelectFolder()
Je la modifierais demain pour voir.
Si vous avez des idées je suis preneur ^^
Avatar du membre
0xyg3n
Niveau 2
Niveau 2
Messages : 25
Enregistré le : jeu. 07 mars 2013 22:43
Status : Hors ligne

Re: [..] Icones qui disparaissent GUI

#4

Message par 0xyg3n »

Bon j'ai trouvé un début de réponse dans un autre sujet (http://www.autoitscript.fr/forum/viewto ... f=3&t=8711)
J'ai du mettre un @WorkDir dans FileOpenDialogue() et enchainer un FileChangeDir(@ScriptDir)

Là les icônes n'ont pas ce bug de disparition.. Mais je ne trouve pas fameux que le dossier par défaut ouvert par le FileOpenDialogue() soit le dossier du script :/
Modifié en dernier par 0xyg3n le lun. 05 août 2013 20:43, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Icones qui disparaissent GUI

#5

Message par mikell »

Mince je l'avais oublié ça (et c'est moi qui avais répondu en plus... :oops: )
Probablement ce que tu mets dans le FileOpenDialog n'a pas d'importance, c'est le FileChangeDir(@ScriptDir) à mettre juste après qui fait le boulot
" 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
0xyg3n
Niveau 2
Niveau 2
Messages : 25
Enregistré le : jeu. 07 mars 2013 22:43
Status : Hors ligne

Re: [..] Icones qui disparaissent GUI

#6

Message par 0xyg3n »

Hé ben justement non ^^
Si je mets autre chose dans le FileOpenDialog (soit rien, soit un @DeskTopDir) le bug est toujours là, MAIS ! ne touche plus que le premier icône (qui sert à lancer le _OpenFiles)

Donc pour que ça ne me fasse plus le bug, je dois mettre un @WorkingDir dans le OpenFileDialog et un FileChangeDir(@ScriptDir) en sortie de OpenFileDialog.

C'est à ne rien comprendre. Je cherche donc toujours une alternative ^^
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [..] Icones qui disparaissent GUI

#7

Message par matwachich »

Mettez le chemin complet vers la DLL Icons.dll dans chaque création de bouton interactif.

PS: J'ai ajouté cette remarque dans le sujet de l'UDF.
PS2: Cela me fait penser que l'UDF n'est pas très optimiser, et qu'il serait plus judicieux de charger les icônes en mémoire lors de la création des boutons (comme il est, l'UDF re-charge les icônes depuis le disque à chaque fois que la sourie passe par dessus)
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Répondre