Hallo Simone,
Zum ersten:
>>das mit float() und floatP() ist mir noch unklar...
Director unterscheidet zwischen einfachen Zeichenketten (Strings), Fließkommazahlen (float) und ganzen Zahlen (integer). Strings werden in Anführungen an- bzw. ausgegeben. ZB.:
myString = "Dies ist ein Satz"
Zahlen ohne Anführungen. Z.B.:
myNmb = 1
myNmb = 1.54354534
Zahlen können natürlich auch Strings sein. ZB.:
myNmb = "1"
Man kann aber auch Strings in Zahlen oder Zahlen in Strings umwandeln mit string(), float() oder integer().
Wenn man überprüfen will, ob ein Wert ein String, eine Fließkommazahl oder ein ganze Zahl ist, geht das mit den Befehlen stringP(), floatP() oder integerP().
Wenn ich ein Zeichen in einer Zahl, austauschen will (Punkt oder Komma zB.), dann muß ich diese in einen String umwandeln, selbige aber von einem String in eine Fließkommazahl umformatieren, wenn ich damit rechnen will (wobei Director letzteres auch automatisch macht).
So und nun zum eigentlichen Problem:
Das Skript sollte es tun (habe es diesmal ein wenig kommentiert):
on beginSprite me
the floatPrecision = 1
put EMPTY into member "feld01"
put EMPTY into member "feld02"
put EMPTY into member "ausgabe02"
end beginSprite
on mouseUp me
myText1 = member("feld01").text
-- es folgt eine Abfrage, ob die Eingabe ein Komma enthält
if myText1 contains "," then
-- die folgenden 5 Zeilen wandeln das Komma zum Rechnen in einen Punkt um
repeat with n = 1 to the number of chars in myText1
if char n of myText1 = "," then
put "." into myText1.char[n]
end if
end repeat
else
nothing
end if
-- das ganze nochmal für Feld zwei
myText2 = member("feld02").text
if myText2 contains "," then
repeat with n = 1 to the number of chars in myText1
if char n of myText2 = "," then
put "." into myText2.char[n]
end if
end repeat
else
nothing
end if
-- wenn einer der Werte keine Zahl ist wird eine Warnung ausgegeben
if floatP(float(myText1)) = 0 then
put EMPTY into member "feld01"
alert "Ungültiger numerischer Wert!"
else
var1 = float(myText1)
if floatP(float(myText2)) = 0 then
put EMPTY into member "feld02"
alert "Ungültiger numerischer Wert!"
else
var2 = float(myText2)
-- nun kommt die eigentliche Rechnung, wenn die Werte OK sind
ergebnis = (var1 * 10000) / (var2 * var2)
-- nu wird der Punkt wieder in ein Komma umgewandelt
myStrg = string(ergebnis)
myCt = the number of chars in myStrg - 1
put "," into myStrg.char[myCt]
-- und der Text ausgegeben
put "Your BMI amounts to" && myStrg into member "ausgabe02"
end if
end if
-- hier kommen dann die Abfragen für das Infofeld rein
end mouseUp
Und nun zum Thema Geduld und dumme Fragen:
Habe jahrelang Computerkurse gegeben - unter anderem Computereinführungskurse - da entwickelt man zwangsläufig die Geduld eines Hühnengrabes. Außerdem habe ich etwa eine Stunde täglich für dieses Forum reserviert (dieses Problem hat mich eine halbe Stunde gekostet, also habe ich noch eine halbe für mich :)).
Aber das hier ist ja auch wirklich ein recht komplexes Skript für eine einfache Rechenformel. Wenn man viel programmiert muß man aber einfach feststellen, das man die meiste Zeit in solch lästige Hin- und Herkonvertierereien und Abfragen für jeden erdenklichen Fall stecken muß. Sei froh, daß Du keine Datumsberechnungen/-formatierungen mit JavaScript machen mußt oder so. Da ist Lingo wirklich schon komfortabel... ;)
greez cb