Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Ein Paar Exception-Fragen (https://www.delphipraxis.net/3376-ein-paar-exception-fragen.html)

theomega 9. Mär 2003 12:12


Ein Paar Exception-Fragen
 
Hallo Leute
ich habe ein Paar Fragen zu Exceptions:

1. Ich will sämtliche Exceptions, die in meinem Programm auftretten in einem Memo untereinander mitloggen, damit also eine Log-Datei über Fehler entsteht. Dass soll für sämtliche Dateien und alle Kompos gelten

2. Ich möchte, dass bestimmte Exception nirgendwo in meinem Programm, dass Programm zum anhalten bewegen, zu Beispiel soll ein EConverterror einfach übergangen werden.

Wer hat da eine Lösung?

Grüße
TO

APP 9. Mär 2003 14:18

Hallo,

zu 1)
das ist einfach, Du must nur Deinen eigenen Exception-Handler basteln, am Besten im Hauptformular (er gilt applikationsweit):

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    procedure MyExceptionHandler(Sender: TObject; E: Exception);
  public
    { Public declarations }
  end;

....
procedure // Zuweisung auf Deinen eigenen Handler
  TForm1.FormCreate(Sender: TObject);
begin
  Application.OnException := MyExceptionHandler;
end;

....
procedure TForm1.MyExceptionHandler(Sender: TObject; E: Exception);
var
  ErrFileName, ErrMsg: String;
  LOG_FILE: TextFile;
begin
  ErrFileName := ChangeFileExt(Application.ExeName, '.LOG');
    ErrMsg := Format('%s : %s - %s'#13#10, [DateTimeToStr(Now), E.ClassName, E.Message]);
    Memo1.Lines.Add(ErrMsg); // ups Memo, hätte ich fast vergessen!
    AssignFile(LOG_FILE, ErrFileName);  
    Append(LOG_FILE);
    Writeln(LOG_FILE, ErrMsg);
    Flush(LOG_FILE);                        // Sicherstellen, daß der Text tatsächlich in die Datei geschrieben wird.
    CloseFile(LOG_FILE);
  end;
  Application.ShowException(E);
end;
zu 2)
tut mir leid, aber ich verstehe nicht was Du genau willst. :spin:

theomega 9. Mär 2003 18:39

oki, danke 1. wäre gelöst
zu 2.:

Ich habe eine function, in der unter anderem ein float in einen String konvertiert wird. Manchmal tritt dort ein EConVertError auf. Dann wird die function abgebrochen. Das dumme ist, das mein Programm darauf bassiert, dass diese Funktion abgeschlossen wird. Das ist nicht nur bei dieser function so, sondern in noch ein Paar anderen. Ich würde jetzt gerne Einstellen, dass in meinem ganzen Programm keine EConvertErrors mehr ausgegeben werden und dass diese mein Programm auch nichtmehr anhalten.

Grüße

TO

Luckie 9. Mär 2003 18:48

Wie soll das gehen?

Wenn deine Funktion fehlschlägt und was falsches liefert, wie soll denn der Rest funktionieren?

Beispiel: Add ist eine Funktion, die die Summe zweier Zahlen liefert. Un sie aus einem Edit liest. In der Funktion wird die Eingabe mit StrToInt entsprechen umgewandelt.
Delphi-Quellcode:
var
  erg: Integer;
begin
  erg := Add div Add;
So, wenn jetzt die Konvertierung fehlschlägt, wie soll es dann weitergehen? Auch wenn du die Funktion zwinge kannst das Programm nicht abstürzen zu lassen, in der Zeile wo sthet Add div Add kracht es ja dann wieder. :roll:

theomega 10. Mär 2003 12:15

eine Null soll zurückgegeben werden.

Luckie 10. Mär 2003 12:20

Na dann gib doch im except-Abschnitt des try-except-Blockes 0 zurück. Wo ist das Problem?

theomega 10. Mär 2003 12:29

das das für das ganze Programm gelten soll, nicht nur in der einen Funktion.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:55 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