AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Edit-Felder auf Inhalt prüfen

Ein Thema von Rookie91 · begonnen am 1. Aug 2015 · letzter Beitrag vom 5. Aug 2015
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.539 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Edit-Felder auf Inhalt prüfen

  Alt 1. Aug 2015, 16:50
Zeile 1:
Zitat:
V:= StrToFloat(edit1.text)/1000;
Etwa 20 Zeilen später:
Zitat:
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.618 Beiträge
 
Delphi 12 Athens
 
#12

AW: Edit-Felder auf Inhalt prüfen

  Alt 1. Aug 2015, 17:01
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.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Rookie91

Registriert seit: 29. Jul 2015
16 Beiträge
 
#13

AW: Edit-Felder auf Inhalt prüfen

  Alt 1. Aug 2015, 17:53
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

Geändert von Rookie91 ( 1. Aug 2015 um 17:56 Uhr)
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.618 Beiträge
 
Delphi 12 Athens
 
#14

AW: Edit-Felder auf Inhalt prüfen

  Alt 1. Aug 2015, 18:00
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?
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
SProske

Registriert seit: 16. Feb 2015
Ort: Halle/S.
116 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#15

AW: Edit-Felder auf Inhalt prüfen

  Alt 1. Aug 2015, 18:09
Hey,
ich weiß leider nicht, was mit formatieren gemeint ist
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 if Re >= 2320 then auch nur in diesem Falle ausgeführt wird.
Sebastian
  Mit Zitat antworten Zitat
Rookie91

Registriert seit: 29. Jul 2015
16 Beiträge
 
#16

AW: Edit-Felder auf Inhalt prüfen

  Alt 1. Aug 2015, 18:36
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!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.539 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Edit-Felder auf Inhalt prüfen

  Alt 1. Aug 2015, 18:39
Nochmal: erst auf gültige Eingaben prüfen und dann entweder rechnen oder Fehlermeldung ausgeben. Nicht andersherum.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
SProske

Registriert seit: 16. Feb 2015
Ort: Halle/S.
116 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#18

AW: Edit-Felder auf Inhalt prüfen

  Alt 1. Aug 2015, 18:49
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;
Sebastian
  Mit Zitat antworten Zitat
Rookie91

Registriert seit: 29. Jul 2015
16 Beiträge
 
#19

AW: Edit-Felder auf Inhalt prüfen

  Alt 1. Aug 2015, 20:02
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;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: Edit-Felder auf Inhalt prüfen

  Alt 1. Aug 2015, 20:14
Es wurden Dir achon viele Tipps gegeben, welche Du einfach so in den Wind schreibst (Formatierung Try<Typ>To<Typ> usw.)
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz