Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Ist Eingabe eine Zahl (Real)
Holg_i - Di 17.08.10 07:16
Titel: Ist Eingabe eine Zahl (Real)
Mal eine kleine Frage zwischen durch. Geht das auch einfacher?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| var Eingabewert: String;
procedure TForm1.Edit1Change(Sender: TObject);
Var Wert: Real;
begin try Wert:=StrToFloat(Edit1.Text); Eingabewert:=Edit1.Text except Eingabewert:='{'+Edit1.Text+'}'; end; end; |
Moderiert von
Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
zuma - Di 17.08.10 07:53
schau dir mal
Delphi-Quelltext
1:
| function TryStrToFloat(const S: string; out Value: Extended): Boolean; overload; |
an ;)
jasocul - Di 17.08.10 07:55
"einfacher" ist Ansichtssache. :lol:
Du kannst eine Komponente für die Eingabe nehmen, die nur Zahlen zulässt oder du prüfst beim OnKeyPress-Ereignis, welche Taste gedrückt wurde und ob die zulässig ist. Es gibt auch noch Lösungen, die deine Prüfung in einer Funktion lösen. TryStrToFloat war das glaube ich.
Zur zweiten Möglichkeit gibts im Forum schon Lösungen.
Hier ein Beispiel [
http://www.delphi-forum.de/viewtopic.php?p=582114#582114]
Jason_Gregory - Di 24.08.10 14:31
Steuere mal auch ein Beispiel bei, da ich gerade an der gleiche Sache saß
Delphi-Quelltext
1: 2:
| if NOT (Key in [#08, '0'..'9']) then Key := #0; |
Marc. - Di 24.08.10 15:03
jasocul hat folgendes geschrieben : |
| Du kannst eine Komponente für die Eingabe nehmen, die nur Zahlen zulässt oder du prüfst beim OnKeyPress-Ereignis, welche Taste gedrückt wurde und ob die zulässig ist. |
Man bedenke aber, dass sich ungeachtet davon Text noch immer kopieren und einfügen lässt. Daher sollte die tatsächliche Eingabe auf jeden Fall geprüft werden. :P
Holg_i - Di 24.08.10 15:05
Nun ich wollte mit der Procedure
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| var Eingabewert: String;
procedure TForm1.Edit1Change(Sender: TObject);
Var Wert: Real;
begin try Wert:=StrToFloat(Edit1.Text); Eingabewert:=Edit1.Text except Eingabewert:='{'+Edit1.Text+'}'; end; end; |
dem String Eingabewert, sollte es sich um eine Real-Zahl handeln die Zahl in einem String speichern.. sollte das nicht der fall sein die eingabe mit einem { davor und einem } dahinter makieren.... es hat etwas mit einem Parser zu tun.
So weiß ich ob der Bnutzer eine Zahl benutzt für die weiterverarbeitung oder eine Variable z.B. pi...
Die Funktion TryStrToFloat steht so wie ich das nun mitbekommen habe leider in Delphi4 noch nicht zur verfügung... Hatte ich vergessen aufzuzeigen das ich mit Delphi4 arbeite.
Aber Danke für die Hilfestellung
elundril - Di 24.08.10 20:16
Jason_Gregory hat folgendes geschrieben : |
Steuere mal auch ein Beispiel bei, da ich gerade an der gleiche Sache saß
Delphi-Quelltext 1: 2:
| if NOT (Key in [#08, '0'..'9']) then Key := #0; | |
Vielleicht sollte man hat noch den CommaSeperator hinzufügen. ;)
lg elundril
Marc. - Di 24.08.10 20:48
... und daran denken nur einen zuzulassen. Darüberhinaus Backspace nicht vergessen! ;)
Martok - Di 24.08.10 21:24
Ist euch mal aufgefallen, dass nur
zuma das Thema getroffen hat? :roll:
Du kannst TryStrToFloat verwenden. Das umgeht dann die Exception, ist also sauberer.
jaenicke - Di 24.08.10 21:55
Daran liegt das nicht, die TryXXX Funktionen gibt es AFAIK erst seit Delphi 5 6.
// EDIT:
Ok, geht sogar erst ab Delphi 6.
Martok - Mi 25.08.10 00:58
Och Mensch, da wollte ich mal anderen "nicht lesen" vorwerfen, und bin selber nicht besser :?
TextToFloat ist aber schon public, so dass man die recht einfach selber bauen kann (oder aus den D7-Sourcen raubmordkopieren, so wie ich das hier gemacht hab):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| function TryStrToFloat(const S: string; out Value: Extended): Boolean; begin Result := TextToFloat(PChar(S), Value, fvExtended); end; function TryStrToFloat(const S: string; out Value: Double): Boolean; var LValue: Extended; begin Result := TextToFloat(PChar(S), LValue, fvExtended); if Result then Value := LValue; end; |
Holg_i - Mi 25.08.10 10:13
So könnte ich also
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Edit1Change(Sender: TObject);
Var Wert: Real;
begin try Wert:=StrToFloat(Edit1.Text); Eingabewert:=Edit1.Text except Eingabewert:='{'+Edit1.Text+'}'; end; end; |
gegen
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Edit1Change(Sender: TObject);
Var Wert: Real;
begin Eingabewert:=Edit1.Text; IF TextToFloat(PChar(Eingabewert), Wert, fvExtended)=False then Eingabewert:='{'+Edit1.Text+'}'; end; |
tauschen.
genau das war meine Frage :-)
Das einzig dumme an der Geschichte ist das Eingabewert ein ShortString ist. Nunja aber das ist ein anderes Problem.
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!