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 1 von 2  1 2      
zeras

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

AW: Edit-Felder auf Inhalt prüfen

  Alt 1. Aug 2015, 13:17
Wie oben von mir schon geschrieben. Prüfe beide Edits auf = '', dann steht in beiden nichts drin und du kannst eine Fehlermeldung ausgeben.
Du kannst auch TryStrToFloat nutzen, um den Fehler abzufangen.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#2

AW: Edit-Felder auf Inhalt prüfen

  Alt 1. Aug 2015, 13:23
Wie oben von mir schon geschrieben. Prüfe beide Edits auf = '', dann steht in beiden nichts drin und du kannst eine Fehlermeldung ausgeben.
Dann ist ja alles in Butter:
Zitat:
if (edit1.Text='') or (edit2.text='') then begin ShowMessage('Es muss ein Wert angegeben werden!'); end;
[edit] Also gut, mal ein Beispiel (auf eine bessere Benennung habe ich bewusst verzichtet):
Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);
var
  Zahl1, Zahl2, Ergebnis: double;
  Ausgabe: string;
begin
  //Pessimistische Vorbelegung des Augabestrings
  Ausgabe := 'Berechnung fehlgeschlagen';
  if not TryStrToFloat(Edit1.Text, Zahl1) then
    begin
      ShowMessage('Ungültige Eingabe für die erste Zahl');
      Edit1.SetFocus;
      Edit1.SelectAll;
    end
  else if not TryStrToFloat(Edit2.Text, Zahl2) then
    begin
      ShowMessage('Ungültige Eingabe für die zweite Zahl');
      Edit2.SetFocus;
      Edit3.SelectAll;
    end
  //Hier können wir weitermachen, Zahl1 und Zahl2 sind aus den Eingaben befüllt
  else
    begin
      Ergebnis := Zahl1 + Zahl2;
      Ausgabe := FloatToStr(Ergebnis);
    end;
  //Ausgabestring darstellen
  //(enthält entweder das Rechenergebnis oder die Fehlermeldung von ganz oben)
  Edit3.Text := Ausgabe;
end;
[/edit]
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

Geändert von DeddyH ( 1. Aug 2015 um 14:04 Uhr)
  Mit Zitat antworten Zitat
Rookie91

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

AW: Edit-Felder auf Inhalt prüfen

  Alt 1. Aug 2015, 16:35
Hey,

habe das jetzt mal so geändert:
ich weiß leider nicht, was mit formatieren gemeint ist

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;
  Mit Zitat antworten Zitat
Rookie91

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

AW: Edit-Felder auf Inhalt prüfen

  Alt 1. Aug 2015, 16:36
jetzt funktioniert die Rechnung sogar nicht mehr...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#5

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.654 Beiträge
 
Delphi 12 Athens
 
#6

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
 
#7

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.654 Beiträge
 
Delphi 12 Athens
 
#8

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
 
#9

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
 
#10

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
Antwort Antwort
Seite 1 von 2  1 2      


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 16: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