Aide - Recherche - Membres - Calendrier
Version complète : "Non-control pointer passed to CtlSetLabel"
Les Forums de PalmAttitude.org > GENERAL PalmOS > Développement sous PalmOS
olivier101
J'ai le message "Non-control pointer passed to CtlSetLabel" émis par le simulateur Treo600 lorsque je tente de changer un label avec un appel à CtlSetLabel. De plus, l'appel ne marche pas du tout (le label n'est pas changé).

Bizarrement, cela fonctionne sur les autres plateformes !!
La chaine que je lui passe est statique, donc pas de souci de ce côté.

Voilà un extrait du code:

CODE
static Boolean MainFormHandleEvent(EventPtr e)

{

    FormPtr frm;

(...)



    switch (e->eType) {

    

    case frmOpenEvent:

 frm = FrmGetActiveForm();

 ControlSetLabel(frm, VersionLabel, palmvncVersion);

(...)

 FrmDrawForm(frm);

(...)


et la fonction ControlSetLabel:

CODE
void ControlSetLabel(FormType *frmP, UInt16 ctlID, Char *label)

{

    ControlType *control;

    UInt16 idx;

    idx = FrmGetObjectIndex(frmP, ctlID);

    control = (ControlType *) FrmGetObjectPtr(frmP, idx);

    CtlSetLabel(control, label);

}
Patrice
Le message tendrait à incriminer le pointeur sur le contrôle (pas le texte) mais un label est bien supposé être un "control". Tu es certain de l'id du label (pas de doublon, tu es sur la bonne form...) ?
Sinon, ça doit être un bug du simulateur :?
blueberry
à moins que "control" ne soit un mot réservé pour le simulateur ???
olivier101
CITATION(Patrice)
Le message tendrait à incriminer le pointeur sur le contrôle (pas le texte)

Oui en effet, mais on ne sait jamais...

CITATION(Patrice)
mais un label est bien supposé être un "control". Tu es certain de l'id du label (pas de doublon, tu es sur la bonne form...) ?
Sinon, ça doit être un bug du simulateur :?

Certain de chez certain, la preuve étant que ça marche sur les autres simulateurs...

Bizarre, c'est quand même une fonction relativement commune. Je serais étonné qu'il s'agisse d'un bug du simulateur ! Il faudra que j'essaye avec d'autres ROMs du Treo600 (il s'agissait des ROMs Orange debug)
Patrice
CITATION(blueberry)
à moins que "control" ne soit un mot réservé pour le simulateur ???

Petite digression infiormative

8O Une fois le programme compilé, les variables peuvent s'appeler comme tu veux, ça n'a pas beaucoup d'influence sur l'exécution...
blueberry
CITATION(Patrice)
CITATION(blueberry)
à moins que "control" ne soit un mot réservé pour le simulateur ???

Petite digression infiormative

8O Une fois le programme compilé, les variables peuvent s'appeler comme tu veux, ça n'a pas beaucoup d'influence sur l'exécution...


bien sur! mais control peut être un mot clé réservé qui correpond à une variable défini dans un .h du simulateur ! (auquel cas, tu devrais avoir un warning à la compil...)
Patrice
Bon, je vois ce que tu veux dire, mais ce n'est pas un .h du simulateur, plutôt du SDK...
Patrice
Olivier, trouvé ça :

http://groups.yahoo.com/group/palm-dev-for...m/message/79897

D'après le posteur, le label n'est pas considéré par l'OS comme un contrôle... Et de renvoyer sur un article (PalmSource) qui décrit la manière de modifier le texte d'un label, avec la fonction FrmCopyLabel() et non avec CtlSetLabel (avec AMHA des effets de bord non négligeables)... Bizarre quand même, vu que ça a toujours marché (sauf Treo)...
olivier101
CITATION(Patrice)
Olivier, trouvé ça :

http://groups.yahoo.com/group/palm-dev-for...m/message/79897

D'après le posteur, le label n'est pas considéré par l'OS comme un contrôle... Et de renvoyer sur un article (PalmSource) qui décrit la manière de modifier le texte d'un label, avec la fonction FrmCopyLabel() et non avec CtlSetLabel (avec AMHA des effets de bord non négligeables)... Bizarre quand même, vu que ça a toujours marché (sauf Treo)...


Merci Patrice ! c'est bien l'erreur que j'ai... je vais essayer dès ce soir.
Bizarre en effet, car la doc de PalmOS ne dit rien là dessus, et dans ce cas je ne comprends pas à quoi sert CtlSetLabel....
olivier101
Je confirme que FrmCopyLabel fonctionne... il faut juste faire attention à ce que la chaine passée ne soit pas plus grande que la longueur initiale du label dans les resources.
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.