(GuiCtrlSetData) Clignotement sur les titres d'un Menu

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
yoonix
Niveau 1
Niveau 1
Messages : 2
Enregistré le : ven. 06 juil. 2018 16:33
Status : Hors ligne

(GuiCtrlSetData) Clignotement sur les titres d'un Menu

#1

Message par yoonix »

Bonjour,

Débutant avec Autoit, nous souhaitons proposer une interface efficace regroupant des jeux et applications avec Windows 10 comme un media center.

Tout fonctionne sauf que nous avons un énorme problème dans une interface de sélection.
Le titre sélectionné et les titres de la liste "clignote" dès que nous défilons dans celle-ci ce qui est très désagréable. :mal:

Malgré beaucoup de recherches sans résultats, nous avons besoin de votre aide si vous pouviez nous éclairer à ce sujet. :mrgreen:

Je vous remercie
If $InterfaceSelectionne[$affichage] = "Nintendo" Then
      $ProcessConsole = "Jnes 1.2"
      $AffichageJeu = 1
      $boucleConsole = 1
      Global $myGamePadHandle = GPExInitialize() ; Get a handle. This doesn't have to be global but needs to be passed to all the other functions.
      Global $myID = 0 ; We want to monitor the default GamePad
      ; Clavier
      HotKeySet ("{LEFT}", "_hotkeypressedL2")
      HotKeySet ("{RIGHT}", "_hotkeypressedR2")
      HotKeySet ("a", "_ExecuterJeuNintendo")
      HotKeySet ("b", "_Sortieboucle")


      $Dossierjeu = ".\Games\Nintendo"
      $Emulateur = ".\Apps\Nintendo\Jnes.exe"
      ; Lit le fichier du script courant dans un tableau en utilisant le chemin du fichier.
      _ReplaceStringInFile (".\Games\Nintendo\gamelist.xml", " <path>.", "")
      _ReplaceStringInFile (".\Games\Nintendo\gamelist.xml", "</path>", "")
      _ReplaceStringInFile (".\Games\Nintendo\gamelist.xml", " <name>", "")
      _ReplaceStringInFile (".\Games\Nintendo\gamelist.xml", "</name>", "")
      _ReplaceStringInFile (".\Games\Nintendo\gamelist.xml", " <desc>", "")
      _ReplaceStringInFile (".\Games\Nintendo\gamelist.xml", "</desc>", "")
      _ReplaceStringInFile (".\Games\Nintendo\gamelist.xml", " <image>.", "")
      _ReplaceStringInFile (".\Games\Nintendo\gamelist.xml", "</image>", "")
      _ReplaceStringInFile (".\Games\Nintendo\gamelist.xml", "<gameList>", "")
      _ReplaceStringInFile (".\Games\Nintendo\gamelist.xml", " [FRANCE]", "")
      _ReplaceStringInFile (".\Games\Nintendo\gamelist.xml", " [EUROPE]", "")
      _ReplaceStringInFile (".\Games\Nintendo\gamelist.xml", " [USA]", "")
      _ReplaceStringInFile (".\Games\Nintendo\gamelist.xml", "/", "\")
      $Gamelist = FileReadToArray (".\Games\Nintendo\gamelist.xml")
      $NombreDeLigne = _FileCountLines (".\Games\Nintendo\gamelist.xml")
      $j =0
      For $i = 3 To $NombreDeLigne step 13
         $j = $j + 1
         $aArrayCheminDuJeu[$j] = FileReadLine (".\Games\Nintendo\gamelist.xml", $i)
         $aArrayNomDuJeu[$j] = FileReadLine (".\Games\Nintendo\gamelist.xml", $i + 1)
         $aArrayResumerDuJeu[$j] = FileReadLine (".\Games\Nintendo\gamelist.xml", $i +2)
         $aArrayImageDuJeu[$j] = FileReadLine (".\Games\Nintendo\gamelist.xml", $i +3)
      Next
      if $j < 7  Then
         For $j = $j + 1 To 7
            $aArrayCheminDuJeu[$j] = ""
            $aArrayNomDuJeu[$j] = ""
            $aArrayResumerDuJeu[$j] = ""
            $aArrayImageDuJeu[$j] = ""
         Next
         $j = 7
      EndIf
      $NombreDeJeu = $j
      Global $FenetreConsole = GUICreate("Nintendo", 1280, 720, 0, 0, $WS_POPUP)
      Global $Pic0 = GUICtrlCreatePic(".\Themes\Default\Background\Nintendo.jpg", 0, 0, 1280, 720)
      Global $Pic1 = GUICtrlCreatePic(".\Games\Nintendo" & $aArrayImageDuJeu [1], 206, 132, 302, 414)
      GUICtrlCreateLabel ($Pseudo, 400, 28, 480, 40, BitOR($SS_CENTER, $SS_CENTERIMAGE))
      GUICtrlSetFont(-1, 25, 800, 0, "Arial")
      GUICtrlSetColor(-1, 0xFFFFFF)
      GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
      Global $l2 = GUICtrlCreateButton("L2", 0, 0, 1, 1)
      GUICtrlSetState ( -1, $GUI_HIDE)
      Global $r2 = GUICtrlCreateButton("R2", 0, 2, 1, 1)
      GUICtrlSetState ( -1, $GUI_HIDE)
      $Titre = GUICtrlCreateLabel ($aArrayNomDuJeu [1], 554, 126, 526, 72, BitOR($SS_CENTER,$SS_CENTERIMAGE))
      GUICtrlSetFont(-1, 30, 800, 0, "Arial")
      GUICtrlSetColor(-1, 0xFF0000)
      GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; ArriËre plan du label transparent
      $Label5 = GUICtrlCreateLabel ($aArrayNomDuJeu [$NombreDeJeu - 2], 568, 306, 498, 34)
      GUICtrlSetFont(-1, 20, 800, 0, "Arial")
      GUICtrlSetColor(-1, 0xFFFFFF)
      GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; ArriËre plan du label transparent
      $Label6 = GUICtrlCreateLabel ($aArrayNomDuJeu [$NombreDeJeu - 1], 568, 340, 498, 34)
      GUICtrlSetFont(-1, 20, 800, 0, "Arial")
      GUICtrlSetColor(-1, 0xFFFFFF)
      GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; ArriËre plan du label transparent
      $Label7 = GUICtrlCreateLabel ($aArrayNomDuJeu [$NombreDeJeu], 568, 374, 498, 34)
      GUICtrlSetFont(-1, 20, 800, 0, "Arial")
      GUICtrlSetColor(-1, 0xFFFFFF)
      GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; ArriËre plan du label transparent
      $Label1 = GUICtrlCreateLabel ($aArrayNomDuJeu [$AffichageJeu], 568, 408, 498, 34)
      GUICtrlSetFont(-1, 20, 800, 0, "Arial")
      GUICtrlSetColor(-1, 0xFFFFFF)
      GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; ArriËre plan du label transparent
      $Label2 = GUICtrlCreateLabel ($aArrayNomDuJeu [$AffichageJeu + 1], 568, 442, 498, 34)
      GUICtrlSetFont(-1, 20, 800, 0, "Arial")
      GUICtrlSetColor(-1, 0xFFFFFF)
      GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; ArriËre plan du label transparent
      $Label3 = GUICtrlCreateLabel ($aArrayNomDuJeu [$AffichageJeu + 2], 568, 476, 498, 34)
      GUICtrlSetFont(-1, 20, 800, 0, "Arial")
      GUICtrlSetColor(-1, 0xFFFFFF)
      GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; ArriËre plan du label transparent
      $Label4 = GUICtrlCreateLabel ($aArrayNomDuJeu [$AffichageJeu + 3], 568, 510, 498, 34)
      GUICtrlSetFont(-1, 20, 800, 0, "Arial")
      GUICtrlSetColor(-1, 0xFFFFFF)
      GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; ArriËre plan du label transparent
      ;Heure font transparent
;     GUICtrlCreateLabel (@HOUR &":" & @MIN, 1131, 28, 90, 25, BitOR($SS_CENTER,$SS_CENTERIMAGE) )
;     GUICtrlSetFont(-1, 25, 800, 0, "Arial")
;     GUICtrlSetColor(-1, 0xFFFFFF)
;     GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; ArriËre plan du label transparent
      ;Batterie
;     Global $g_aidLabel[4]
;     $i = 2
;     $g_aidLabel[$i] = GUICtrlCreateLabel('Unknown', 1034, 28, 90, 25, BitOR($SS_CENTER,$SS_CENTERIMAGE))
;     GUICtrlSetFont(-1, 25, 800, 0, "Arial")
;     GUICtrlSetColor(-1, 0xFFFFFF)
;     GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; ArriËre plan du label transparent
      ;AdlibRegister('_BatteryStatus', 10000)
      GUISetState ()
      ;Sleep (500)
      ;$A = GUICtrlCreateLabel("", 668, 408, 411, 33)
      ;GUICtrlSetBkColor(-1, 0x000000)
      ;$B = GUICtrlCreateLabel ($aArrayResumerDuJeu [$AffichageJeu], 680, 311, 385, 227, $SS_LEFT)
      ;GUICtrlSetColor(-1, 0xFFFFFF)
      ;GUICtrlSetBkColor(-1, 0x000000)
      ;$tempoboucle = 1000
      GUIDelete($Menu)

      Do

         $nMsg = GUIGetMsg()
         ;$tempoboucle = $tempoboucle + 1
         If $nMsg = $r2 Then $AffichageJeu = $AffichageJeu + 1
         if $aArrayNomDuJeu [$AffichageJeu] = "" Then $AffichageJeu = 1
         If $AffichageJeu > $NombreDeJeu Then $AffichageJeu = 1
         If $nMsg = $l2 Then
            $AffichageJeu = $AffichageJeu - 1
            If $AffichageJeu < 1 Then
               $AffichageJeu = $NombreDeJeu
               For $i = 1 to 6
                  if $aArrayNomDuJeu [$AffichageJeu] = "" Then $AffichageJeu = $AffichageJeu - 1
               Next
            EndIf
         EndIf
         If $nMsg = $r2 Or $nMsg = $l2 Then
            ;$tempoboucle = 0
            GUISetState (@SW_LOCK)
            GUICtrlSetData ($Titre, $aArrayNomDuJeu [$AffichageJeu])
            GUICtrlSetImage($Pic1, ".\Games\Nintendo" & $aArrayImageDuJeu [$AffichageJeu])
            $AffichageJeu2 = $AffichageJeu -3
            If $AffichageJeu2 < 1 Then $AffichageJeu2 = $NombreDeJeu + $AffichageJeu2
            GUICtrlSetData ($Label5, $aArrayNomDuJeu [$AffichageJeu2])
            $AffichageJeu2 = $AffichageJeu - 2
            If $AffichageJeu2 < 1 Then $AffichageJeu2 = $NombreDeJeu + $AffichageJeu2
            GUICtrlSetData ($Label6, $aArrayNomDuJeu [$AffichageJeu2])
            $AffichageJeu2 = $AffichageJeu - 1
            If $AffichageJeu2 < 1 Then $AffichageJeu2 = $NombreDeJeu + $AffichageJeu2
            GUICtrlSetData ($Label7, $aArrayNomDuJeu [$AffichageJeu2])
            GUICtrlSetData ($Label1, $aArrayNomDuJeu [$AffichageJeu])
            $AffichageJeu2 = $AffichageJeu + 1
            If $AffichageJeu2 > $NombreDeJeu Then $AffichageJeu2 = $AffichageJeu2 - $NombreDeJeu
            GUICtrlSetData ($Label2, $aArrayNomDuJeu [$AffichageJeu2])
            $AffichageJeu2 = $AffichageJeu + 2
            If $AffichageJeu2 > $NombreDeJeu Then $AffichageJeu2 = $AffichageJeu2 - $NombreDeJeu
            GUICtrlSetData ($Label3, $aArrayNomDuJeu [$AffichageJeu2])
            $AffichageJeu2 = $AffichageJeu + 3
            If $AffichageJeu2 > $NombreDeJeu Then $AffichageJeu2 = $AffichageJeu2 - $NombreDeJeu
            GUICtrlSetData ($Label4, $aArrayNomDuJeu [$AffichageJeu2])
            GUISetState (@SW_UNLOCK)
            ;GUICtrlDelete ($A)
            ;GUICtrlDelete ($B)
         EndIf
         ;if $tempoboucle = 100 Then
         ;  $A = GUICtrlCreateLabel("", 668, 408, 411, 33)
         ;  GUICtrlSetBkColor(-1, 0x000000)
         ;  $B = GUICtrlCreateLabel ($aArrayResumerDuJeu [$AffichageJeu], 680, 311, 385, 227, $SS_LEFT )
         ;  GUICtrlSetBkColor(-1, 0x000000)
         ;  GUICtrlSetColor(-1, 0xFFFFFF)
         ;EndIf

         ; Manette
         Sleep(100)
         $pressedbutton = GPExGetPressed($myGamePadHandle, $myID)
         Select
            Case BitAND($pressedbutton, GPExButton(5)); Bouton L2
               _hotkeypressedL2 ()
            Case BitAND($pressedbutton, GPExButton(6)); Bouton R2
               _hotkeypressedR2 ()
            ;Case BitAND($pressedbutton, GPExButton(4)); Bouton Y
               ;_Afficheparametre()
            Case BitAND($pressedbutton, GPExButton(1)); Bouton A
               _ExecuterJeuNintendo()
            Case BitAND($pressedbutton, GPExButton(2)); Bouton B
               _Sortieboucle()
         EndSelect
         $PressedCroix = GPExGetPOV($myGamePadHandle, $myID)
         If $PressedCroix = 00000 Then _hotkeypressedL2 () ; Croix haut
         If $PressedCroix = 18000 Then _hotkeypressedR2 () ; Croix bas

      Until $nMsg = $GUI_EVENT_CLOSE
         EndIf
$nMsg = $GUI_EVENT_CLOSE
Avatar du membre
parazitenew
Niveau 7
Niveau 7
Messages : 310
Enregistré le : sam. 10 déc. 2011 15:08
Localisation : Algerie
Contact :
Status : Hors ligne

Re: (GuiCtrlSetData) Clignotement sur les titres d'un Menu

#2

Message par parazitenew »

Bonjour,

si ça clignote; c'est parce que l'information est rafraîchie à chaque fois; il faudrait rafraîchir uniquement l'information dont on a besoin à un moment précis.

Pour l'heure, tu peux essayer d'ajouter le style $WS_EX_COMPOSITED au GUI. (trouvé sur le forum EN)
yoonix
Niveau 1
Niveau 1
Messages : 2
Enregistré le : ven. 06 juil. 2018 16:33
Status : Hors ligne

Re: (GuiCtrlSetData) Clignotement sur les titres d'un Menu  

#3

Message par yoonix »

Bonjour,

le style $WS_EX_COMPOSITED nous sera sans doute utile pour l'heure, merci !

Nous avons masqué le problème en créant une Gui qui s'affichera toujours par dessus avec l' ex style $WS_EX_TOPMOST, pour ensuite supprimer cette dernière.
If $nMsg = $r2 Or $nMsg = $l2 Then
            ;$tempoboucle = 0
            $ChargementTitre = GUICreate ("TitreJeu", 880, 36, 200, 144, $WS_POPUP, $WS_EX_TOPMOST)
            GUISetBkColor(0x0000000)
            GUISetState (@SW_SHOW)
            $ChargementListe = GUICreate ("ListeJeu", 386, 238, 680, 306, $WS_POPUP, $WS_EX_TOPMOST)
            GUISetBkColor(0x0000000)
            GUICtrlCreateGraphic(0, 102, 386, 34)
            GUICtrlSetBkColor(-1, 0xFC0C18)
            GUISetState (@SW_SHOW)
            GUICtrlSetData ($Titre, $aArrayNomDuJeu [$AffichageJeu])
            GUICtrlSetImage($Pic1, ".\Games\Super Nintendo" & $aArrayImageDuJeu [$AffichageJeu])
            $AffichageJeu2 = $AffichageJeu -3
            If $AffichageJeu2 < 1 Then $AffichageJeu2 = $NombreDeJeu + $AffichageJeu2
            GUICtrlSetData ($Label5, $aArrayNomDuJeu [$AffichageJeu2])
            $AffichageJeu2 = $AffichageJeu - 2
            If $AffichageJeu2 < 1 Then $AffichageJeu2 = $NombreDeJeu + $AffichageJeu2
            GUICtrlSetData ($Label6, $aArrayNomDuJeu [$AffichageJeu2])
            $AffichageJeu2 = $AffichageJeu - 1
            If $AffichageJeu2 < 1 Then $AffichageJeu2 = $NombreDeJeu + $AffichageJeu2
            GUICtrlSetData ($Label7, $aArrayNomDuJeu [$AffichageJeu2])
            GUICtrlSetData ($Label1, $aArrayNomDuJeu [$AffichageJeu])
            $AffichageJeu2 = $AffichageJeu + 1
            If $AffichageJeu2 > $NombreDeJeu Then $AffichageJeu2 = $AffichageJeu2 - $NombreDeJeu
            GUICtrlSetData ($Label2, $aArrayNomDuJeu [$AffichageJeu2])
            $AffichageJeu2 = $AffichageJeu + 2
            If $AffichageJeu2 > $NombreDeJeu Then $AffichageJeu2 = $AffichageJeu2 - $NombreDeJeu
            GUICtrlSetData ($Label3, $aArrayNomDuJeu [$AffichageJeu2])
            $AffichageJeu2 = $AffichageJeu + 3
            If $AffichageJeu2 > $NombreDeJeu Then $AffichageJeu2 = $AffichageJeu2 - $NombreDeJeu
            GUICtrlSetData ($Label4, $aArrayNomDuJeu [$AffichageJeu2])
            GUIDelete ($ChargementTitre)
            GUIDelete ($ChargementListe)
Répondre