Wie erhalte ich die Funktion „Textänderungen abrufen“ für eine TextEditBox in einer JMP-Anwendung?Hallo zusammen,
Ich habe hier in der Vergangenheit schon viele hilfreiche Lösungen gefunden, vielen Dank dafür. Nun habe ich aber eine Frage, zu der ich bisher noch keine Lösung gefunden habe.
Ich habe eine JMP-Anwendung mit einer TextEditBox und zwei TextBoxen. Die TextBoxen dienen nur zur Visualisierung des Ergebnisses. Ich möchte während der Texteingabe eine Aktion auslösen, die von der aktuellen Länge des Textes in dieser TextEditBox abhängt. Für JSL-Skripte gibt es eine Funktion im Skriptindex (GetTextChanged), aber wie kann ich diese Funktionalität in die JMP-Anwendung integrieren?
Ich rufe die Funktion „displ_txt()“ mit dem Skript „TextChanged“ im Objektbereich der TextEditBox auf und habe Folgendes im Reiter „Skripte“ versucht, aber es funktioniert nicht.
Ich verwende 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" )
);
);
Vielen Dank im Voraus,
Matt
Automatisierung und SkriptingWindowsBetreff: Wie erhalte ich die Funktion „Textänderungen abrufen“ für eine TextEditBox in einer JMP-Anwendung?Was versuchen Sie mit „Get Text Changed“ zu tun? „Get Text Changed“ gibt Ihnen die Funktion zurück, die an „Set Text Changed“ des Textbearbeitungsfelds gebunden ist.
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" )
);
);

Bis zum ersten Commit (klicken Sie außerhalb des Textbearbeitungsfelds oder drücken Sie die Eingabetaste) kann es zu merkwürdigem Verhalten kommen.
Betreff: Wie erhalte ich die Funktion „Textänderungen abrufen“ für eine TextEditBox in einer JMP-Anwendung?wie wäre es mit Skript:

immer wenn der Benutzer das Textbearbeitungsfeld auswählt und dort fertig ist, wird das Skript ausgelöst.
Das Skript scheint dem geänderten Text leicht voraus zu sein:
Wenn Sie displ_txt() dort platzieren, gibt es die neue Länge bereits zurück, sobald der Benutzer die Eingabe abgeschlossen hat – nicht einen Schritt später.
Betreff: Wie erhalte ich die Funktion „Textänderungen abrufen“ für eine TextEditBox in einer JMP-Anwendung?Dieser Code sollte Ihnen einige Ideen vermitteln:
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("")
);Betreff: Wie erhalte ich die Funktion „Textänderungen abrufen“ für eine TextEditBox in einer JMP-Anwendung?Vielen Dank für Ihre Antwort. Leider lag mein Fokus darauf, den Text ohne Commit abzurufen. Daher wird das Skript nicht genau das tun, was ich will.
Betreff: Wie erhalte ich die Funktion „Textänderungen abrufen“ für eine TextEditBox in einer JMP-Anwendung?Vielen Dank, pmroz. Ihre Lösung hat mich zum folgenden Code geführt, der wie vorgesehen funktioniert.
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 );