Autor Beitrag
Holg_i
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Di 17.08.10 07:16 
Mal eine kleine Frage zwischen durch. Geht das auch einfacher?
ausblenden 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 user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Di 17.08.10 07:53 
schau dir mal
ausblenden Delphi-Quelltext
1:
function TryStrToFloat(const S: stringout 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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
Jason_Gregory
Hält's aus hier
Beiträge: 14

Win 7, Ubuntu
VS C# Exp, Delphi 7, SQL, Lua
BeitragVerfasst: Di 24.08.10 14:31 
Steuere mal auch ein Beispiel bei, da ich gerade an der gleiche Sache saß

ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Di 24.08.10 15:03 
user profile iconjasocul hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Di 24.08.10 15:05 
Nun ich wollte mit der Procedure

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Di 24.08.10 20:16 
user profile iconJason_Gregory hat folgendes geschrieben Zum zitierten Posting springen:
Steuere mal auch ein Beispiel bei, da ich gerade an der gleiche Sache saß

ausblenden 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

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Di 24.08.10 20:48 
user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconJason_Gregory hat folgendes geschrieben Zum zitierten Posting springen:
Steuere mal auch ein Beispiel bei, da ich gerade an der gleiche Sache saß

ausblenden Delphi-Quelltext
1:
2:
if NOT (Key in [#08'0'..'9']) then
    Key := #0;


Vielleicht sollte man hat noch den CommaSeperator hinzufügen. ;)

... und daran denken nur einen zuzulassen. Darüberhinaus Backspace nicht vergessen! ;)
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Di 24.08.10 21:24 
Ist euch mal aufgefallen, dass nur user profile iconzuma das Thema getroffen hat? :roll:

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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Di 24.08.10 21:39 
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Du kannst TryStrToFloat verwenden. Das umgeht dann die Exception, ist also sauberer.

user profile iconHolg_i hat folgendes geschrieben Zum zitierten Posting springen:
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.

SysUtils eingebunden? :nixweiss:
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: 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):

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function TryStrToFloat(const S: stringout Value: Extended): Boolean;
begin
  Result := TextToFloat(PChar(S), Value, fvExtended);
end;
//mit Double, wer nutzt denn Extended...
function TryStrToFloat(const S: stringout 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Mi 25.08.10 10:13 
So könnte ich also

ausblenden 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

ausblenden 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.