AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Absturz verhindern/ ich krieg das mit except net gebacken
Thema durchsuchen
Ansicht
Themen-Optionen

Absturz verhindern/ ich krieg das mit except net gebacken

Ein Thema von vogael · begonnen am 25. Jan 2006 · letzter Beitrag vom 26. Jan 2006
Antwort Antwort
vogael

Registriert seit: 13. Sep 2005
15 Beiträge
 
#1

Absturz verhindern/ ich krieg das mit except net gebacken

  Alt 25. Jan 2006, 20:25
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`````?
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

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

  Alt 25. Jan 2006, 20:29
Hallo,

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

MfG
Thorsten
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 25. Jan 2006, 21:40
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Cyberbob
Cyberbob

Registriert seit: 24. Jan 2005
Ort: Karben
626 Beiträge
 
Delphi XE7 Architect
 
#4

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

  Alt 25. Jan 2006, 22:41
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!
Christian
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

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

  Alt 25. Jan 2006, 22:48
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');
Markus Kinzler
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#6

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

  Alt 25. Jan 2006, 22:52
Hallo,
Zitat von mkinzler:
Es fehlt auch die eigentliche Fehlerroutine.
Nö. Es gibt einfach keine. Wozu auch?

Gruß
xaromz
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 25. Jan 2006, 22:58
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.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

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

  Alt 25. Jan 2006, 23:42
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
vogael

Registriert seit: 13. Sep 2005
15 Beiträge
 
#9

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

  Alt 26. Jan 2006, 06:34
vielen Dank, war ja net son Müll den ich da hatte
  Mit Zitat antworten Zitat
h0815

Registriert seit: 8. Dez 2005
Ort: Forchheim
7 Beiträge
 
Delphi 2005 Professional
 
#10

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

  Alt 26. Jan 2006, 09:24
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
Hans Baumann
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 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