![]() |
AW: Zwischenablage Zugriff verweigert
Gerade in dem Fall das bereits eine Exception ausgelößt worden ist, ist
Delphi-Quellcode:
wirklich am besten.
raise;
Du würdest sonst ja die anderen Exception Informationen verbergen. |
AW: Zwischenablage Zugriff verweigert
In diesem Fall ist es ja einfach, denn es gibt bereits eine "andere" Exception-Klasse.
Delphi-Quellcode:
else
begin raise EClipboardException.Create('Cannot read clipboard after fifty attempts'); Aber es ist ebenfalls extrem unschön, wenn man die eigentliche Exception sinnlos vernichtet.
Delphi-Quellcode:
else
begin raise EClipboardException.Create('Cannot read clipboard after fifty attempts'#10#10 + E.Message);
Delphi-Quellcode:
Schade ist nur, dass hauseigenen im ShowException von Delphi so Eingies einfach grob fahrlässig vergessen wurde,
// hier bleibt im nächsten E.InnerException die ursprüngliche Exception erhalten
else begin Exception.RaiseOuterException(EClipboardException.Create('Cannot read clipboard after fifty attempts'); aber zumindestens innerhalb des Programms kommt man dennoch an InnerException ran. |
AW: Zwischenablage Zugriff verweigert
Boah-ey...8-)
...ihr findet immer ein Haar in der Suppe. :stupid: :zwinker: Besser so?
Delphi-Quellcode:
:wink:
except
on E: EClipboardException do begin Inc(RetryCount); if RetryCount < 50 then begin Sleep(20) end else begin raise EClipboardException.Create('Cannot read clipboard after fifty attempts.' + sLineBreak + 'Originalmessage: (' + E.Message + ')'); // Exit(''); // Alternativ statt raise end; end else raise; end; |
AW: Zwischenablage Zugriff verweigert
Zitat:
Delphi-Quellcode:
ist überflüssig, da alle nicht durch
else raise
Delphi-Quellcode:
abgefragten Exceptions automatisch durchgeleitet werden 8-)
on
|
AW: Zwischenablage Zugriff verweigert
Zitat:
|
AW: Zwischenablage Zugriff verweigert
Nein, das ist nicht neu, in Delphi 7 ist das Verhalten auch so.
Delphi-Quellcode:
Die übelste Variante ist:
Try
i := 0; k := 1; x := k / i; except on EZeroDivide do begin MessageDLG('Wer teilt denn hier durch 0?',mtError,[mbOk],0); end; on EMathError do begin MessageDLG('Irgendein mathematischer Fehler!' + sLinebreak + e.Message,mtError,[mbOk],0); end; // ... weitere on EIrgendwas-Blöcke // Wenn das vorhanden, landen hier alle übrigen Fehler. on e : Exception // Das macht man nicht ohne sinnvollen Inhalt, weil dann alle (übrigen) Fehler ignoriert werden. end; end; Try i := 0; k := 1; x := k / i; except on EZeroDivide do begin MessageDLG('Wer teilt denn hier durch 0?',mtError,[mbOk],0); end; on EMathError do begin MessageDLG('Irgendein mathematischer Fehler!' + sLinebreak + e.Message,mtError,[mbOk],0); end; // ... weitere on EIrgendwas-Blöcke on e : Exception MessageDLG('Es ist ein (beliebiger) Fehler (außer den davor behandelten) aufgetreten!' + sLinebreak + e.Message,mtError,[mbOk],0); end; end; Try i := 0; k := 1; x := k / i; except on EZeroDivide do begin MessageDLG('Wer teilt denn hier durch 0?',mtError,[mbOk],0); end; on EMathError do begin MessageDLG('Irgendein mathematischer Fehler!' + sLinebreak + e.Message,mtError,[mbOk],0); end; // Alle bis hier nicht "abgearbeiteten Fehler" werden weitergereicht. // Das Programmverhalten ist dann so, als gäbe es keine Fehlernbehandlung. end;
Delphi-Quellcode:
Hier wird einfach alles, was so an Fehlern auftreten kann, schlicht und einfach ignoriert.
try
i := 0; k := 1; x := k / i; except end; |
AW: Zwischenablage Zugriff verweigert
Es ist in der Tat so, dass ein leerer Exception-Block alle Exceptions abfängt. Sobald aber mindestens eine on-Bedingung da steht, werden alle nicht so abgefangenen Exceptions durchgelassen.
|
AW: Zwischenablage Zugriff verweigert
Zitat:
|
AW: Zwischenablage Zugriff verweigert
Ist zwar irgendwie nicht ganz verständlich/konsequent,
aber ein ELSE ohne ON IF gibt es eh nicht. Also mit ON gibt es, falls kein ELSE vorhanden, ein implizites
Delphi-Quellcode:
. :shock:
else raise;
OMG, ein
Delphi-Quellcode:
würde also durch alle Try-Except durchrauchen, welche ein ON ohne ELSE enthalten, was in der RTL/VCL praktisch fast immer so ist,
raise TObject.Create;
mit wenigen Ausnahmen, weswegen aus einem TButton-Click doch nicht die ganze Anwendung komplett verreckt.
Delphi-Quellcode:
procedure TWinControl.MainWndProc(var Message: TMessage);
begin try ... except Application.HandleException(Self); end; |
AW: Zwischenablage Zugriff verweigert
Zitat:
Delphi-Quellcode:
aber vermutlich auch. Aber vielleicht hat ja einer ein
raise EProgrammmerNotFound.Create('Hurz')
Delphi-Quellcode:
da stehen.
on E: TObject do
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz