Aide - Recherche - Membres - Calendrier
Version complète : Texte dynamique
Les Forums de PalmAttitude.org > GENERAL PalmOS > Développement sous PalmOS
Marjorie
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. icon_cry2.gif
Quelqu'un connaîtrait-il la fonction ? icon_biggrin.gif
Merci d'avance...
olivier101
Il me semble que c'est tout simplement CtlSetLabel
Philippe_Dsf
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
Tu as un problème quelque part parce que CtlSetLabel() fonctionne sur les labels (j'ai déjà pas mal utilisé...).
Philippe_Dsf
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
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
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
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
Que voulez-vous je suis débutant.. SA FONCTIONNE PAS .. icon_cry2.gif

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
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. anim_wink.gif

<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
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 anim_wink.gif : 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. anim_wink.gif
Patrice
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.
Invision Power Board © 2001-2008 Invision Power Services, Inc.