Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Edit-Felder auf Inhalt prüfen (https://www.delphipraxis.net/186079-edit-felder-auf-inhalt-pruefen.html)

DeddyH 1. Aug 2015 16:50

AW: Edit-Felder auf Inhalt prüfen
 
Zeile 1:
Zitat:

Delphi-Quellcode:
V:= StrToFloat(edit1.text)/1000;

Etwa 20 Zeilen später:
Zitat:

Delphi-Quellcode:
if not TryStrToFloat(edit1.Text, V) then begin showmessage('Werte für Volumenstrom und Länge eingeben!');

Also erst einmal fröhlich zuweisen und erst viel später prüfen, ob das überhaupt geht? Schau Dir doch mein Beispiel noch einmal an.

zeras 1. Aug 2015 17:01

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:
V:= StrToFloat(edit1.text)/1000;
Dichte:= StrToFloat(edit11.text);
n:= StrToFloat(edit10.Text)/1000000;
Das sind alles Funktionen, die "schief" gehen können. Wenn zum Beispiel ein Feld leer ist oder vielleicht ein Buchstabe eingetipt wurde.
Diese kannst du mit Tryxxx prüfen, ob die vermeintliche Zahl gewandelt werden konnte. Dann solltest du erst rechnen.

Rookie91 1. Aug 2015 17:53

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

zeras 1. Aug 2015 18:00

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?

SProske 1. Aug 2015 18:09

AW: Edit-Felder auf Inhalt prüfen
 
Zitat:

Zitat von Rookie91 (Beitrag 1310613)
Hey,
ich weiß leider nicht, was mit formatieren gemeint ist :oops:

https://de.wikipedia.org/wiki/Quelltextformatierung

Kurz gefasst die Strukturierung des Quelltextes zur besseren Les- und Wartbarkeit

Ich habe das mal für deinen geposteten Quelltext versucht...

Delphi-Quellcode:
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;
Dabei sieht man dann unter anderem, dass der gesamte Codeblock nach
Delphi-Quellcode:
if Re >= 2320 then
auch nur in diesem Falle ausgeführt wird.

Rookie91 1. Aug 2015 18:36

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!

DeddyH 1. Aug 2015 18:39

AW: Edit-Felder auf Inhalt prüfen
 
Nochmal: erst auf gültige Eingaben prüfen und dann entweder rechnen oder Fehlermeldung ausgeben. Nicht andersherum.

SProske 1. Aug 2015 18:49

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:
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;
Und so sollte es anfangen

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;

Rookie91 1. Aug 2015 20:02

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;

mkinzler 1. Aug 2015 20:14

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.
Seite 2 von 5     12 34     Letzte »    

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