Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
J'aimerai lorsque l'utilisateur saisit une donnée dans un champ, proposer la solution la plus approchante, et positionner le curseur là où la saisie utilisateur se termine. Or, avec le SelectText, le curseur se positionne en fin de sélection. Une idée ?
... This.setText(ls_donnee_trouvee) // ECRIT LE TEXTE CORRESPONDANT This.SelectText(Len(ls_texte_saisi) + 1, Len(ls_donnee_trouvee) - Len(ls_texte_saisi)) // SELECTIONNE LE TEXTE EN COMPLEMENT ET POSITIONNE LE CURSEUR EN FIN DE LIGNE
Hors ligne
Bonjour, petite méthode de sioux, à tester.
1) tu positionnes ton curseur à la fin du texte à sélectionner (selecttext( pos_fin, 0) )
2) tu envoies un keybd_event touche shift (appui uniquement), ensuite tu envoies N fois un shift flêche gauche (appui + relâche) et enfin tu envoies un shift (relâche)
keybd_event -> http://pbadonf.fr/forum/viewtopic.php?id=32
EDIT : tu envoies N fois un flêche gauche ;)
Hors ligne
Bon, ben j'ai opté pour une solution plus visuelle :
Ma DDWN contenant mes données a l'option "Always Show List" cochée, ainsi que le "Allow Edit". En effet si je mets cette option à "No" dans ma condition "If ldwc_data.RowCount() = 1", mon RowCount() passe à 0 (?).
Sur l'évènement editchanged de ma datawindow :
/*****************************************************************************/ /*** EVENEMENT : dw_1.EditChanged ***/ /*****************************************************************************/ DatawindowChild ldwc_data String ls_texte Choose Case dwo.Name Case "my_column" This.getChild("my_column", ldwc_data) ldwc_data.setFilter("") ldwc_data.Filter() ls_texte = Lower(This.getText()) // TEXTE SAISI ldwc_data.setFilter("LOWER(my_displayed_value) LIKE ~"" + ls_texte + "%~"") ldwc_data.Filter() If ldwc_data.RowCount() > 0 Then If ldwc_data.RowCount() = 1 Then This.setItem(row, "my_column", ldwc_data.getItemString(1, "my_bound_value")) End If End If End Choose
Dernière modification par sbouvetJD (01-02-2011 13:19:22)
Hors ligne
ah avec 1 dddw -> http://pbadonf.fr/forum/viewtopic.php?pid=968#p968 (plusieurs variantes, à voir)
Hors ligne
Bonjour,
Je pense que tu as une dddw en autoretrieve et que tu réalises une saisie sur une datawindow (form) qui elle même n'a pas fait l'objet d'un retrieve (pas d'affichage de correspondance nécessaire entre la datawindow et le dddw) . Le programme ne trouve donc pas nécessaire de faire l'autoretrieve à part si tu as besoin visuellement des données en cochant "Always Show List".
Si tu ne veux pas cocher "Always Show List", je pense qu'il faut dans ton cas forcer le retrieve de ta dddw : ldwc_data.Retrieve().
Hors ligne
Oui mais du coup ça me fait un aller-retour vers la DB, pas forcément nécessaire... Je vais voir la réaction de l'utilisateur final (je fais tester la version alpha cette semaine)
Hors ligne