Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Try-Except Hilfe (https://www.delphipraxis.net/159385-try-except-hilfe.html)

eugene222 25. Mär 2011 14:39

Delphi-Version: 5

Try-Except Hilfe
 
Ich hab eine Try Except Funktion, welche dafür sorgt, dass man in ein EditFeld keine Buchstaben eingeben kann. Jetz hab ich das Problem, dass man keine Negativen Zahlen eingeben kann. Kann mir villeicht jemand helfen oder eine bessere Alternative präsentieren.

Code:
procedure TForm1.ed_abst_Change(Sender: TObject);
 BEGIN
  TRY
   f_abst := StrToFloat(ed_abst.Text);
  EXCEPT
   ed_abst.Text := ''; f_abst := 0;
  END;
 END;

himitsu 25. Mär 2011 14:44

AW: Try-Except Hilfe
 
StrToFloat sollte negative Zahlen zulassen.
Oder willst du, daß man keine Negativen eingeben kann/darf? :gruebel:



PS: wozu das Try-Except?
Delphi-Referenz durchsuchenTryStrToFloat oder Delphi-Referenz durchsuchenStrToFloatDef wurden nicht umsonst erfunden.

Weißt du wie schwer sowas zu Debuggen ist?
Ich hatte jetzt in unserem Programm (der Firma) 12 Jahre alten Code umgeändert, da beim Programmstart im Debugger hunderte Exceptions aufliefen ... durch sowas wie hier.

jfheins 25. Mär 2011 14:46

AW: Try-Except Hilfe
 
Du könntest die Überprüfung "weniger strikt" gestalten. Also z.B. beim OnExit prüfen ob es eine Zahl ist, und wenn ja einen grünen Rahmen um das Feld (Signal: "OK") und wenn nicht dann einen roten Rahmen (aber den Text unverändert lassen) und ggf. den OK Button deaktivieren.

Die etwas nervigere Lösung wäre wohl, das OnExit nur zu erlauben, wenn eine gültige Zahl drinsteht. Dzu solltest du die Prüfung ins OnExit verlagern und dort bei fehlgeschlagner Prüfung den Fokus "zurückholen" und einen Warnton abspielen. Das ist dann zwar nicht nett aber du kannst relativ sicher sein, dass am Ende eine gültige Zahl drinsteht.

@himi: In dieser Form nicht "einfach so" - weil wenn man mit dem Minus anfängt isses noch keine gültige Zahl und das Minus wird wieder gelöscht ;)

DeddyH 25. Mär 2011 14:48

AW: Try-Except Hilfe
 
AFAIK gab es in Delphi 5 weder TryStrToFloat noch StrToFloatDef.

alfold 25. Mär 2011 15:01

AW: Try-Except Hilfe
 
Im onkeypress kannst Du sowas verwenden
Delphi-Quellcode:
if not (key in ['0'..'9',#8, '.', ',', '-' ]) then key := #0;

es werden nur zahlen 0-9, backspace, punkt, komma und minus zugelassen.

so als Alternative

alfold

BUG 25. Mär 2011 15:10

AW: Try-Except Hilfe
 
Zitat:

Zitat von alfold (Beitrag 1090980)
Im onkeypress kannst Du sowas verwenden
Delphi-Quellcode:
if not (key in ['0'..'9',#8, '.', ',', '-' ]) then key := #0;

Dann gehen aber auch Eingaben wie
Code:
32098,32--43,32-44.3294.3-24
Die Lösung von jfheins würde ich bevorzugen, allerdings ließe sich das ja auch kombinieren.

DeddyH 25. Mär 2011 15:22

AW: Try-Except Hilfe
 
Wie wäre es denn so (über das Leeren des Edits kann man sich ja streiten, aber das ist nicht meine Sache)?:
Delphi-Quellcode:
//Für ältere Delphis unelegant implementiert
function TryStrToFloat(const s: string; out Number: double): Boolean;
begin
  try
    Number := StrToFloat(s);
    Result := true;
  except
    Result := false;
  end;
end;

procedure TForm5.Edit1Change(Sender: TObject);
var
  Zahl: double;
begin
  if (Sender is TEdit) and (TEdit(Sender).Text <> '') and (TEdit(Sender).Text <> '-') then
    if not TryStrToFloat(TEdit(Sender).Text, Zahl) then
      TEdit(Sender).Text := '';
end;

himitsu 25. Mär 2011 18:18

AW: Try-Except Hilfe
 
Zitat:

Zitat von DeddyH (Beitrag 1090972)
AFAIK gab es in Delphi 5 weder TryStrToFloat noch StrToFloatDef.

Ob der TE wirklich D5 verwendet, sei mal dahingestellt, denn D5 ist hier Standard, also steht immer dann da, wenn man da nix angegeben hat.

> Daniel hat ja nicht auf mich gehört, und keine anderere Vorauswahl eingebaut. :?

Solange eugene222 also nix anderes sagt, geh ich einfach davon aus, daß er nichts geziehlt angegeben hat.
PS: Ein Eintrag im Profil hätte dieses jetzt aber klären können.

DeddyH 25. Mär 2011 18:37

AW: Try-Except Hilfe
 
Im Ausgangspost ist explizit Delphi 5 angegeben.

eugene222 25. Mär 2011 20:20

AW: Try-Except Hilfe
 
Ich war weg, hab jetzt kurz eure Beiträge kurz überflogen. Ich habe die Delphi Version 7. Ich werde das ändern. Es wird als Standart V. 5 angegeben. Ich habe das nicht bemerkt. Morgen werd ich die Beiträge nochmal durchlesen und es ausprobieren, da ich jetzt erstmal schlafen gehe.
Naja aber Danke für eure Hilfe bis jetzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz