![]() |
try...except probleme
Hi zusammen!
Aus unerklärlichen (oder doch erklärlichen) Gründen funktioniert diese Funktion nicht...:
Delphi-Quellcode:
gibt gleich einen absturz wenn das vorhandene bild nicht gefunden wurde, sollte jedoch abgefangen
try
// Aus unerklärlichen Gründen funktioniert diese Funktion nicht!!!! ImgBild.Picture.LoadFromFile(s); except if not FileExists(s) then begin if PCArtikelRegister.ActivePage = TShBild then begin //'Das gespeicherte Bild %s kann nicht gefunden werden!' MessageDlg(Format(BildAnzeigen_Str01,[s]),mtError,[mbOK],0); end; end; end; werden...heeelp MfG Mexx [edit=sakura] [delphi]-Tags gesetzt. Mfg, sakura[/edit] |
Re: try...except probleme
Zitat:
mach ihn mal weg, und probiers noch mal |
Re: try...except probleme
Öhm. Nur mal so über die Logik deiner Funktion nach gedacht. Deine Routine funktioniert so, um es mal in Worten auszudrücken.
1. Lade Bild sowieso. 2. wenn es schief geht überprüfe, ob es vorhanden ist. :!: 3. ist es nicht vorhanden gib Mesasagebox aus. Punkt 2 ist der Punkt der etwas irrsinnig ist in deinem Code. Wie wäre es vor dem Laden des Bildes zu kucken, ob die Datei existiert ode rnicht und dann von dem Ergebnis alles weitere abhängig zu machen? :roll: 1. Prüfe, ob Datei vorhanden ist. 2a. Datei vorhandem: lade Bild. 2b. Datei nicht vorhanden, gib Message aus. |
Re: try...except probleme
Geht doch aber auch mit try ... except ?!
Delphi-Quellcode:
try
ImgBild.Picture.LoadFromFile(s); except on Exception do begin ShowMessage ('Fehler'); exit; end; end; :corky: devnull |
Re: try...except probleme
Aber wozu? Jeder try-except Block verursacht unmengen an CPU Taktzyklen zum dem muss vom User-Mode in den Kernel-Mode geschaltet werden, was auch noch mal kostet.
|
Re: try...except probleme
Der Ansatz das File zuerst zu auf Existenz zu prüfen und anschliessend zu laden
macht einiges mehr sinn. Trotzdem habe ich das problem, dass die exception einfach ignoriert wird, trotz des fehlenden bildes.
Delphi-Quellcode:
try
if FileExists(s) then ImgBild.Picture.LoadFromFile(s); except begin if PCArtikelRegister.ActivePage = TShBild then begin //'Das gespeicherte Bild %s kann nicht gefunden werden!' MessageDlg(Format(BildAnzeigen_Str01,[s]),mtError,[mbOK],0); end; end; end; Gruss meximum [edit=sakura] [delphi]-Tags gesetzt. Mfg, sakura[/edit] |
Re: try...except probleme
FileExists löst doch gar keine Exception aus. Die Funktion gibt nur True/False zurück. Nicht mehr und nicht weniger.
|
Re: try...except probleme
dann mach es doch wie es devnull beschrieben hat
|
Re: try...except probleme
Warum try.. except? Ersetz in der letzten Prozedur einfach Except durch Else und lass das Try weg und gut is...
Also so:
Delphi-Quellcode:
if FileExists(s) then
ImgBild.Picture.LoadFromFile(s) Else begin if PCArtikelRegister.ActivePage = TShBild then MessageDlg(Format(BildAnzeigen_Str01,[s]),mtError,[mbOK],0); end; |
Re: try...except probleme
Zitat:
auch wenn eine Datei mit bekanntem Dateinamen existiert, kann beim Laden ein Fehler auftreten (unbekanntes Format/Endung, fehlerhafte Datei, IO-Fehler, etc). @meximum: Lagere Deine Ausgaberoutine aus und verwende sie zur Darstellung des überprüfbaren Fehlerquelle und zur Ausgabe eines unerwarteten Fehlers etwa in dieser Art
Delphi-Quellcode:
@devnull, Tyrael: Exceptions sind sicher kein Performance-Problem bei Dialogorientierten abläufen und tatsächlich wird mit der vorherigen Prüfung "doppelt getestet" (andernfalls könnte ja keine Exception geworfen werden).
try
if NotwendigeBedingung(AParam) then FuehreAus(AParam) else ZeigeFehler(FooConst, AParam); except on E: Exception do ZeigeFehler(BarConst, AParam, E); end; Dieser Stil allerdings macht die Intention des Programmierers undeutlich. Denke bspw an das Lösen einer Wurzel im Reelen: Eine Fallunterscheidung macht deutlich, was gemeint ist, eine Exception verwirrt. Bei ungleich komplexeren Problemen ist der Code eines Fremden nicht mehr zu verstehen, weil Fehlerquelle und -behandlung zu weit voneinander entfernt sind... Vielleicht hilft auch ![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:54 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