PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 23 → Problème pour positionner le focus dans champ de saisie sur ZoneRépétée
Problème pour positionner le focus dans champ de saisie sur ZoneRépétée
Débuté par mizar, 09 oct. 2018 10:15 - 6 réponses
Membre enregistré
4 messages
Posté le 09 octobre 2018 - 10:15
Bonjour à tous,

Je prépare une application de scan tournant sur Android sur un appareil dédié.

Le principe est le suivant: sur un écran j'ai une ZoneRépétée Zr_SansNom1 contenant deux libellés LibCodeBarres et LibQuantité, et leurs champs de saisie correspondants SAI_Code_Barres et SAI_Quantité. J'ai déclaré un Attribut Valeur dans la ZoneRépétée pour les quatre éléments.

Pour chaque instance de ma zonerépétée j'instancie sans problème mes libellés :
ATT_LibCB[Indice] = "Code Barres"
ATT_LibQte[Indice] = "Quantité"

A chaque fois que mon champ SAI_Code_Barres est remplie par 13 caractères numériques, j'incrémente ensuite la quantité de 1 et créée une nouvelle zonerépétée via la fonction ZoneRépétéeAjoute.

Là ou je sèche complètement :
* Quand j'arrive sur cet écran, j'aimerais que le focus soit déjà positionné sur le champ SAI_Code_Barres de ma ZoneRépétée.
* A chaque instanciation d'une nouvelle ZoneRépétée, j'aimerais que le focus soit positionné dans le champ Code_Barres de ma ZoneRépétée.

Dans le code "Affiche d'une ligne de la Zone Répétée" j'ai testé sans succès les codes suivants :
DonneFocus(ZR_SansNom1.SAI_Code_Barres)
RepriseSaisie(ZR_SansNom1.SAI_Code_Barres)
EcranPremier(ZR_SansNom1.SAI_Code_Barres)

Mon problème :
* Dans l'émulateur ça fonctionne très bien (!)
* En test sur le mobile Android ça ne fonctionne pas, ça ne fonctionne pas non plus sur mon lecteur de code barres tournant sous Android => je ne vois pas le curseur et suis obligé de cliquer manuellement dans les champs, ce qui n'est pas le comportement que j'attends.

Pouvez-vous m'orienter:
* Soit je m'y prends mal pour positionner ce focus? Mais pourquoi celà fonctionne sur pc et pas mobile?
* Est-ce que cela peut venir d'un problème de version android?
* Autre chose?

D'avance merci pour vos lectures et réponses
Posté le 12 octobre 2018 - 09:56
Bonjour,

Je me permets de préciser mon précédent post;
Dans le code d'"affichage d'une ligne" de ma zone répétée, pour positionner le focus dans le champ désiré j'effectue auparavant une affectation : ZR_SansNom1 = Indice
Ensuite je teste de donner le focus à mon champ avec l'une des trois fonctions ci-dessous mais cela ne fonctionne que sur l'émulateur et pas en réel :
DonneFocus(ZR_SansNom1.SAI_Code_Barres)
RepriseSaisie(ZR_SansNom1.SAI_Code_Barres)
EcranPremier(ZR_SansNom1.SAI_Code_Barres)

Si à ce moment j'essaie d'afficher la position du curseur (nValeurCurseur est un entier = SAI_Code_Barres..Curseur) la valeur indiquée est 1 donc à priori le curseur serait bien dans mon champ, mais (sauf dans l'émulateur) je ne vois aucune barre clignotante dans mon champ et si j'essaie de saisir des données je ne suis pas dans mon champ...

D'avance merci et bonne journée
Posté le 12 octobre 2018 - 10:23
Tu peux imposer l'ordre des champ
Regarde cette page
https://doc.pcsoft.fr/?2026006
Membre enregistré
4 messages
Posté le 12 octobre 2018 - 12:48
Bonjour Popoy, merci beaucoup pour ta réponse et l'information je ne connaissais pas encore.
J'avais effectivement mon deuxième champ de saisie qui était initialisé d'abord.

Ca améliore ma situation mais ne résout que partiellement mon problème :
- sur la première occurrence de ma ZoneRépétée je ne parviens pas à avoir le focus dans mon bon champ, comment faire? (il y a aussi une notion d'intialisation des champs dans le même menu mais seul le premier libellé de ma zone apparait).
- l'appli est compilée pour tourner sur Android 7.1.
Je la teste sur deux terminaux (un en 7.1.1 et l'autre en version 8)
=> sur celui en version 8 le focus est bien dans mon champ à chacune des nouvelles occurrences de la zonerépétée, mais pas sur celui en 7.1.

Merci à vous
Membre enregistré
4 messages
Posté le 12 octobre 2018 - 18:47
Je pense en fait avoir d'abord un problème de navigation, la fenêtre contenant ma zonerépétée est en fait appelée depuis un écran FEN_ACCUEIL contenant un bouton qui ouvre un autre écran.

En mettant des traces sur tous les évènements de tous les objets de mon projet, je m'aperçois qu'en fait même si à l'écran c'est ma fenêtre contenant la zonerépétée qui est affichée, en fait le focus est sur ma FEN_ACCUEIL.
Ca explique déjà mon problème: "sur la première occurrence de ma ZoneRépétée je ne parviens pas à avoir le focus dans mon bon champ".

J'ouvrais ma fenêtre avec le traitement prédéfini dans la description du clic sur le bouton et je l'ai remplacé par la fonction Utilise qui est censé fermer ma FEN_ACCUEIL pendant qu'il ouvre la deuxième contenant ma zonerépétée. Mais ma trace affiche toujours FEN_ACCUEIL comme ayant le focus je ne comprends pas...
Membre enregistré
4 messages
Posté le 16 octobre 2018 - 10:20
Bonjour,

Mon écran contenant ma zonerépétée est appelé depuis un écran principal avec une touche de raccourci.
J’essaie de donner le focus depuis les initialisations de mes différents objets (initialisation de la fenêtre contenant la zonerépétée, initialisation de la zonerépétée elle-même, initialisation de mon champ devant prendre le focus, ainsi que juste après l’ouverture de ma fenêtre dans le code du bouton appelant ma fenêtre) : Le curseur n’est jamais dans le champ désiré et n’est pas visible à l’écran sur le smartphone ou terminal Android (sauf en mode émulateur ou cela fonctionne très bien).

Le code positionné est celui-ci :
Indice = ZoneRépétéeAjouteLigne(ZR_SansNom1)
ZR_SansNom1 = Indice
ZR_SansNom1[Indice].ATT_LibCB..Valeur = "Code Barres"
ZR_SansNom1[Indice].ATT_LibQte..Valeur = "Quantité"
DonneFocus(FEN_Liste_V2.ZR_SansNom1.SAI_Code_Barres)

J'ai également essayé d'ouvrir ma fenêtre fille contenant la zonerépétée avec différentes méthodes (Ouvre, OuvreFille, OuvreSoeur, Utilise) mais cela ne fonctionne dans aucun cas, le focus n'est jamais dans mon champ.

Y a-t-il autre chose pour positionner automatiquement le focus dans le même champ d'une ZR, lors de la première occurrence de la zone et des suivantes?

Merci à vous
Membre enregistré
1 614 messages
Posté le 16 octobre 2018 - 17:21
Bonjour,

As-tu essayé avec Reprisesaisie() ? rajoute un bouton sous ta ZR dans lequel tu lances un trace sur ChampPrecedent() pour savoir où est le champ en cour de saisie.

--
Cordialement,

Philippe SAINT-BERTIN