Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Bedingung, leeres Textfeld?
Tony-S - Fr 24.04.09 19:24
Titel: Bedingung, leeres Textfeld?
Hallo Community, ich arbeite zur Zeit an einem Programm welches alle Berechnungen von Körpern und Formen beeinhaltet.
Es soll Alles zu Allem rechnen können, d.h., wenn ich bei einem Quadrat nur A gegeben habe, soll es mir direkt
auch e, U, und e berechnen.
Dafür wollte ich die Bedingung nutzen das die jeweils drei leeren Textfelder die Bedingung für die jeweils umgestellte Formel ist.
Mein Problem ist eigentlich nur das icht nicht weiß wie ich meinem Programm sage, das das Textfeld wirklich leer ist.
So wollte ich das lösen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| if (TF_e_Q.Text<>'') or (TF_FL_Quadrat.Text<>'') or (TF_U_Q.Text<>'') then begin A_Q:= a * a; U_Q:= a * 4; e_Q:= a*sqrt(2);
TF_Fl_Quadrat.Text:= FloatToStr(A_Q); TF_e_Q.Text:= FloatToStr(e_Q); TF_U_Q.Text:= FloatToStr(U_Q);
end; |
Ich bekomme den Fehler das '' kein Fließkommawert ist.
Es wäre sehr nett von euch, wenn ihr mir einen Rat geben könntet wie ich mein Problem lösen kann. Thx.
Moderiert von
Narses: Delphi-Tags hinzugefügt
jaenicke - Fr 24.04.09 19:27
Nimm lieber TryStrToFloat. ;-)
Delphi-Quelltext
1: 2: 3: 4: 5:
| var a, b: Single; ... if TryStrToFloat(TF_e_Q.Text, a) and TryStrToFloat(TF_FL_Quadrat.Text, b) ... then ... a und b benutzen |
Tony-S - Fr 24.04.09 19:41
Danke für deine schnelle Antwort, du bist ja fix, btw kannte ich den Befehl bis gerade eben noch nicht ^^.
Ich bekomm jetzt den Fehler, "there is no overloaded version of 'TryStrToFloat' that can be called with this arguments"
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| if TryStrToFloat(TF_e_Q.Text, e_Q) and TryStrToFloat(TF_FL_Quadrat.Text, A_Q) and TryStrToFloat(TF_U_Q.Text, U_Q) then begin A_Q:= a * a; U_Q:= a * 4; e_Q:= a*sqrt(2);
TF_Fl_Quadrat.Text:= FloatToStr(A_Q); TF_e_Q.Text:= FloatToStr(e_Q); TF_U_Q.Text:= FloatToStr(U_Q); end; |
Was ist denn da noch falsch, ich hääte zunächst einmal gedacht ich müsste als L.-Operator "or" nehmen, da es ja vorkommt,
das mehr als nur eine Eingabe vorhanden ist, aber vllt versteh ich da was falsch.
Moderiert von
Narses: Delphi-Tags hinzugefügt
jaenicke - Fr 24.04.09 19:45
Was für ein Typ ist denn s_Q usw.? Wenn das Variablen vom Typ Double sind, dann sollte das so klappen.
Ja, or ist bei deinem ursprünglichen Code richtig, wenn du nach diesem if die weitere Berechnung abbrichst.
Nebenbei sind Unterstriche eher nicht so schön in Variablen und anderen Bezeichnern. Das ist natürlich kein Muss, aber du könntest dir einmal den Styleguide anschauen. ;-)
http://dn.codegear.com/article/10280 (englisch)
http://www.delphi-treff.de/delphi-styleguide/ (deutsch)
Tony-S - Fr 24.04.09 19:56
Die Variablen sind alle Real müsste ja korrekt sein, nicht?
Naja finde Unterstriche ganz ok, weil sich das auch schnell so schreibt ^^.
jaenicke - Fr 24.04.09 20:25
Tony-S hat folgendes geschrieben : |
| Die Variablen sind alle Real müsste ja korrekt sein, nicht? |
Real entspricht zwar Double, ist aber bei TryStrToFloat nicht berücksichtigt worden. Nimm also Double, das ist ja vom Datentyp her das selbe.
Tony-S hat folgendes geschrieben : |
| Naja finde Unterstriche ganz ok, weil sich das auch schnell so schreibt ^^. |
Das schon, aber schnell und gut lesbar finde ich das nicht.
Ich nehme lieber sowas wie edtVolume, edtCircleDiameter, ... und für das Formular frmMain, ...
Wobei es aber immerhin schon gut ist, dass du sie überhaupt bezeichnest. ;-)
Tony-S - Fr 24.04.09 21:48
Ok hab jetzt mal Double genommen, es tritt nun kein Fehler mehr auf.
Aber ein neues Problem, wenn ich 2 der 4 Textfelder mit einer Zahl (egal welche)
fülle und meine Prozedur aufrufe erhalte ich für
A = 0
e = 2,9650301940214E-307
U = 8,38637182646159E-307
Also e stimmt ja noch fast (es wäre 2,8 ) bei einer Seitenlänge von a = 2 aber der Rest kann ja mal gar nicht stimmen.
Habe auch mal anstatt and, or genommen, selber Fehler.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TFrm_Viereck.Btn_QuadratClick(Sender: TObject); var a: Double; A_Q:Double; e_Q:Double; U_Q:Double; begin if TryStrToFloat(TF_e_Q.Text, e_Q) or TryStrToFloat(TF_FL_Quadrat.Text, A_Q) or TryStrToFloat(TF_U_Q.Text, U_Q) then begin A_Q:= a * a; U_Q:= a * 4; e_Q:= a*sqrt(2);
TF_Fl_Quadrat.Text:= FloatToStr(A_Q); TF_e_Q.Text:= FloatToStr(e_Q); TF_U_Q.Text:= FloatToStr(U_Q); end; end; |
Das ist die prozedur mal im ganzen. Hab ich da einen Fehler?
Moderiert von
Narses: Delphi-Tags hinzugefügt
Tony-S - Fr 24.04.09 22:05
Sorry aber da blick ich nicht wirklich durch was da was macht... :0
Naja die Unterscheidung wollte ich ja machen damit lösen, das ich angeben welche Textfelder leer sind also ''.
Was muss ich denn an meinem Beispiel ändern damit ich wenn nur a gegeben ist, die 3 übrigen Werte erhalte, weil dort blick ich nicht sooo sehr durch.
jaenicke - Fr 24.04.09 22:08
Du musst schauen wo etwas drin steht. Wenn du mit TryStrToInt feststellst, dass in A etwas drin steht, dann berechnest du daraus die anderen Werte, sonst wenn in U etwas drin steht, dann berechnest du daraus die anderen Werte, ...
Und am Ende gibst du die eben aus.
Tony-S - Fr 24.04.09 22:09
Das habe ich doch, oder etwa nicht ;-)
Es kommen wie gesagt nur Werte raus, wenn ich 2 Textfelder befülle, und auch immer nur derselbe Wert.
---
Moderiert von
Narses: Beiträge zusammengefasst---
SORRY blöder fehler meinerseits,
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| if TryStrToFloat(TF_a_Quadrat.Text, a) then begin A_Q:= a * a; U_Q:= a * 4; e_Q:= a*sqrt(2);
TF_Fl_Quadrat.Text:= FloatToStr(A_Q); TF_e_Q.Text:= FloatToStr(e_Q); TF_U_Q.Text:= FloatToStr(U_Q); end; |
so stimmts wohl :)
hatte nur die flasche variable ... danke dir erstmal, vllt hab ich ja noch Fragen ;-)
Moderiert von
Narses: Delphi-Tags hinzugefügt
freak4fun - Fr 24.04.09 23:12
OT: Tony-S, benutze doch bitte Delpi-Tags. :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!