Autor Beitrag
ttauch
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 24.09.04 12:34 
HI!
Bin neu bei delphi also lacht mich nicht aus:-)
Ich hab eine Art Taschenrechner programmiert. Dabei werden die Eingaben in ein editX-Feld geschrieben und dann per StrToFLoat in reele Zahl umgewandelt. Wenn ich allerdings anstatt eine zahl ein wort oder ähnliches in das edit Feld reinschreibe dann schmiert das progi ab. wie kann ich das verhindern und eine "showmessage" ausgeben?
vielen Dank für die Hilfe
iKilledKenny
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 8

Win XP
D5 Prof, C# Express 2005
BeitragVerfasst: Fr 24.09.04 12:42 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
try
  f := StrToFloat (Trim (Edit1.Text));
except
  ShowMessage ('Keine gültige Zahl');
end;


grüße
alex
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 24.09.04 13:15 
Du kannst auch ein TMaskEdit nehmen. Obwohl es da bessere Komponenten gibt, die die Eingabe reiner Zahlenwerte steuern. Ich nehme in solchen Fällen immer etwas aus der RXLib-Sammlung. Sind aber nicht Standard bei Delphi.
GSE
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 740

Win 2k, Win XP Pro
D5 Prof, D6 Ent, D2k5 PE
BeitragVerfasst: Fr 24.09.04 14:34 
oder im KeyDown oder KeyPress die anderen Tasten "abfangen", brauch man eigentlich keien Fremdkompos (Forumsuche)

mfg
GSE

_________________
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs
and the universe trying to produce bigger and better idiots. So far, the universe is winning. (Richard Cook)
ttauch Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 24.09.04 15:19 
das mit dem TRIM funktioniert nicht:-( und das mit dem Keydown und Keypress versteh ich nicht. Was hat das Thema mit Tasten zu tun?
.Chef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: Fr 24.09.04 15:25 
ttauch hat folgendes geschrieben:
und das mit dem Keydown und Keypress versteh ich nicht. Was hat das Thema mit Tasten zu tun?

Wenn du nur Zahlen zur Eingabe ins Editfeld zulässt, steht logischerweise am Ende auch ne Zahl drin.

_________________
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
Johannes Maier
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 173

Win XP
D7 Prof
BeitragVerfasst: Fr 24.09.04 15:27 
Was das Trim angeht: Schau nach ob die Units SysUtils bei dir unter uses steht, wenn nicht schreib sie rein.
Das mit dem KeyPress oder KeyDown:
Wenn du beim Ereignis OnKeyPress z.B. testest, ob die Taste eine Ziffer ist, und ansonsten nichts reinschreibst bzw. das letzte Zeichen wieder löschst, dann kannst du sicher sein, dass keine Buchstaben drinstehen ;)

_________________
MfG
Johannes ehem. jbmaier
ttauch Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 24.09.04 16:11 
und wie würde sowas im quelltext aussehen? :lol: :cry:
.Chef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: Fr 24.09.04 16:25 
Ich hab dir hier mal was aus 'nem Projekt von mir ausgeschnitten. Ist für ein Integer-Editfeld, was positive und negative Zahlen zulässt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TIntEditForm.Edit2Change(Sender: TObject);
var
  a : Integer;
  s : string;
begin
  s:=Edit2.Text;
  s:=UpperCase(s);
  for a:=1 to Length(s) do
    if ((Ord(s[a]) < 48or (Ord(s[a]) > 57)) and
       ((s[a] <> '-'or (a > 1)) then s[a]:='x';
  while Pos('x',s) > 0 do s:=Copy(s,1,Pos('x',s)-1)+Copy(s,Pos('x',s)+1,Length(s));
  if s <> Edit2.Text then Edit2.Text:=s;
end;

procedure TIntEditForm.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
  Key:=UpCase(Key);
  if ((Ord(Key) >= 48and (Ord(Key) <= 57)) or
     (Ord(Key) = 8or (Key = '-'then Exit;
  Key:=chr(0);
end;

_________________
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
GSE
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 740

Win 2k, Win XP Pro
D5 Prof, D6 Ent, D2k5 PE
BeitragVerfasst: Fr 24.09.04 16:27 
Zitat:
(Forumsuche)
www.delphi-forum.de/...ighlight=%2Akeypress

mfg
GSE

_________________
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs
and the universe trying to produce bigger and better idiots. So far, the universe is winning. (Richard Cook)
ttauch Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 24.09.04 19:10 
das is mir alles zu kompliziert:-(
Hab aber was andres gefunden:
StrToIntDef <---versteh ich:-)
StrToFloatDef(S:string;Def:extended): <--- versteh ich net was meinen die mit extendet???

jetzt bräucht ich nur noch was was mir keinen wert zurückliefert sondern irgendwie true und false
gibts da was?
.Chef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: Fr 24.09.04 19:15 
ttauch hat folgendes geschrieben:
das is mir alles zu kompliziert:-(

Mich beschleicht das Gefühl, dass du dir keine Mühe geben willst. Hast du zu StrToFloat und Konsorten überhaupt schonmal in die Hilfe geschaut?

_________________
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
GSE
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 740

Win 2k, Win XP Pro
D5 Prof, D6 Ent, D2k5 PE
BeitragVerfasst: Fr 24.09.04 22:53 
Zitat:
extended
F1!

mfg
GSE

_________________
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs
and the universe trying to produce bigger and better idiots. So far, the universe is winning. (Richard Cook)
ttauch Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 24.09.04 23:13 
ok die frage mit dem extended war dumm. Eigentlich wusste ich was das is nur gabs in der Zeile immer eine Fehlermeldung, die ich fälschlicherweise auf das extended zurückführte.
Jetzt aber bitte zurück zu meiner letzten Frage.
ttauch Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Sa 25.09.04 14:40 
ich hab was in den FAQ gefunden:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure TForm1.Button1Click(Sender: TObject);  
var  
  S: String;  
begin  
  S := '123456';  
  if IsValidInteger(S)  
    then ShowMessage(Format('%s ist eine gültige Integer Zahl', [S]))  
    else ShowMessage(Format('%s ist keine gültige Integer Zahl', [S]));  

 
  ShowMessage(  
    Format('"%s" ist das gültiger Dezimaltrennzeichen', [Decimalseparator]));  

 
  S := '922337203685477,5807';  
  if IsValidCurrency(S)  
    then ShowMessage(Format('%s ist eine gültige Currency Zahl', [S]))  
    else ShowMessage(Format('%s ist keine gültige Currency Zahl', [S]));  

 
  S := '1,1e4932';  
  if IsValidExtended(S)  
    then ShowMessage(Format('%s ist eine gültige Extended Zahl', [S]))  
    else ShowMessage(Format('%s ist keine gültige Extended Zahl', [S]));  
end;

nur funktioniert das nicht selbst wenn ich den code unverändert reinkopiere.
Da steht immer, dass das IsValidExtended, IsValidCurrency, IsValidInteger undefinierte bezeichner sind. was mache ich falsch?


in der FAQ steht noch etwas von der zeile:
function IsValid...(S: String): Boolean;
muss ich die noch irgendwo einbauen?und wenn ja wo?
hoffe auf hilfe:-)