[..] Problème à la modification d'un Tray

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Kotaw
Niveau 1
Niveau 1
Messages : 2
Enregistré le : sam. 03 juil. 2010 15:04
Status : Hors ligne

[..] Problème à la modification d'un Tray

#1

Message par Kotaw »

Bonjour,

j'ai une fonction qui édite les items d'un tray, et lorsque je veux cliquer sur ces nouveaux items juste après l'exécution de la fonction, le programme plante :

Code : Tout sélectionner

>Exit code: -1073741819
mais si j'attends un moment avant d'utiliser ces nouveaux items tout se passe bien.
Il semble y avoir un délais avant l'application des modification.
► Afficher le textecode qui détecte le clic des items
Et celui de la fonction qui les modifie :

Code : Tout sélectionner

Func tray_update()
    $LOCK_TRAY = True
    For $i=1 To $serv_trays[0]
        TrayItemDelete($serv_trays[1])
        _ArrayDelete($serv_trays,1)
    Next
    $serv_trays[0] = 0
    For $i=1 to $servs[0]
        $dumy = $servs[$i]
        If IsArray($dumy) Then
            _ArrayAdd($serv_trays, TrayCreateItem($dumy[0],-1,$i-1,1))
            $serv_trays[0] += 1
        EndIf
    Next
    $index = findServByName($current_checked)
    If $index <> -1 Then
        TrayItemSetState($serv_trays[$index],$TRAY_CHECKED)
    Elseif $serv_trays[0] >= 1 Then
        TrayItemSetState($serv_trays[1],$TRAY_CHECKED)
        $dumy = $servs[1]
        $current_checked = $dumy[0]
    Else
        $current_checked = ""
    EndIf
    $LOCK_TRAY = False
EndFunc
Kotaw
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Problème à la modification d'un Tray

#2

Message par Tlem »

Je n'ai pas étudié longtemps votre code, car il y a déjà trois choses qui me choque.
1 :

Code : Tout sélectionner

Global $servs[1] = [0]
Global $serv_trays[1] = [0]
[0] ne veut rien dire en la circonstance !!!

2 : On ne met jamais de boucle directement dans la boucle While. Donc votre condition et ce qui s'ensuit :

Code : Tout sélectionner

If $LOCK_TRAY == False Then
ne doit pas être placée à cet endroit, mais plutôt dans un Case Else.

3 : Vous utilisez $serv_trays[0] et $servs[0] dans des boucles For/Next, mais ou initialisez vous ces tableaux avec des valeurs avant les boucles ?
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é".
Kotaw
Niveau 1
Niveau 1
Messages : 2
Enregistré le : sam. 03 juil. 2010 15:04
Status : Hors ligne

Re: [..] Problème à la modification d'un Tray

#3

Message par Kotaw »

Pour commencer je tiens à préciser que je ne code que très occasionnellement avec Autoit, ce qui explique ces erreurs car je n'ai que l'aide à ma disposition et je n'ai pas forcément le temps de la lire en entier.

D'ailleurs je vous serais reconnaissant de m'indiquer l'endroit précis où vous avez lu que
On ne met jamais de boucle directement dans la boucle
car il doit y avoir d'autres choses spécifiques à Autoit que j'ignore et qu'il me serait grandement utile de connaitre.

Maintenant, en écrivant

Code : Tout sélectionner

Global $servs[1] = [0]
Global $serv_trays[1] = [0]
Je pensais définir deux tableaux 1 case qui auraient toutes les deux pour valeur 0

Ensuite, je n'étais donc pas informé de l'interdiction de mettre une boucle dans la boucle While donc si vous avez une idée pour avoir une liste d'items de taille variable dont je voudrais capter l'acitvation je suis prenneur.

Enfin, Il n'y a pas de fonction qui initialise ces deux tableaux ce sont les deux lignes de code ci-dessus.
Autrement, celles qui les modifient, pour $serv_trays, c'est tray_update que j'ai mise dans mon premier post et pour $servs c'est :

Code : Tout sélectionner

Func addServer($name,$data)
    $servs[0]+=1
    _ArrayAdd($servs,"")
    Local $serv[2] = [$name,data]
    $servs[$servs[0]] = $serv
EndFunc
Voila, j'espère que je ne vous ai pas trop ennuyé avec mes erreurs de débutant et qu'elles ne vont pas vous empêcher de trouver si ce n'est la solution à mon problème, sa source.

Bonne journée à vous

Kotaw
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Problème à la modification d'un Tray

#4

Message par Tlem »

Kotaw a écrit :D'ailleurs je vous serais reconnaissant de m'indiquer l'endroit précis où vous avez lu que On ne met jamais de boucle directement dans la boucle
Cela n'est pas explicitement écrit, c'est juste une question de bon sens, car cette deuxième boucle perturbera fortement la gestion des événements par GUIGetMsg().
Kotaw a écrit :En écrivant

Code : Tout sélectionner

Global $servs[1] = [0]
Global $serv_trays[1] = [0]
Je pensais définir deux tableaux 1 case qui auraient toutes les deux pour valeur 0
C'est exactement ce que vous faites, mais quel en est l’intérêt dans votre cas ?
C'est un peut comme si vous faisiez quelque chose dans ce genre :

Code : Tout sélectionner

$Val = 0

$Val = 12 + 13
Pourquoi initialiser une valeur à zéro alors quelle est modifiée de suite après !!!
Kotaw a écrit :si vous avez une idée pour avoir une liste d'items de taille variable dont je voudrais capter l'acitvation je suis prenneur.
Pouvez-vous expliquer un peut mieux la demande, car là, je ne vois pas quoi vous répondre.
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é".
Répondre