Autor Beitrag
hansg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 168

Win XP Professional SP3, Vista Ultimate 32 SP1
Delphi 6 Professional
BeitragVerfasst: Mo 03.02.03 21:36 
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.

_________________
Gruß Hans
Andreas Pfau
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: 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:
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334

Ubuntu 8.04, WinXP Prof.
D1, D6Pers, D7 Prof., D8 Prof., D2005 Pers
BeitragVerfasst: Mo 03.02.03 21:50 
Hi,

zu deinem konkreten Problem, schau mal hier in der FAQ:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334

Ubuntu 8.04, WinXP Prof.
D1, D6Pers, D7 Prof., D8 Prof., D2005 Pers
BeitragVerfasst: Mo 03.02.03 21:52 
Oh ich seh gerade Andreas Pfau war schneller und hats angeschnitten. :wink: Hier trotzdem der Link:
www.tutorials.delphi...ceptions/index.shtml
Gruss
majolo