Page 1 sur 1

[..] Problème avec la fonction TrayItemSetText

Posté : lun. 21 mars 2011 12:17
par toM
Bonjour,
J'ai un problème avec la fonction TrayItemSetText, qui sert à personnaliser le menu de la tray icône.
Soit le code ci-dessous :

Code : Tout sélectionner

#include <Constants.au3>

TraySetState()
TrayItemSetText($TRAY_ITEM_PAUSE, "Guard en pause")
TrayItemSetText($TRAY_ITEM_EXIT, "Quitter")

While 1
    Sleep(100)
WEnd
 
Sur mon PC, j'obtiens le message "r" pour les 2 entrées de menu (Script paused et Exit). Sur un autre PC, un caractère carré vide. J'ai bien l'impression que cette fonction marchait correctement auparavant. Là, je ne vois pas ce qui cloche :( . Lorsque j'omets les lignes TrayItemSetText, les menus par défaut apparaissent correctement.
Merci de votre aide.

ToM

PS : je ne me rappelle plus le titre que j'avais mis, donc je ne sais pas pourquoi il 'était pas conforme. J'espère que celui-ci est conforme...

Re: [..]

Posté : lun. 21 mars 2011 12:29
par zeshrek
Titre non conforme, merci de rectifier

Re: [..]

Posté : lun. 21 mars 2011 12:39
par ethneldryt
A ben ca alors je suis pas le seul ! Sur certain pc ca marche et d'autre petit carré aussi. Mais j'ai aussi un autre problème moi, quand je clique sur un item du tray menu, ben se menu, il se coche, alors qu'avant non.

Re: [..] Problème avec la fonction TrayItemSetText

Posté : mar. 22 mars 2011 17:16
par jchd
Voici un exemple :
► Afficher le texte

Re: [..] Problème avec la fonction TrayItemSetText

Posté : mar. 22 mars 2011 21:58
par sylvanie
Bonsoir

Il s'agit bien d'un bug relaté sur le forum américain, dont visiblement un correctif est attendu en 3.7 ...
Le pb était plus relaté sur Win7, mais effectivement il est facilement reproductible sur XP

Le contournement de Jchd permet bien d'avoir l'affichage nickel, mais on fait une croix sur l'appel à la pause (ou alors il faut la réimplémenter)

En alternative demi-satisfaisante, on peut relancer le setitemtext dans le corps de message, car si on observe bien, c'est le premier click sur le tray qui ne marche pas. Il y a ensuite une sorte de déblocage, et là le settext fonctionne :
► Afficher le texte


NB : la variable static permet de ne pas refaire l'action une fois qu'elle s'est faite correctement

Re: [..] Problème avec la fonction TrayItemSetText

Posté : mar. 22 mars 2011 22:51
par jchd
Sylvanie, sans vouloir traîner dans la boue ton idée, je ne suis pas trop chaud au niveau du principe et voici pourquoi.

Certes on peut faire ainsi, mais s'il ne s'agit que de reimplémenter la pause, l'exit et une ligne entre les deux, ce n'est pas vraiment bien sorcier, pas plus que ce fix. Le problème avec une "astuce" comme ça est qu'elle repose sur deux choses instables : un bug abscons au niveau de la gestion du tray (dont seuls les devs connaissent les caractéristiques, et encore s'ils ont assez planché dessus, ce qui n'est pas une priorité) et une "feature" (static) qui ne fait pas partie intégrale du langage (et qui a aussi des bugs connus). Si on veux faire propre, il faut aussi documenter le "pourquoi on fait comme ça", ce qui revient à écrire un roman sur le bug qu'on contourne.

L'avantage qu'il y a dans la méthode où on créé le menu de toutes pièces est qu'on en maîtrise tous les aspects avec du code reposant sur des appels qui fonctionnent et de ce fait tout se trouve intégralement documenté rien qu'à l'examen du source.

D'ailleurs, on a aussi un souci similaire avec le gettext et le delete des items par défaut, ce qui complique encore la solution "hack".

Soit dit juste entre nous, tray et GUI ne sont pas forcément les meilleures parties d'AutoIt (au niveau du code d'AutoIt).
Par ailleurs, que _personne_ ne retienne sa respiration jusqu'à la sortie de la prochaine mouture stable...

Re: [..] Problème avec la fonction TrayItemSetText

Posté : mar. 22 mars 2011 23:09
par sylvanie
Je ne considère point ceci comme un trainage dans la boue, tout le monde a le droit de s'exprimer ^^

Pour le static, on peut passer par une globale si on n'a pas confiance, par contre pour la pause, je ne la trouve pas si simple que ça à réimplémenter, car si on est "emprisonné" dans une boucle consommatrice en CPU, je ne pense pas qu'on puisse facilement interrompre celle-ci come le fait là pause native qui arrive à faire une interruption nette. C'est pour çà que je proposais cette version que je qualifiait bien de demi satisfaisante.

Par contre si on a une implémentation de pause qui est aussi efficace, effectivement c'est gangé.

Re: [..] Problème avec la fonction TrayItemSetText

Posté : mer. 23 mars 2011 23:27
par jchd
Voici un exemple d'utilisation (idiot, je l'accorde). En pause, on ne consomme quasiment aucun CPU mesurable mais on a le contrôle complet sur le fonctionnement du tray et de ses composants.
► Afficher le textetext
J'ai rendu l'option 1 non sélectable tant qu'on est en pause, tandis que l'emploi de l'option 2 est indifférent à la pause.
Si on sucre les variables et msgbox de démo, le code est robuste, compact et clair.

Re: [..] Problème avec la fonction TrayItemSetText

Posté : jeu. 24 mars 2011 20:39
par sylvanie
Bien vu