Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Absturz verhindern/ ich krieg das mit except net gebacken (https://www.delphipraxis.net/61734-absturz-verhindern-ich-krieg-das-mit-except-net-gebacken.html)

vogael 25. Jan 2006 19:25


Absturz verhindern/ ich krieg das mit except net gebacken
 
Hallo,
ist zwar mit hoher wahrscheinlichkeit eine noob-frage(was delphi abgeht bin ich auch einer),
aber ich kriegs net hin, zu verhindern, dass das Programm abstürzt, wenn ein String in integer oder so umgewandelt werden soll, in dem String jedoch Buchstaben vorhanden sind. Ich hab es schonmal mit Except in einer Fuktion und einfach so ausprobiert, ging aber net. so hab ichs gemacht:
Delphi-Quellcode:
//hier die Funktion
function ZahlOderNicht(const test: string): Boolean;
begin
  Result := True;
  try
    StrToFloat(test);
  except
    Result := False;
  end;
end;

//und dann in einer Prozedur:
if ZahlOderNicht(EdtEinzahlung.text) = true then showmessage('Zahl') else showmessage ('Keine Zahl');
Dann stürzt das Programm aber ab, wenn eine Nicht-Zahl im String enthalten ist, obwohl das doch eigentlich mit dem except übergangen werden müsste, oder`````?

omata 25. Jan 2006 19:29

Re: Absturz verhindern/ ich krieg das mit except net gebacke
 
Hallo,

in der IDE wird der Fehler trotzdem ausgelöst (mit F9 gehts weiter), in der EXE nicht.

MfG
Thorsten

Christian Seehase 25. Jan 2006 20:40

Re: Absturz verhindern/ ich krieg das mit except net gebacke
 
Moin vogael,

in der IDE kannst Du es unterdrücken über

Tools\Debugger Options

Tab: Language Exceptions

CheckBox: Stop on Delphi-Exceptions

(tut mir leid, aber ich habe da nur die Angaben der englischen Version)

Ist die Checkbox aktiviert (das ist die Standardeinstellung) passiert das, was Du beschrieben hast, ist sie deaktiviert, verhält sich das Programm in der IDE so wie ausserhalb.

Je nach Delphi-Version hast Du übrigens eventuell auch die Funktion TryStrToFloat zur Verfügung.
Damit könntest Du Dir dann die try/except-Konstruktion ersparen.

Cyberbob 25. Jan 2006 21:41

Re: Absturz verhindern/ ich krieg das mit except net gebacke
 
Bei Delphi 6 musst du unter Tolls/Debugger Optionen die Checkbos "Integrierte Fehlersuche" abschalten.
Unter Dlphi 2005 musst du unter Tools/Optionen auf das Register Debugger und dann auf Integrietes Debuggen klicken.

Hoffe das war das was du brauchst!

mkinzler 25. Jan 2006 21:48

Re: Absturz verhindern/ ich krieg das mit except net gebacke
 
Es fehlt auch die eigentliche Fehlerroutine.

Delphi-Quellcode:
function ZahlOderNicht(const test: string): Boolean;
begin
  Result := True;
  try
    StrToFloat(test);
  except
   on Exception do Result := False;
  end;
end;

//und dann in einer Prozedur:
if ZahlOderNicht(EdtEinzahlung.text) = true then showmessage('Zahl') else showmessage ('Keine Zahl');

xaromz 25. Jan 2006 21:52

Re: Absturz verhindern/ ich krieg das mit except net gebacke
 
Hallo,
Zitat:

Zitat von mkinzler
Es fehlt auch die eigentliche Fehlerroutine.

Nö. Es gibt einfach keine. Wozu auch?

Gruß
xaromz

mkinzler 25. Jan 2006 21:58

Re: Absturz verhindern/ ich krieg das mit except net gebacke
 
Weil du dem Compiler sagen mußt welchen Fehler du abgefangen hast. Wenn du alle Fehler abfangen willst mußt du es so machen wie ich in dem Beispiel weiter oben. Sonst nach dem on die abzufangenede Exception angeben.

Sir Rufo 25. Jan 2006 22:42

Re: Absturz verhindern/ ich krieg das mit except net gebacke
 
Zitat:

Zitat von mkinzler
Weil du dem Compiler sagen mußt welchen Fehler du abgefangen hast. Wenn du alle Fehler abfangen willst mußt du es so machen wie ich in dem Beispiel weiter oben. Sonst nach dem on die abzufangenede Exception angeben.

Nö, muss er nicht, aber s.o. in der IDE wird der Fehler angeziegt, in der EXE nicht ;-)

vogael 26. Jan 2006 05:34

Re: Absturz verhindern/ ich krieg das mit except net gebacke
 
vielen Dank, war ja net son Müll den ich da hatte :-D

h0815 26. Jan 2006 08:24

Re: Absturz verhindern/ ich krieg das mit except net gebacke
 
Zahlen kann man auch auf eine andere Art herausbekommen:
Delphi-Quellcode:
function ZahlOderNicht(const test: string): Boolean;
var
  i_zahl, i_fehler : integer
begin
  Result := True;
  val ( test, i_zahl, i_fehler );
  // i_fehler ist 0, wenn es eine Zahl ist,
  // ansonsten die erste Stelle, die keine Ziffer ist
  Result := i_fehler=0;
  // Du kannst also auch noch folgendes machen:
  if i_fehler > 1 then
  begin
    val(copy(test,1,i_fehler-1), i_zahl, i_fehler );
    // jetzt hast Du die Zahl bis zum ersten Fehler....
  end;
end;
ich hoffe, das hilft ;-)

Grüßchens, Hans


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:09 Uhr.

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