Bonjour,

Au retour de la fonction fSélecteur, Windev (WD18 - 01F180063c) perd apparemment le contrôle et les coordonnées du curseur.

Après l’affectation, SAI_Champ1 = fSélecteur, on constate :
Que le curseur continue à clignoter à l’endroit où on a cliqué initialement dans le champ, alors que le champ a été rempli au-delà de cette position et que le curseur devrait se positionner en 1
Que si on insère du texte, l’insertion se produit effectivement à l’endroit où le curseur clignote et non en début de champ
Que les propriétés SAI_Champ1..Curseur et ..FinCurseur valent toutes les deux 1
Que le fait de poser SAI_Champ1..Curseur et ..FinCurseur = Taille(SAI_Champ1) + 1 ne modifie pas la position effective du curseur.

D’où la conclusion annoncée en titre : WD18 perd les coordonnées et le contrôle du curseur au retour d’un appel à fSélecteur dans un champ de saisie.

Pour vérification, la comparaison a été effectuée avec un second champ après lui avoir affecté la valeur du premier champ.
Après l’affectation du champ SAI_Champ1 ci-dessus à SAI_Champ2, soit SAI_Champ2 = SAI_Champ1, le comportement dans SAI_Champ2 est celui attendu, soit :
Le curseur clignote en position 1 ou en fin de champ après l’instruction SAI_Champ1..Curseur = Taille(MoiMême) + 1
L’insertion de texte se produit en fin de champ après l’instruction SAI_Champ1..Curseur = Taille(MoiMême) + 1
Les propriétés ..Curseur et ..FinCurseur valent bien Taille(SAI_Champ2)
La sélection de texte apparaît dans le champ.

Code de la section Entrée dans SAI_Champ1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
Trace("Champ1 après affectation SAI_champ1= fSélecteur")
Trace("Taille - ..Curseur - .. FinCurseur")
Trace(Taille(MoiMême)+ "  -  " + MoiMême..Curseur + "  -  " + MoiMême..FinCurseur)
MoiMême..Curseur = Taille(MoiMême) + 1 
Trace("Le curseur reste positionné là où on a cliqué dans SAI_champ1, même après MoiMême..Curseur = Taille(MoiMême) + 1 soit mémorisé")
Trace("MoiMême..Curseur = " + MoiMême..Curseur + "  -  MoiMême..FinCurseur = " + MoiMême..FinCurseur) 
Trace("Le contrôle du curseur est perdu.")
Trace("Même si ..TexteSélectionné renvoie  le texte attendu (ici, entre 10 et 22), la sélection n'apparaît pas dans le champ.") 
MoiMême..Curseur = 10
MoiMême..FinCurseur = 22
Trace("..Curseur - ..FinCurseur - ..TexteSélectionné")
Trace(MoiMême..Curseur, MoiMême..FinCurseur, MoiMême..TexteSélectionné) 
Trace("========")

Code de la section Entrée dans SAI_Champ2 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SI SansEspace(MoiMême) = "" ALORS 
	MoiMême = SAI_FichierATester  
	MoiMême..Curseur = Taille(MoiMême) + 1 
 
FIN 
Trace("Taille - ..Curseur - .. FinCurseur")
Trace(Taille(MoiMême)+ "  -  " + MoiMême..Curseur + "  -  " + MoiMême..FinCurseur)
MoiMême..Curseur = Taille(MoiMême) + 1 
Trace("Le curseur est positionné en fin de champ après MoiMême..Curseur = Taille(MoiMême) + 1")
Trace("MoiMême..Curseur = " + MoiMême..Curseur + "  -  MoiMême..FinCurseur = " + MoiMême..FinCurseur) 
Trace("Le contrôle du curseur est conservé et le ..TexteSélectionné (entre 10 et 22) apparaît dans le champ") 
MoiMême..Curseur = 10
MoiMême..FinCurseur = 22
Trace("..Curseur - ..FinCurseur - ..TexteSélectionné")
Trace(MoiMême..Curseur, MoiMême..FinCurseur, MoiMême..TexteSélectionné) 
Trace("========")
TRACES
Champ1 après affectation SAI_champ1= fSélecteur
Taille - ..Curseur - .. FinCurseur
40 - 1 - 1
Le curseur reste positionné là où on a cliqué dans SAI_champ1, même après MoiMême..Curseur = Taille(MoiMême) + 1 soit mémorisé
MoiMême..Curseur = 41 - MoiMême..FinCurseur = 41
Le contrôle du curseur est perdu.
Même si ..TexteSélectionné renvoie le texte attendu (ici, entre 10 et 22), la sélection n'apparaît pas dans le champ.
..Curseur - ..FinCurseur - ..TexteSélectionné
10 22 mport\XML\NO
========
SAI_champ2 après affectation de SAI_champ2 = SAI_champ1
Taille - ..Curseur - .. FinCurseur
40 - 41 - 41
Le curseur est positionné en fin de champ après MoiMême..Curseur = Taille(MoiMême) + 1
MoiMême..Curseur = 41 - MoiMême..FinCurseur = 41
Le contrôle du curseur est conservé et le ..TexteSélectionné (entre 10 et 22) apparaît dans le champ
..Curseur - ..FinCurseur - ..TexteSélectionné
10 22 mport\XML\NO
========
Voilà, si un utilisateur de la version 21 veut bien vérifier et éventuellement faire remonter le problème à PCsoft, cela sera peut-être intégré aux mises à jour de cette version.
Pour ma part, je ne notifie rien à PC soft qui surveille évidemment ce forum et comme aucune mise à jour ne sera faite sur la V18, je n'ai aucun intérêt à pousser plus loin que ce billet.

Bonne journée

Hemgé