Page 1 sur 1

[R] Un numéro à la place d'un label

Posté : dim. 07 juil. 2013 12:20
par aulus
Bonjour,

Voici un code banal qui m'amène une curieuse chose :

Code : Tout sélectionner

GUICtrlCreateLabel("Jour" , 270, 200, 30, 20)
GUICtrlCreateLabel("Mois" , 340, 200, 30, 20)
GUICtrlCreateLabel("Année" , 410, 200, 40, 20)
Ces labels appartiennent à un onglet.
Lorsque j'ouvre l'onglet pour la 1ère fois, à la place du label "Mois" s'affiche le nombre 74.
Les deux autres labels s'affichent correctement.

Aux ouvertures suivantes de l'onglet, le mot "Mois" s'affiche correctement.

A votre avis, que peut être ce nombre 74 ? L'ID du contrôle ?

Je vous remercie de vos lumières.

Re: [..] Un numéro à la place d'un label

Posté : dim. 07 juil. 2013 12:27
par Tlem
Sans le code complet, il est difficile de vous répondre.
Ceci dit, si le label ce trouve être créé après 70 autres contrôles, alors oui, le nombre 74 pourrait être son ID.

Re: [..] Un numéro à la place d'un label

Posté : dim. 07 juil. 2013 13:39
par aulus
Merci Tlem pour votre réponse.

Mon code approchant les 10 000 lignes, je ne vois pas quelles lignes conduisent à ce phénomène étrange, et par conséquent lesquelles rapporter ici.

Après extinction du PC, puis rallumage, le 74 s'est déplacé sur le premier label (Jour) à l'ouverture de l'onglet.
En inversant tour à tour l'ordre des déclarations des labels, le 74 tombe toujours sur le premier label.

Si j'ajoute un label-bidon en tête, c'est lui qui récupère le 74 :

Code : Tout sélectionner

GUICtrlCreateLabel("" , 460, 200, 30, 20)
GUICtrlCreateLabel("Jour" , 270, 200, 30, 20)
GUICtrlCreateLabel("Mois" , 340, 200, 30, 20)
GUICtrlCreateLabel("Année" , 410,200, 40, 20))
En variant les manipulations (clics sur divers boutons avant d'ouvrir l'onglet), le 74 peut s'afficher aussi bien dans un input qu'à la place de n'importe quel label de l'onglet ou d'un autre onglet !

Quelqu'un saurait-il quelle erreur de code entraînerait le remplacement d'un libellé de label par son Id ?
Et pourquoi un Id et toujours le même (dans mon cas c'est toujours le 74ème contrôle appelé) peut s'incruster sans y être invité ?

Re: [..] Un numéro à la place d'un label

Posté : dim. 07 juil. 2013 16:00
par mikell
Comme disait Thierry pas facile de répondre sans voir le code...
ça peut évoquer un GuiCtrlSetData , et/ou un GuiCtrlRead effectué sur une listview, treeview ou tab et qui retourne un id d'item

Re: [..] Un numéro à la place d'un label

Posté : dim. 07 juil. 2013 17:51
par aulus
Merci Mikell. Je vais plancher là-dessus...

Re: [..] Un numéro à la place d'un label

Posté : lun. 08 juil. 2013 10:17
par aulus
Bonjour,

Après 2 jours de lutte acharnée, je suis parvenu à débusquer la ligne de code qui m'a tourmenté nuit et jour (enfin... presque !)

J'avais confondu un handle de contrôle ($hNombre) avec une variable ($nombre). J'avais codé GUICtrlSetData($nombre, "..."), au lieu de coder GUICtrlSetData($hNombre, "..."). Toutefois, je ne sais pas trop pourquoi c'est le Label "Jour" qui en a subi les conséquences...

Aux possibilités d'erreurs pouvant entraîner le problème posé, suggérées par Mikell, j'ajouterai donc : confusion entre handle et variable !

Merci à tous deux.

Re: [R] Un numéro à la place d'un label

Posté : lun. 08 juil. 2013 14:05
par matwachich
Pour éviter ce genre d'erreurs, je vous conseille d'adopter des conventions de nommage robustes, du genre (les miennes):

Code : Tout sélectionner

- variables: $[b][type_var][/b]NomVar
- contrôles ID: $[b][type_ctrl][/b]_NomControle
- contrôles Handle: $h[b][type_ctrl][/b]_NomControle
- var global: $__g_[b][type_var][/b]NomVar
- var global dans UDF: $__g[b][nom udf][/b]_[b][type var][/b]NomVar

[type_var]: i, s, a ... voir http://www.autoitscript.com/autoit3/udfs/UDF_Standards.htm
[type_ctrl]: I (input), E (edit), L (label) ...
[nom_udf]: en majuscule, AUGL, WINAPI ...

Re: [R] Un numéro à la place d'un label

Posté : lun. 08 juil. 2013 17:57
par aulus
Merci matwachich pour toutes ces bonnes idées. A l'avenir j'en tirerai profit.