Hi,
ich suche nach einer eleganten Methode, an einer bestimmten Stelle (und nur dort) die Anzeige von Exceptions zu unterdrücken.
Theoretisch wäre ja
Delphi-Quellcode:
try
..
except
on EMyException do;
end;
möglich, aber das Thema wurde ja bereits oft diskutiert und vom Schlucken von Exceptions wurde abgeraten - zumal es mir lieb wäre, wenn man in höherer Ebene die
Exception noch mit try-except abfangen konnte. Nur, sollte dies nicht passieren, so sollte die
Exception nicht zur Anzeige einer Meldung führen. Da dies nicht generell für alle Exceptions dieses Types gelten soll, hilft Application.OnException o. ä. nicht.
Vielleicht so?
Delphi-Quellcode:
type
ESilentException =
class(
Exception)
...
public
constructor Create(OriginalException:
Exception);
property OriginalException:
Exception read ...;
destructor Destroy;
override;
end;
...
on E: EMyException
do
raise ESilentException.Create(E);
...
//auf höherer Ebene wäre Behandlung bei Bedarf noch möglich...
on E: ESilentException
do
begin
//Behandlung Stiller Exceptions z. B.
if E.OriginalException
is EMyException
then
HandleMyException;
end;
Aber wie sieht es dann mit der Freigabe der Original-
Exception aus? Denn normaler weise wird sie ja automatisch freigegeben, nachdem sie behandelt (oder angezeigt) wurde. Aber das soll ja hier nicht passieren, da sie in ESilentException noch benötigt wird, bis auch jene abgearbeitet wurde (welche nun z. B. in Application.OnException unterdrückt werden könnte - bei Bedarf). Das Freigeben des Originals sollte also möglichst im destruktor der neuen
Exception - und nur dort - geschehen.
Bietet Delphi oder die
VCL irgendeine elegante Lösung für diesen Fall, und falls nicht, wie könnte man es tun?
Mfg
FAlter