J'ai une proc principale dans laquelle j'ai inséré un bouton, lorsque
je clique sur le bouton je souhaite passer l'id de l'enregistrement à
la fonction appelée.
j'ai donc cela dans ma proc chaimacave::fiche :
set fic_id 2 //Exemple
button .fiche.but_delete -command {chaimacave::delete_fiche fic_id} \
mais quand j'arrive dans ma proc delete_fiche je n'arrive pas à
récupéré la valeur de fic_id...
j'ai mis cela mais j'ai peut-être oublié quelque chose :
proc chaimacave::delete_fiche {id_fiche} {
global dbcmc
upvar #0 fic_id $id_fiche
set confirm [tk_messageBox -message "Confirmez-vous la suppression
définitive de cette fiche ?" -type yesno -icon question]
switch -- $confirm {
yes {
tk_messageBox -message "La fiche $id_fiche a été détruite
définitivement." -type ok -icon info
destroy .fiche
}
no {return}
}
}
Merci à tous pour l'aide.
donc
button .fiche.but_delete -command {chaimacave::delete_fiche $fic_id}
devrait donner ce que tu veux.
Miko
Heum...
Le $fic_id est dans une chaîne entre accolades et n'est donc pas
remplacé par sa valeur.
Il faut soit :
"chaimacave::delete_fiche $fic_id"
soit :
[list chaimacave::delete_fiche $fic_id]
soit même :
[format {chaimacave::delete_fiche %s} $fic_id]
La première solution n'est pas considérée comme très Tclish.
La deuxième est la plus utilisée.
La troisième est plus puissante mais pas vraiment justifiée ici.
Voici donc mon choix :
set $fic_id 2
button .fiche.but_delete -command [list chaimacave::delete_fiche
$fic_id]
Maintenant juste une question :
Pourquoi chaimacave::delete_fiche et non ::chaimacave::delete_fiche ?
(le premier est un nom relatif et le second un nom absolu)
S'il n'y a pas de hiérarchie de namespaces (emboitement genre poupées
russes)
le nom absolu évite toute ambiguité.
Hop! que ça helpe
ulis le Tclish
>Heum...
>Le $fic_id est dans une chaîne entre accolades et n'est donc pas
>remplacé par sa valeur.
Honte sur moi.
Du coup, j'explore tout le code que j'ai pondu, pour voir si je n'ai pas
laissé quelque part cette construction calamiteuse...
Et j'en trouve une!!!
Miko l'étourdi
> .../...
> soit même :
> [format {chaimacave::delete_fiche %s} $fic_id]
Je l'avais encore jamais vue celle-là ! Je vois bien ce que ça fait,
mais dans quel(s) cas c'est mieux que [list chaimacave::delete_fiche
$fic_id] ?
--
David Zolli - Kroc
Ici, c'est moins bien.
Là où ça peut être mieux c'est quand la constante entre accolades
comprend plusieurs lignes : utiliser format permet alors d'avoir une
constante qui ressemble plus à un script normal.
Je l'ai utilisé dans un package d'objets.
ulis le chasseur de petites bêtes
Bon autant se les faire toutes :
Une que j'ai utilisée :
set map [list fic_id $fic_id]
[string map $map {chaimacave::delete_fiche fic_id}]
Et pourquoi pas :
set map [list \$fic_id $fic_id]
[string map $map {chaimacave::delete_fiche $fic_id}]
ulis qu'il va falloir arrêter car maintenant qu'il est lancé...
> Du coup, j'explore tout le code que j'ai pondu, pour voir si je n'ai pas
> laissé quelque part cette construction calamiteuse...
> Et j'en trouve une!!!
>
> Miko l'étourdi
Bah... Une de trouvée, dix de perdues !
""Maintenant juste une question :
Pourquoi chaimacave::delete_fiche et non ::chaimacave::delete_fiche ?
(le premier est un nom relatif et le second un nom absolu)
S'il n'y a pas de hiérarchie de namespaces (emboitement genre poupées
russes)
le nom absolu évite toute ambiguité. ""
Oh mais c'est bien ça !
Ça va nous faire plein de questions intéressantes :-)
ulis (en qui le pedago ne sommeille que d'un oeil)
Une precision pour stefen, histoire de debuter comme il fait en Tcl: la
2ieme syntaxe est de loin celle a preferee, car la seule qui
t'assureras que ca marche encore lorsque la valeur des arguments (ici,
la valeur de fic_id) contient par exemple des espaces (par ex. lorsque
c'est une liste. Bon, avec un nom comme "fic_id", on peut supposer que
le probleme ne se posera pas la, mais autant prendre les bonnes habitures.
Eric
-----
Eric Hassold
Evolane - http://www.evolane.com/