![]() |
AW: Edit-Felder auf Inhalt prüfen
Zeile 1:
Zitat:
Zitat:
|
AW: Edit-Felder auf Inhalt prüfen
Hallo,
du musst die Prüfung vorher machen und nicht erst rechnen und dann weiter unten prüfen.
Delphi-Quellcode:
Das sind alles Funktionen, die "schief" gehen können. Wenn zum Beispiel ein Feld leer ist oder vielleicht ein Buchstabe eingetipt wurde.
V:= StrToFloat(edit1.text)/1000;
Dichte:= StrToFloat(edit11.text); n:= StrToFloat(edit10.Text)/1000000; Diese kannst du mit Tryxxx prüfen, ob die vermeintliche Zahl gewandelt werden konnte. Dann solltest du erst rechnen. |
AW: Edit-Felder auf Inhalt prüfen
Hey,
ich bekomms nicht hin :( ich will jetzt einfach nur, dass die Rechnung wieder funktioniert. Das soll dann reichen. Ich habe alles auf den Anfangszustand gebracht. Wisst ihr, warum das jetzt trotzdem nicht funktioniert? Es kommt die Meldung: Floating point overflow |
AW: Edit-Felder auf Inhalt prüfen
Wie sieht es denn aus mit dem Durchsteppen des Programms?
Dann wirst du sehen, wo es hängt. Versuche doch am Anfang alles mit Try in Float zu wandeln. Wenn die Funktion fehlschlägt, dann konnte der Wert nicht in einen Float Wert gewandelt werden. Das sollte doch machbar sein von dir oder? |
AW: Edit-Felder auf Inhalt prüfen
Zitat:
![]() Kurz gefasst die Strukturierung des Quelltextes zur besseren Les- und Wartbarkeit Ich habe das mal für deinen geposteten Quelltext versucht...
Delphi-Quellcode:
Dabei sieht man dann unter anderem, dass der gesamte Codeblock nach
procedure TForm2.Button1Click(Sender: TObject);
var V, Dichte, n, Re, Laenge, Ergebnis, d: Double; Ausgabe: string; begin V:= StrToFloat(edit1.text)/1000; Dichte:= StrToFloat(edit11.text); n:= StrToFloat(edit10.Text)/1000000; Ausgabe:= 'Berechnung fehlgeschlagen'; case combobox2.ItemIndex of 0: d:= 0.01; 1: d:= 0.012; 2: d:= 0.015; 3: d:= 0.02; 4: d:= 0.025; 5: d:= 0.032; 6: d:= 0.04; 7: d:= 0.05; 8: d:= 0.06; 9: d:= 0.065; 10: d:= 0.08; 11: d:= 0.1; end; Re:= 4*V*Dichte/d/n/3.1416; if Re >= 2320 then begin ShowMessage('Es liegt keine laminare Strömung mehr vor! Reduziere den Volumenstrom und/oder erhöhe den Rohrdurchmesser!'); if not TryStrToFloat(edit1.Text, V) then begin showmessage('Werte für Volumenstrom und Länge eingeben!'); edit1.SetFocus; edit1.SelectAll; end else if not TryStrToFloat(edit2.Text, Laenge) then begin showmessage('Werte für Volumenstrom und Länge eingeben!'); edit2.SetFocus; edit2.SelectAll; end else begin Ergebnis:= 40.744/1000000/d/d/d/d*StrToFloat(edit10.Text)*StrToFloat(edit1.Text)*StrToFloat(edit2.text); Ausgabe := FloatToStr(Ergebnis); end; edit3.text:= Ausgabe; if Re >=2320 then begin edit3.text:= 'Berechnung fehlgeschlagen'; end; end; end;
Delphi-Quellcode:
auch nur in diesem Falle ausgeführt wird.
if Re >= 2320 then
|
AW: Edit-Felder auf Inhalt prüfen
Wie sollte das denn aussehen? Ich muss doch zwischen "end else begin" die Variablen zuweisen ansonsten kann doch nicht gerechnet werden oder?
Bin hier total am verzweifeln. Das Überprüfen ist nicht zwingend notwendig, aber dadurch, dass ich es versucht habe, klappt gar nichts mehr. Ich sehe woran es hängt, nämlich Re:= 4*..., allerdings kann ich damit rein gar nichts anfangen! |
AW: Edit-Felder auf Inhalt prüfen
Nochmal: erst auf gültige Eingaben prüfen und dann entweder rechnen oder Fehlermeldung ausgeben. Nicht andersherum.
|
AW: Edit-Felder auf Inhalt prüfen
Um vielleicht mal einen Ansatz mit etwas Quellcode zu liefern...
So fängt es bei dir an:
Delphi-Quellcode:
Und so sollte es anfangen
procedure TForm2.Button1Click(Sender: TObject);
var V, Dichte, n, Re, Laenge, Ergebnis, d: Double; Ausgabe: string; begin //schlägt fehl, wenn in Edit1 Mist drin steht -> exception V:= StrToFloat(edit1.text)/1000;
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var V, Dichte, n, Re, Laenge, Ergebnis, d: Double; Ausgabe: string; begin //hier wird versucht, V aus Edit1 einzulesen //wenn das funktioniert, geht es mit true weiter if TryStrToFloat(edit1.text, V) then begin V := V/1000; {weitere Werte einlesen, rechnen, Rechnung prüfen} end else begin showmessage('Werte für Volumenstrom und Länge eingeben!'); edit1.SetFocus; edit1.SelectAll; end; end; |
AW: Edit-Felder auf Inhalt prüfen
Bevor ich mich daran nochmal versuche, möchte ich aber, dass die Rechnung wieder einwandfrei läuft und ich das ganze dann nochmal abspeichern kann. Was ist denn jetzt daran falsch?:
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var d,V,Dichte,n,Re: real; begin V:= StrToFloat(edit1.Text)/1000; Dichte:= StrToFloat(edit11.Text); n:= StrToFloat(edit10.Text)/1000000; case combobox2.ItemIndex of 0: d:= 0.01; 1: d:= 0.012; 2: d:= 0.015; 3: d:= 0.02; 4: d:= 0.025; 5: d:= 0.032; 6: d:= 0.04; 7: d:= 0.05; 8: d:= 0.06; 9: d:= 0.065; 10: d:= 0.08; 11: d:= 0.1; end; Re:= 4*V*Dichte/d/n/3.1416; if Re >= 2320 then begin ShowMessage('Es liegt keine laminare Strömung mehr vor! Reduziere den Volumenstrom und/oder erhöhe den Rohrdurchmesser!'); end; edit3.text:= FloatToStr(40.744/d/d/d/d*n*V*StrToFloat(edit2.text)); if Re >=2320 then begin edit3.text:= 'Berechnung fehlgeschlagen'; end; end; |
AW: Edit-Felder auf Inhalt prüfen
Es wurden Dir achon viele Tipps gegeben, welche Du einfach so in den Wind schreibst (Formatierung Try<Typ>To<Typ> usw.)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz