Comment obtenir une fonctionnalité « Obtenir le texte modifié » pour une TextEditBox dans une application JMP ?Salut tout le monde,
J'ai trouvé de nombreuses solutions utiles ici dans le passé, merci pour cela. Mais maintenant j'ai une question à laquelle je n'ai pas encore trouvé de solution.
J'ai une application JMP avec un TextEditBox et deux TextBox. Les TextBox sont uniquement destinées à la visualisation du résultat. Je souhaite déclencher une action, en fonction de la longueur actuelle du texte dans cette TextEditBox lors de la saisie du texte. Pour le script JSL, il existe une fonction dans l'index de script (GetTextChanged), mais comment puis-je obtenir cette fonctionnalité dans l'application JMP ?
J'appelle la fonction "displ_txt()" avec le script "TextChanged" dans la section objet de TextEditBox et j'ai essayé ce qui suit dans l'onglet Scripts, mais cela ne fonctionne pas.
J'utilise JMP 18.0.0.
OnModuleLoad( {}, );
thisModuleInstance << Create Objects;
displ_txt = Function( {},
teb_txt = TextEdit1 << GetText;
Try( Text2 << SetText( teb_txt ),"Error" );
If( Length( teb_txt ) > 0,
Show( Length( teb_txt ) ) //Here should be the current length after each change
);
//...what I want to do further is like
If( Length( GetTextChanged( teb_txt ) ) <= 3,
Text1 << SetText( "Len below limit" ),
Text1 << SetText( "Len above limit" )
);
);
Merci d'avance,
Mat
Automatisation et scriptsles fenêtresRe : Comment obtenir une fonctionnalité « Obtenir le texte modifié » pour une TextEditBox dans une application JMP ?Qu'essayez-vous de faire avec Get Text Changed ? Obtenir le texte modifié vous renvoie la fonction liée à Définir le texte modifié de la zone d'édition de texte.
displ_txt = Function( {},
teb_txt = TextEdit1 << GetText;
Try( Text2 << SetText( teb_txt ),"Not OK" );
If( Length( teb_txt ) > 0,
Show( Length( teb_txt ) ) //Here should be the current length after each change
);
//...what I want to do further is like
If( Length(teb_txt) <= 3,
Text1 << SetText( "Len below limit" ),
Text1 << SetText( "Len above limit" )
);
);

Il peut y avoir un comportement étrange jusqu'à ce que vous effectuiez la première validation (cliquez en dehors de la zone d'édition de texte ou appuyez sur Entrée).
Re : Comment obtenir une fonctionnalité « Obtenir le texte modifié » pour une TextEditBox dans une application JMP ?que diriez-vous du script :

chaque fois que les utilisateurs sélectionnent la zone d'édition de texte et terminent là, le script sera déclenché.
Le script semble être légèrement "en avance" sur Text Changed :
Lorsque vous y placez displ_txt(), il renvoie déjà la nouvelle longueur une fois que l'utilisateur a terminé l'entrée - pas 1 étape plus tard.
Re : Comment obtenir une fonctionnalité « Obtenir le texte modifié » pour une TextEditBox dans une application JMP ?Ce code devrait vous donner quelques idées :
filter_text = Function( {this, entered_txt},
{msg},
// only attempt to filter if there is any text
If( entered_txt != "",
if (length(entered_txt) <= 3,
msg = "Len below limit",
msg = "Len above limit"
);
message_tb << set text(msg);
);
); // end filter_text function
nw = new window("Test String Length",
user_tb = textedit box("",
<< set text changed(filter_text)),
message_tb = text box("")
);Re : Comment obtenir une fonctionnalité « Obtenir le texte modifié » pour une TextEditBox dans une application JMP ?Merci pour votre réponse. Malheureusement, mon objectif était d'obtenir le texte sans engagement. Ainsi, Script ne fera pas exactement ce que je veux.
Re : Comment obtenir une fonctionnalité « Obtenir le texte modifié » pour une TextEditBox dans une application JMP ?Merci, pmroz. Votre solution m'a conduit au code suivant, qui fonctionne comme prévu.
filter_text = Function( {this, entered_txt},
{msg},
// only attempt to filter if there is any text
If( entered_txt != "",
If( Length( entered_txt ) <= 3,
msg = Char( entered_txt ) || " is below length limit",
msg = Char( entered_txt ) || " is above length limit"
);
Text2 << set text( msg );
)
); // end filter_text function
TextEdit1 << set text changed( filter_text );