Startseite › Foren › Deutsches LiveCode-Forum › Zahl im Textfeld formatieren › Antwort auf: Zahl im Textfeld formatieren
Hallo heldenhafte Schildkröte,
willkommen im Forum! 🙂
Die message, die Du suchst, heisst -> on closefield
Die wird gesendet, wenn der Focus das Feld verlässt UND dessen Inhalt geändert wurde!
Wenn der Inhalt nicht geändert wurde, kommt die Message -> on exitfield
Zufällig habe ich vor einiger Zeit mal so eine Funktion erstellt, Achtung genau durchlesen und bei Bedarf nachfragen, die ist nicht ganz trivial, aber logisch. 🙂
Du könntest dann den Feldern dieses Skript geben:
on closefield
put tausender_trenner(me) into me
end closefield
Hier die Funktion, die auch noch Nachkommastellen, per Komma getrennt, in Betracht zieht.
function tausender_trenner tZahl
## Das hier liefern wir am Schluss zurück
put empty into zahlMitTausenderTrenner
## Hat die Zahl Nachkommastellen?
## Dann müssen wir uns die merken, denn wir arbeiten nur mit den ganzen Zahlen VOR dem Komma
put FALSE into nachkommastellen
set itemdel to ","
if the num of items of tZahl = 2 then
put TRUE into nachkommastellen
put item 2 of tZahl into dieNachkommastelle
put item 1 of tZahl into tZahl
end if
## Nun ganz so, wie man es mit einem Stück Papier, Stift,
## Schere und Uhu machen würde!
## Wenn man sich ein Problem mit eigenen Worten erklären kann
## kann man das fast 1:1 in LC "übersetzen"!
repeat
## wir fangen hinten mit den letzten drei Ziffern an:
put char -3 to -1 of tZahl into tTemp
if the num of chars of tTemp < 3 then
put tTemp before zahlMitTausenderTrenner
## Nichts mehr zu trennen, daher:
exit repeat
else
## Punkt hier einfügen
put "." & tTemp before zahlMitTausenderTrenner
end if
## Nun die bereits bearbeiteten Ziffern löschen
delete char -3 to -1 of tZahl
end repeat
## Vielleicht haben wir vorn einen Punkt, den brauchen wir aber nicht
if char 1 of zahlMitTausenderTrenner = "." then
delete char 1 of zahlMitTausenderTrenner
end if
## Nachkommastellen? Dann wieder hinten drankleben
if nachkommastellen then
put "," & dieNachkommastelle AFTER zahlMitTausenderTrenner
end if
return zahlMitTausenderTrenner
end tausender_trenner
Aber immer dran denken, LC rechnet auf ENGLISCH, erwartet also einen PUNKT als Nachkommetrenner, falls das für Dich von Belang ist.
Für solche Gelegenheiten hat der Onkel natürlich auch vorgesorgt 🙂
Pack das ins Stackskript und rufe es auf bevor Du Berechnungen anstellst.
function ohne_komma tZahl
replace "," with "." in tZahl
return tZahl
end ohne_komma
function mit_komma tZahl
replace "." with "," in tZahl
return tZahl
end mit_komma
Wenn Du allerdings ein Feld mit obiger Funktion schon mit Punkt UND Kommata versehen hast, müsstest Du zuerst die Tausenderpunkt löschen -> replace “.” with EMTPY in FeldInhalt
und dann erst die Kommata ersetzen zur Berechnung. Capisce?
Beispiel mit schlicher Addition mit Feldern, die schon schön formatiert sind mit Tausendertrenner und allem Zick und Zack:
on mouseup
put fld 1 into Summand1
put fld 2 into Summand2
## Tausendertrenner entfernen!
replace "." with EMPTY in Summand1
replace "." with EMPTY in Summand2
## Für die Berechnung durch LC vorbereiten = Komma durch Punkt ersetzen
## Ich habe die beiden Schritte zusammengefasst:
put ohne_komma(Summand1) + ohne_komma(Summand2) into tErgebnis
## Ergebnis der Addition nett formatieren und ins Feld schreiben
## Wir sind in Germanien, also zuerst:
put mit_komma(tErgebnis) into tergebnis
put tausender_trenner(tErgebnis) into fld "ergebnis"
end mouseup
Liebe Grüße
Klaus