Aide - Recherche - Membres - Calendrier
Version complète : FrmLostFocus
Les Forums de PalmAttitude.org > GENERAL PalmOS > Développement sous PalmOS
Philippe_Dsf
Sa existe pas ça !?!? Comment je fais pour mettre à jour un champ qui attends le contenu de l'autre champ pour le faire....

Exemple si dans mon Field1 je place 1 ANS je veux que dans mon FIELD2 avoir 365 jours.. (( a titre d'exemple seulement ))..

Alors Palm offre les commandes GetFocus et SetFocus, mais pas LostFocus.. alros je suis un peu fourrer. Est-ce que je devrais appeler FrmUpdate ?!?!?!

Merci de votre aide !
Patrice
FldEnterEvent et FldChangedEvent... Ca doit suffire...
Philippe_Dsf
Désolé mais je ne connais pas c'Est principe ?!

Exemple quand tu fais un FldInsert je sais que sa fait une mise a jour.. est-ce que je pourrais l'intercepter pour mettre à jour mon autre champ aussi.. je sais vraiment pas comment le faire.. Merci !

Et pour FldHandle si tu as un exemple, ou un site à me référer ce serait cool...

Au pire je me cré un code et je le soumette à FrmUpdate et que je l'intercepte..

"Je suis fourrer un moyen temps " - Expression Québécoise.

merci de votre aide !

sourire.gif
Patrice
Désolé, mais là c'est moi qui ne comprend plus...

Si tu fais un FldInsert(), tu peux bien en profiter pour changer tous les champs que tu veux, pourquoi voudrais tu attendre un autre événément ?

FldChangedEvent est un événement que tu reçois lorsque le contenu d'un champ a été modifié (saisie de l'utilisateur, dans les autres cas je ne suis pas certain).

Quant à FldHandle : je ne vois pas de quoi tu parles ???
Philippe_Dsf
J'étais au téléphone quand j'ai "posté" mon topic.

Effectivement FldInsert() c'est pas ça pantoute dont il est question !

C'est réellement que je veux savoir quand l'utilisateur modifie un champ ou quitte une champ !

As-tu un exemple de ton FldChangeEvent !?!?

Phil !

icon_bla.gif Tout confus !
MarieC
CITATION(Philippe Dsf)
... pantoute ...

= "pas du tout" en québécois icon_lol2.gif

voilà, je repars sur la pointe des pieds et je vous laisse à vos élucubrations... icon_bla.gif
Philippe_Dsf
As-tu un exemple de ton FldChangeEvent !?!? Qui permet de détecter lorsque l'utilisateur modifie le contenue d'un field.

Phil !


De plus..

autre question :


CODE
typedef struct {

 char FPV[1];    

 char MnTMax[11];

    char MntMin[11];

 char TauxMax[5];

 char DurMaxAn[2];

  char DurMaxJr[3];

 char NbJrAn[5];

} strLignePref;





nIndex = AddRecord(dbPref, (MemPtr) &recDBPref, sizeof(strLignePref), &ulUniqID);

J'ajoute un Record à ma DB ensuite je veux rappatrié mon infos dans ma structure comment est-ce que je peux faire je suis toute fucker !

Merci !
Patrice
CITATION(Philippe_Dsf)
As-tu un exemple de ton FldChangeEvent !?!? Qui permet de détecter lorsque l'utilisateur modifie le contenue d'un field.

Je n'ai pas d'exemple mais je ne vois pas où est le problème : c'est un event comme un autre (frmOpenEvent, ctlSelectEvent...). Tu fais un 'case' pour l'événement et tu fais ce que tu veux dedans !

CITATION(Philippe_Dsf)
typedef struct {
 char FPV[1];  
 char MnTMax[11];
char MntMin[11];
 char TauxMax[5];
 char DurMaxAn[2];
  char DurMaxJr[3];
 char NbJrAn[5];
} strLignePref;

nIndex = AddRecord(dbPref, (MemPtr) &recDBPref, sizeof(strLignePref), &ulUniqID);

DmGetRecord ou DmQueryRecord avec, grosso modo, les mêmes paramètres (en fait, l'index est aussi en paramètre au lieu d'être en retour).
Philippe_Dsf
Bon pour le fldChangedEvent() ma l'Explorer mais que ma avoir 2 minutes.. pour mon GetRecord.. tout est tigidou !

Merci !
olivier101
Merci d'utiliser les balises "code" pour encadrer du code... 8)
Philippe_Dsf
Bon j'ai fini mon "taponage" (essai et erreur) pour la fonction FldChangedEvent:

je vais chercher le Focus de object et je travaille avec mais cependant si on utilise la zone graFfiti sa marche pas.. pourquoi ?!

CODE
    

case fldChangedEvent:

  form = FrmGetActiveForm();

   if ( calTxtDuree == FrmGetObjectId(form, FrmGetFocus(form))  )

        {

        fldPtr = FrmGetObjectPtr(form, FrmGetFocus(form)) ;

        if ( FldGetTextPtr(fldPtr) != NULL )

             {

             SetFieldTextFromStr(calTxtTerme,FldGetTextPtr(fldPtr), true);

             }      

        }

FrmSetFocus(form, FrmGetFocus(form));  

handled = true;

break;


Alors si je change le contenu du textField calTxtDuree et bien je fait suivre les modifications dans calTxtTerme. Mais si j'inscrit mon nombre avec la zone Graffiti sa ne fonctionne pas. POURQUOI ?!?!
Patrice
Probablement parce que la zone graffiti a le focus et pas le champ.

C'est quand même une drôle d'idée d'insérer tout ce code pour voir quel est le champ qui a le focus alors que ce qui t'intéresse est de savoir quel est le champ qui a été modifié et que son ID (fieldID) est justement passé en paramètre de l'événement rolleyes.gif
Philippe_Dsf
Pourrais-tu m'en dire plus ?! J'ai pas ta connaissance, je me débrouille avec le temps que j,ai d'ailleur on livre notre première version ( BETA ) ce vendredi et il reste tellement à faire.. Je crois que ma avoir une grosse semaine, Alors si tu peux me montrer de quoi qui me ferait sauver du temps... "Envoye fort " = Gêne toi surtout pas !

Phil... icon_cry.gif
Patrice
Ben... Tu regardes la doc du SDK et tu verras que chaque événement est accompagné d'une structure contenant des paramètres. Et en gros pour chaque événement, les paramètres transmis correspondent aux données dont tu peux avoir besoin pour gérer cet événement...
Philippe_Dsf
CODE
Boolean calFormHandleEvent(EventType *event)

{



Boolean    handled = false;

FormType      *form;

[...]



switch (event->eType)

    {

    case frmOpenEvent:

                      [...]

                       break;

               case fldChangedEvent:

                        handled = calFormFieldCommand(event->data.fldChanged.fieldID);

 break;

[...]





Boolean calFormFieldCommand(UInt16 fieldID)

{

Boolean handled=false;



switch (fieldID)

{

   case calTxtRdprm:

            ((( TRAITEMENT ICI )))

            handled = true;

          break

[...]



}







Tu mieux là ! hi hi hi  :P



               
Philippe_Dsf
Pourquoi est ce que les champs qui sont vérifiés par fldEnterEvent et fldChangedEvent. ne peuvent plus être sélectionner.. et pourquoi dois-je faire une FrmSetFocus(form, FrmGetFocus(form)); à la fin pour redonner le focus, sinon je n'ai plus de curseur !??!

CODE
Boolean calFieldHandleEvent(UInt16 fieldID)

{

Boolean      handled = false;

[...]



form = FrmGetActiveForm();

ObjectIDprevious = fieldID;



switch( fieldID )

    {

    case calTxtDuree:

     fldPtr = FrmGetObjectPtr(form, FrmGetFocus(form)) ;

  if ( FldGetTextPtr(fldPtr) != NULL )

     {

     SetFieldTextFromStr(calTxtTerme,FldGetTextPtr(fldPtr), true);

     }      

     handled = true;

  break;

     

    case calTxtRdprm:

                         [...]

     handled = true;

  break;



    default:

 break;

    }  



FrmSetFocus(form, FrmGetFocus(form));      

return handled;

}



l'appel ressemble au Post avant .... je ne comprends pas...

:!: HELP :!:

Merci de votre aide... icon_bla.gif
Patrice
1) Vraisemblablement à cause de l'appel SetFieldTextFromStr() : je ne sais pas ce que c'est cette fonction, mais si elle est basée sur un FldSetTextPtr(), une simple consultation de la doc t'indique :
CITATION(La doc du SDK)
Set a noneditable field’s text to point to the specified text string.
Si tu l'utilises sur un champ éditable, forcément tu as des problèmes.

2) A mon avis, c'est le handled = true qui pose problème...
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.