| Autor |
Beitrag |
Holg_i
      
Beiträge: 79
|
Verfasst: Di 17.08.10 07:16
|
|
zuma
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: Di 17.08.10 07:53
schau dir mal
Delphi-Quelltext 1:
| function TryStrToFloat(const S: string; out Value: Extended): Boolean; overload; |
an 
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 17.08.10 07:55
"einfacher" ist Ansichtssache.
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
|
|
Jason_Gregory
Hält's aus hier
Beiträge: 14
Win 7, Ubuntu
VS C# Exp, Delphi 7, SQL, Lua
|
Verfasst: 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; |
Zuletzt bearbeitet von Jason_Gregory am Di 24.08.10 15:09, insgesamt 1-mal bearbeitet
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Di 24.08.10 15:03
|
|
Holg_i 
      
Beiträge: 79
|
Verfasst: 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
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Di 24.08.10 20:16
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Di 24.08.10 20:48
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Di 24.08.10 21:24
Ist euch mal aufgefallen, dass nur zuma das Thema getroffen hat?
Du kannst TryStrToFloat verwenden. Das umgeht dann die Exception, ist also sauberer.
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Di 24.08.10 21:39
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
Zuletzt bearbeitet von jaenicke am Mi 25.08.10 11:20, insgesamt 1-mal bearbeitet
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: 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; |
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
Holg_i 
      
Beiträge: 79
|
Verfasst: 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.
|
|