IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Bug possible en WD18 sur le contrôle du curseur au retour de fSélecteur


Sujet :

WinDev

  1. #1
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Par défaut Bug possible en WD18 sur le contrôle du curseur au retour de fSélecteur
    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é

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 402
    Par défaut
    Bonjour,

    Après test, ce que j'ai en 21 :

    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
    Le curseur n'est plus présent
    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
    Qu'entends-tu par insérer : du copier-coller ? N'ayant plus de curseur, l'insertion copier-coller ne va nulle part.

    Que les propriétés SAI_Champ1..Curseur et ..FinCurseur valent toutes les deux 1 Même résultat
    Que le fait de poser SAI_Champ1..Curseur et ..FinCurseur = Taille(SAI_Champ1) + 1 ne modifie pas la position effective du curseur. Même résultat


    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
    Le curseur se trouve à l'endroit où j'ai cliqué

    L’insertion de texte se produit en fin de champ après l’instruction SAI_Champ1..Curseur = Taille(MoiMême) + 1
    Même question : un copier-coller ? Dans ce cas, ça vient là où le curseur clignote.

    Les propriétés ..Curseur et ..FinCurseur valent bien Taille(SAI_Champ2) Même résultat
    La sélection de texte apparaît dans le champ. Pas de sélection

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Par défaut
    Merci pour le suivi.

    Insertion : entrée de texte au clavier.
    Donc, si j'ai cliqué en position 5, le nouvel input s'insère dans la chaîne retournée par fSélecteur à partir de cette position 5.
    Le coup suivant, ce sera en position 28 si j'ai cliqué plus au milieu etc.

    En conclusion, il y a encore un problème avec le curseur au retour de fSélecteur et c'est la seule conclusion à tirer me semble-t-il.

    Par ailleurs, il y aurait donc un autre problème sur la sélection d'un texte au moyen des propriétés ..Curseur, ..FinCurseur et ..TexteSélectionné ?!
    Il faudrait vérifier si c'est uniquement l'affichage surligné qui ne se produit pas ou si on ne retrouve pas non plus le segment sélectionné en l'affectant à une chaîne.
    Avez-vous aussi contrôlé le Trace() ?
    Donc, pour être exactement sur la même longueur d'onde, c'est bien sur le SAI_champ2 ou son équivalent càd pas un retour de fSélecteur et la trace de 10 à 22 ne renvoie rien.

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 402
    Par défaut
    Pas de soucis

    Oui le Trace me renvoie la chaîne entre les propriétés ..Curseur et ..FinCurseur.
    Et oui nous sommes sur la même longueur d'onde.

    J'ai même fait du pas-à-pas histoire d'être certain.

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Par défaut D'une pierre deux coups !
    D'une pierre deux coups : une solution de contournement et une explication.

    En effet, en cherchant à contourner le problème, j’ai avancé dans le diagnostic.
    Après plusieurs autres tentatives de restaurer le contrôle du le curseur en restant ‘dans’ le champ incriminé, je me suis basé sur le fait que le contrôle suivant avait récupéré ce contrôle.
    Il fallait donc sortir du champ à problème et y revenir.

    L’idée a été de faire un aller-retour vers un champ caché (SAI_AR) complètement passif qui renverrait directement le flux du programme vers le champ à dépanner, avec pour seule instruction RepriseSaisie(ChampPrécédent()).

    Le flux considéré serait donc SAI_champ1 => SAI_champ2,
    avec un circuit fermé secondaire SAI_champ1 => SAI_AR => SAI_champ1.

    Là, le curseur disparaissait comme dans les essais de Lo² et, vu les conditions des autres champs, on ne le retrouvait plus dans la fenêtre.
    En traçant les itérations et en faisant du pas à pas, il est apparu que le champ SAI_AR renvoyait non pas au dernier mais à l’avant-dernier champ, soit au champ SAI_champ0 précédant SAI_champ1.

    Le flux était donc en fait : SAI_champ0 => SAI_champ1 => SAI_champ2
    avec un circuit secondaire SAI_champ1 => SAI_AR => SAI_champ0 => ? (nouvelle action de l'opérateur dans le champ 0).

    En analysant la valeur de ChampPrécédent() dans l’instruction RepriseSaisie(ChampPrécédent()) du champ SAI_AR, on a constaté que ChampPrécédent() valait SAI_champ0, au lieu de SAI_champ1 attendu.Dès lors, on a modifié RepriseSaisie(ChampPrécédent()) en une forme moins dynamique, à savoir RepriseSaisie(SAI_champ1).
    Là, le curseur revient bien dans le champ SAI_champ1 et toutes les fonctionnalités sont récupérées, y compris l'affichage du segment sélectionné.


    Donc, concernant les problèmes à l’origine de la discussion, il s’agit sans doute pas d’une perte de contrôle du curseur en tant que telle, mais de l’absence de mise à jour du pointeur de l'environnement vers le champ actif ou de sa mise à jour lacunaire après l'appel de fSélecteur.
    Cela n’offre pas d’explication à la disparition du curseur dans Sai_champ2 constatée par Lo² sous WD21.
    Après cela, soit fSélecteur est une méthode d'une classe plus globale et toutes les méthodes dépendant de cette classe devraient être contrôlées, soit c'est une méthode d'une classe 'monofonction' (ce qui ne serait pas très logique) et les conséquences sont limitées à fSélecteur.

    Actuellement, le système est fonctionnel sur la base suivante :

    Instructions dans le traitement Entrée de 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
    SI ChampPrécédent() <> SAI_AR ALORS
            //traitement préparatoire éventuel
    	//info(MoiMême..curseur) 
    	Trace(MoiMême..Nom) 
    	Trace(ChampPrécédent())
    	// Ouvre le sélecteur de fichiers
    	MoiMême = fSélecteur("", "", "Sélectionnez un fichier.....", "Tous les fichiers (*.*)" + TAB + "*.*", "*.*") 
    	Trace(MoiMême..Nom) 
    	Trace(ChampPrécédent()) 
     
    	EcranPremier(SAI_AR) 
    FIN
    //Suite du traitement
    Le test sur SI ChampPrécédent() <> SAI_AR permet de revenir dans SAI_champ1 pour reprendre le traitement 'comme' au retour de fSélecteur.

    Instructions dans le traitement Entrée de SAI_AR
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Trace(MoiMême..Nom) 
    Trace(ChampPrécédent())  
     
    //RepriseSaisie(ChampPrécédent()) 
    //Ne fonctionne pas car ChampPrécédent renvoie non pas au champ parent mais au grand-parent
    RepriseSaisie(SAI_champ1)

Discussions similaires

  1. [VB6]Questions sur deux contrôles
    Par Jihnn dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 07/05/2006, 21h06
  2. Réponses: 1
    Dernier message: 22/12/2005, 18h33
  3. SetFOcus sur un contrôle d'une autre feuille d'un multipage
    Par MacGeol dans le forum VB 6 et antérieur
    Réponses: 29
    Dernier message: 07/09/2005, 10h37
  4. Réponses: 2
    Dernier message: 06/03/2003, 17h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo