bon, j’ai réussi à implémenter mes propositions itératives, mais là avec le renommage des variables, je donne la méthode un peu chamboulée (j’ai enlevé la possibilité des 2 jokers @saisie@)

<code 4D>

// QueryFieldEventHandler

// User name (OS): Olivier Flury - FLURY SOFTWARE

// Date and time: 17.02.17, 16:08:39

// ----------------------------------------------------

// Method: QueryFieldEventHandler

// Description

// Event handler of the variable tQuery

//

// Parameters:

// $1, text, object name of the variable

// $2, text, event

// $3, text, optional (edited text)

C_TEXTE($1;$2;$3;$tObject;$tEvent;$saisie;$tTypeahead;$proposition)

C_ENTIER LONG($indice;$finMotSaisie)

$tObject:=$1

$tEvent:=$2

$saisie:=$3

Au cas ou

: ($tEvent=“OnLoad”)

OBJET FIXER POLICE(*;$tObject+"@";tFontName)*

OBJET FIXER TAILLE POLICE(;$tObject+"@";lFontSize)

OBJET FIXER STYLE POLICE(*;$tObject+"@";lFontStyle)*

OBJET FIXER ALIGNEMENT HORIZONTAL(;$tObject;lAlignment)

OBJET FIXER COULEURS RVB(*;$tObject;lForeGroundColor;lBackGroundColor)

$finMotSaisie:=Longueur(tQuery)+1

Si ((“a”=tQuery) & (“b”=tQuery)) // On a entré l’arobase joker

SÉLECTIONNER TEXTE(tQuery;1;$finMotSaisie) // on sélectionne toute l’arobase

Sinon

SÉLECTIONNER TEXTE(tQuery;$finMotSaisie;$finMotSaisie) // set the cursor at the end

Fin de si

DerniereProposition:=""

: ($tEvent=“OnAfterEdit”)

Si ($saisie="") // on a tout effacé

EFFACER VARIABLE(tQueryTypeahead)

DerniereProposition:=""

tSelected:=""

VALIDER

Sinon

EFFACER VARIABLE(ValeursAffichees)

$saisie:=Uty_AddJockerToString ($saisie)

$indice:=Chercher dans tableau(ValeursPossibles;$saisie)

Si ($indice=Aucun enregistrement courant) // chou blanc, on efface la fenêtre des choix

EFFACER VARIABLE(tQueryTypeahead)

DerniereProposition:=""

tSelected:=$3

VALIDER

Sinon // au moins un choix possible

$proposition:=ValeursPossibles{$indice}

// Recherche et construction du tablau des nouvelles valeurs compatibles :

$indice:=1

Repeter

$indice:=Chercher dans tableau(ValeursPossibles;$saisie;$indice)

Si ($indice#Aucun enregistrement courant)

AJOUTER À TABLEAU(ValeursAffichees;ValeursPossibles{$indice})

$indice:=$indice+1

Fin de si

Jusque ($indice=Aucun enregistrement courant)

// Affichage d’une proposition, nouvelle si possible

$indice:=Chercher dans tableau(ValeursAffichees;DerniereProposition)

Si ($indice#Aucun enregistrement courant) // la précèdente proposition est toujours d’actualité

$indice:=Chercher dans tableau(ValeursAffichees;$saisie;$indice+1) // on regarde alors une autre proposition marcherait aussi

Si ($indice#Aucun enregistrement courant)

$proposition:=ValeursAffichees{$indice} // c’est le cas, on va donc la suggérer en lieu et place de l’ancienne

Fin de si

Fin de si

$tTypeahead:=Sous chaîne($saisie;1;Longueur($saisie)-1)

tQueryTypeahead:=$tTypeahead+Sous chaîne($proposition;Longueur($tTypeahead)+1) // pour respecter la casse des lettres frappées

DerniereProposition:=$proposition // on mémorise cette dernière proposition

Fin de si

Fin de si

: ($tEvent=“DownArrowKey”)

ALLER À OBJET(*;“ablb_Typahead”)

MainEventHandler (“ablb_Typahead”;“SelectFirst”)

Fin de cas

</code 4D>

et pour valider directement la proposition, j’ai du simplifier le bouton TrapTab pour valider aussitôt avec la touche tab

[]19085603;“Your comment here…”[/]

bon, il est minuit en Thailande… bonsoir