Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi try...except probleme (https://www.delphipraxis.net/12287-try-except-probleme.html)

meximum 24. Nov 2003 17:19


try...except probleme
 
Hi zusammen!

Aus unerklärlichen (oder doch erklärlichen) Gründen funktioniert diese Funktion nicht...:

Delphi-Quellcode:
   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;
gibt gleich einen absturz wenn das vorhandene bild nicht gefunden wurde, sollte jedoch abgefangen
werden...heeelp

MfG

Mexx

[edit=sakura] [delphi]-Tags gesetzt. Mfg, sakura[/edit]

HAF4ever 24. Nov 2003 17:23

Re: try...except probleme
 
Zitat:

Zitat von meximum
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;

am ersten blick stört mich der ;
mach ihn mal weg, und probiers noch mal

Luckie 24. Nov 2003 17:28

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.

devnull 24. Nov 2003 19:46

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

Luckie 24. Nov 2003 19:48

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.

meximum 25. Nov 2003 11:42

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]

Tom 25. Nov 2003 11:46

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.

Tyrael Y. 25. Nov 2003 11:48

Re: try...except probleme
 
dann mach es doch wie es devnull beschrieben hat

Treffnix 25. Nov 2003 11:50

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;

choose 25. Nov 2003 12:06

Re: try...except probleme
 
Zitat:

Zitat von Treffnix
Warum try.. except?

Hallo Treffnix,

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:
try
  if NotwendigeBedingung(AParam) then
    FuehreAus(AParam)
  else
    ZeigeFehler(FooConst, AParam);
except
  on E: Exception do
    ZeigeFehler(BarConst, AParam, E);
end;
@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).
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 dieser Thread oder der Artikel Brian Goetz, Exceptional practices, Part 1-3 weiter...


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:54 Uhr.
Seite 1 von 2  1 2      

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