Entwickler-Ecke

Sonstiges (Delphi) - Fehlermeldungen abfangen


hansg - Mo 03.02.03 21:36
Titel: Fehlermeldungen abfangen
Hallo zusammen,
wie und wo kann man Fehlermeldungen im Programm abfangen?

z.B. Zugriff auf Diskettenlaufwerk wenn keine Disk drin ist bzw. Schreibversuch auf Disk mit Schreibschutz oder belegte Schnittstelle.


Andreas Pfau - Mo 03.02.03 21:49

Also, "Fehlermeldungen" ist zu allgemein. Es gibt Exceptions, die werden von Delphi als MessageBoxen angezeigt (z.B. "Der Index in der Lsite überschreitet das Maximum (0)."). Die kannst du so abfangen:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  I: Integer;
  A: Array[0..1] Of Integer;
begin
  I := 10;
  Try
    A[I] := 0; // Fehler! Aber keine Message, dank Except
  Except
    // Fehlerbehandlung
  end;
end;

OK, d.h. wenn zwischen "Try" und "Except" eine Exception auftritt, kommt keine Message, sondern es wird das gemacht, was in "Except".."end" steht. Das wird nicht ausgeführt, wenn zuvor alles glatt geht. Anmerkung:Wenn man statt "Except" "Finally" verwendet, wird das nach "Finally" immer ausgeführt, auch im Fehlerfall.

OK, Das mit dem Drive, wo diese Message aufpoppt "Vom angegebenen Gerät kann nicht gelesen werden" (oder so ähnlich, je nach OS). Das ist ein Sonderfall. Die WinApi gibt normalerweise keine Meldungen aus. Aber das ist ja mehr als API. Hier musst du so behandeln:

Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  OldErrorMode: Cardinal;
begin
  OldErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS);
  // So hier kannst du jetzt errors reihnauen!
  SetErrorMode(OldErrorMode);
end;


Und wenn dir mal 'ne Schutzverletzung aufkommt... gegen die ist kein Kraut gewachsen :( . Ich kenne zumindest nix. Außer eben beim Speichermanagment keine Fehler zu machen. Und auf keinen Fall W95 verwenden :wink:


majolo - Mo 03.02.03 21:50

Hi,

zu deinem konkreten Problem, schau mal hier in der FAQ:
http://www.delphi-forum.de/viewtopic.php?t=133

Allgemein meinst du wahrscheinlich die Try Except Blöcke. Habe Link zu Tutorial gerade nicht griffbereit wird nachgeliefert.
Gruss
majolo


majolo - Mo 03.02.03 21:52

Oh ich seh gerade Andreas Pfau war schneller und hats angeschnitten. :wink: Hier trotzdem der Link:
http://www.tutorials.delphi-source.de/exceptions/index.shtml
Gruss
majolo