Marjorie
03/07/2003 à 09:27
Bonjour,
je programme avec CodeWarrior et j'aimerais écrire du texte en dynamique dans un label or impossible de trouver la fonction correspondante dans l'aide.
Quelqu'un connaîtrait-il la fonction ?
Merci d'avance...
olivier101
03/07/2003 à 10:09
Il me semble que c'est tout simplement
CtlSetLabel
Philippe_Dsf
03/12/2003 à 16:04
J'ai le même problème..
CtlSetLabel ne permet que de modifier les PUSHBOUTONS les Label, Field et autres c'est impossible C'est comme CtlSetValue qui fonctionne seulement avec les PushBouton et les CheckBox.
Existe-t-il un moyen de contré cette lacune ?!?!
Patrice
03/12/2003 à 16:11
Tu as un problème quelque part parce que CtlSetLabel() fonctionne sur les labels (j'ai déjà pas mal utilisé...).
Philippe_Dsf
03/12/2003 à 16:26
Je me suis défini un boolean TRUE FALSE
ou est-ce que TRUE = FRANCAIS et FALSE = ANGLAIS
Alors quand je clique sur mon Button il fait le code suivant..
_____________________________________
ControlType *ctl;
// Label
ctl = GetObjectPtr(LblNom) ;
CtlSetLabel(ctl,"Nom :");
// Field
ctl = GetObjectPtr(txtName) ;
CtlSetLabel(ctl,"Francais");
//Button
ctl = GetObjectPtr(btLangue) ;
CtlSetLabel(ctl,"English");
indLang = false;
________________________________________
Le seul pour qui sa fonctionne est le btLangue. Pourrais-tu m'aider !?
de plus je suis JAMAIS capable de faire un menu ! je comprends pas pourquoi sa fonctionne pas non plus... est-ce que je peux te soummettre mon code pour que tu lui jettes un oeil ?!?!?
Philippe.
Patrice
03/12/2003 à 16:34
Je n'ai pas le temps maintenant (petite réunion prévue pour durer tard ce soir) mais je regarderai (je me demande s'il ne faut pas ré-afficher explicitement le label pour voir le changement).
Pour ton problème de menu, je veux bien regarder aussi (même remarque, cependant) mais si tu utilises des particularités de CW, je ne pourrai pas t'aider.
Philippe_Dsf
03/12/2003 à 16:41
C'Est très standard ce que je développe !
Je fais mais interface avec PilRC et autre.. Mais je compile et DEBUG avec CodeWarrior.
Quand tu pourras fait moi signe et je te send mon .c et mon .rcp
Merci !
Caporal Kro
03/12/2003 à 17:24
Excuses-moi, Patrice, mais je crois que je sais ce coup-ci. Après tout nous aussi les intermédiaires on a droit à notre petit moment de gloire de temps en temps ( 8) )
En avant6 pour la question facile (celle sur les labels, je te laisse l'histoire des menus).
Comme il est dit dans le lien de Olivier, le texte du label doit être un pointeur persistant. Hors, toi quand tu fais:
ctlSetLabel (ctl, "blablabla"), tu donnes une constante à l'intérieur d'une fonction. Quand tu sors de ta fonction, le système va consciencieusement libérer toutes les variables et pointeurs de ta fonction. Puis quand ton palm va passer plus loin dans le refresh de l'affichage, il va tenter d'utiliser un pointeur qui n'est plus valide et tu dois obtenir un message du genre : Memorymgr.c line 1526.
Ya plusieurs méthodes, la mienne:
Quand je définis les ressources, je mets une string bidon, qui va être la plus longue qui puisse être mise dans ce bouton. (Dans ton cas Philippe, Français=8 lettres, Anglais 7, donc je mettrais 8 x 'xxxxxxxx').
Ensuite quand tu change la valeur, tu fais:
MonLabel = ctlGetLabel(ctl);
strCopy(MonLabel, "Français"); // chuis pas sur de l'existance de cette fonction en C, qui copie le contenu d'une string dans une autre
ctlSetLabel(ctl, MonLabel);
Tu utilise l'espace mémoire qui avait été réservé dans les ressources du programme, donc qui sera toujours dispo pendant toute la durée de ton programme. Pas d'allocation de mémoire à faire, pas de libération.
Puis souvent au lieu de torturer un label, ne pas oublier qu'on a WinDrawChars quand on a juste une ligne de texte à afficher.
Philippe_Dsf
03/12/2003 à 19:17
Que voulez-vous je suis débutant.. SA FONCTIONNE PAS ..
Mais merci pour le WinDrawChars ça va mettre utile prochainement.. En passant mon Menu marche très bien.. ( oublié de spécifié le dans la Form le menu dans PilRC )) oups..
Bon maintenant mon "LABEL" qui fonctionne toujours pas...
J'ai un bouton que lorsque je clic Switcht mon TxtField et mon Label anglais et francais ....
Boolean MainFormDoCommand(UInt16 command)
{
Boolean handled = false ;
switch (command)
{
case btLangue:
if ( indLang == true )
{
anglais();
}
else
{
francais();
}
handled = true ;
break;
default:
break;
}
return handled ;
}
void
anglais()
{
ControlType *ctl;
Char *label;
ctl = GetObjectPtr(mlLblNom) ;
label = CtlGetLabel(ctl);
strcpy(label,"Nom");
CtlSetLabel(ctl,label);
ctl = GetObjectPtr(txtName) ;
CtlSetLabel(ctl,"Francais");
ctl = GetObjectPtr(btLangue) ;
CtlSetLabel(ctl,"English");
indLang = false;
}
ce qui est en rouge ne fonctionne pas.. Mon bouton change lui pourtant...
Aider moi ... je peux sender mon tit prog. si vous voudriez me donner un coup de main !
Caporal Kro
03/12/2003 à 20:04
Excuse, je pars en vacances en France dans une heure, je suis prêt à t'aider si t'es toujours coincé en janvier quand je rentre.
<HORS_SUJET mode="ON"/>
A moi les drinks pas de pourboire, vins à 5$, clubs ouverts jusqu'à 6h am!!
Joyeuses fêtes à tous, Youpi!!!!
<HORS_SUJET mode="OFF"/>
Patrice
03/12/2003 à 21:49
CITATION(Caporal Kro)
ctlSetLabel (ctl, "blablabla"), tu donnes une constante à l'intérieur d'une fonction. Quand tu sors de ta fonction, le système va consciencieusement libérer toutes les variables et pointeurs de ta fonction.
Désolé Caporal, ce n'est pas la bonne réponse

: une constante est stockée dans une zone mémoire globale et non locale (tellement globale qu'elle est dans l'exe compilé).
PS Méfie-toi des vins à 5$, quand même.
Patrice
04/12/2003 à 08:03
Après test, je confirme : il faut ré-afficher le contrôle pour que le texte soit visible, en utilisant FrmShowObject().
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez
cliquer ici.