![]() |
try .. except ... oder finally?
hallo,
ich habe ein kleines spiel, bei dem ich die levels in eine verkette liste lese und die spielsteine immer über img_zelle:= TBitmap.Create; img_zelle.LoadFromFile(CStein); ... img_zelle.free; gesetzt und befreit werden. Die Bilder werden dabei aus einem Ordner geladen. Das Problem ist aber nun, wenn die Bilder nicht mehr vorhanden sinn. Dies kann ja sowohl am Start des Spiels passieren, also auch, wenn während das Spiel läuft einer auf die Idee kommt, die Bilder aus dem Ordner zu löschen oder umzubennen. Also muss ich da wohl ein try...except reinsetzen um das Programm dann zu beenden. Im Tutorial von ![]() oder muss ich dann in meinem beispiel das free des bildes und der liste zweimal ausführen
Delphi-Quellcode:
try
img_zelle:= TBitmap.Create; img_zelle.LoadFromFile(CStein3); ... except img_zelle.free; // Befreit den Speicherplatz der verketeten Liste destroyList; showMessage('Bild wurde nicht gefunden'); close; end; img_zelle.free; |
Re: try .. except ... oder finally?
Warum benutzt du nicht einfach
![]() Es können aber natürlich noch andere Exceptions auftreten, die würde ich so abfangen:
Delphi-Quellcode:
Bit := TBitmap.Create;
try try Bit.LoadFromFile(...); finally Bit.Free; end; except ShowMessage(...); Close; end; |
Re: try .. except ... oder finally?
Zitat:
Delphi-Quellcode:
So sollte es gehen. Ein ähnliches Beispiel ist, wenn ich mich jetzt nicht irre, auch in der Delphi Hilfe drin.
try
try img_zelle:= TBitmap.Create; img_zelle.LoadFromFile(CStein3); ... except end; finally img_zelle.free; // Befreit den Speicherplatz der verketeten Liste destroyList; showMessage('Bild wurde nicht gefunden'); close; end; |
Re: try .. except ... oder finally?
Ich glaube nicht, dass es so herum funktioniert :wink: .
|
Re: try .. except ... oder finally?
Hi.
@ltiefland: Öhm... :gruebel: Ist das nicht das Selbe, wie:
Delphi-Quellcode:
Der Fehler wird imho doch bei deinem Code durch das Except schon abgefangen, also ist das umschließende try...finally noch nutzlos... Oder?
try
HierKannVielSchiefGehen(x, y, z, 0, 0, 0); // x / 0, y / 0, z / 0 ;-) except ShowMessage('Ich hab''s gewusst...'); end; Hausmeister.BesenHolen; // Speicherbereinigung Hausmeister.ResteAuffegen; // Speicherbereinigung |
Re: try .. except ... oder finally?
Sinnlos in der Hinsicht, als dass das Programm auf jeden Fall geschlossen wird :wink: .
[OT]
Delphi-Quellcode:
Seit wann hat Delphi einen Garbage Collector :mrgreen: ?
Hausmeister.BesenHolen; // Speicherbereinigung
Hausmeister.ResteAuffegen; // Speicherbereinigung [/OT] |
Re: try .. except ... oder finally?
[ot]Irgendwie wundert es mich hier kaum noch, dass pro Tag huntert verschiedene Themen aufgemacht werden und viele davon auch noch doppelt ... Jeder sagt was, aber keine hat von dem, was er sagt, Ahnung ... Die angesprochenen bitte demnächst erst denken und ansonsten Klappe halten; TIA.[/ot]
Aber gut, zum Thema: Wenn der Konstruktor oder eine Operation mit einem Objekt fehlschlagen kann, so sieht die richtige Verfahrensweise so aus:
Delphi-Quellcode:
HTH.
try
Image := TBitmap.Create; try Image.LoadFromFile(GehtSchief); //Bild weiterverarbeiten finally FreeAndNil(Image); end; except ShowMessage('Fehler aufgetreten; interessiert aber eh keinen!'); end; MfG, BenBE. P.S.: Diese Informationen hätten auch in der DOH gestanden; man hätte sich nur mal den Object Pascal Reference Part durchlesen müssen ... Anm.: Ich weiß, dass man sich durch solche Posts nicht beliebter macht, aber in diesem Thread war die Unwissenheit, Postcount-Hochtreiberei und ungetester Source in höchster Konzentration vertreten. :twisted: |
Re: try .. except ... oder finally?
[ot]und ständiges rumsülzen und weitere sinnlose code posts helfen da auch nich weiter[/ot]
ltiefland hat bereits die richtige lösung angeboten...... im zweifel einfach mal probiern, anstelle gleich wieder zu nerfen "määäh, es geht nich" |
Re: try .. except ... oder finally?
Zitat:
Delphi-Quellcode:
ist etwas anderes als
try
try ... except ... end; finally ... end;
Delphi-Quellcode:
Nur Variante 2 ist richtig. Denn ein except-Block wird nur im Fall einer Exception ausgeführt UND löst die Exception auf, während ein finally-Block unabhängig von einer Exception ausgeführt wird (d. h. immer), eine geworfene Exception selbst wird aber nicht behandelt und entsprechend auch nicht aufgelöst.
try
try ... finally ... end; except ... end; IMHO wäre es eine sinnvolle Erweiterung der Delphi-Sprache, wenn auch sowas zulässig wäre:
Delphi-Quellcode:
Leider ist das - zumindest derzeit - nicht vorgesehen.
try
... finally ... except ... end |
Re: try .. except ... oder finally?
Hallo zusammen,
heiße Diskussion hier... :firejump: Zitat:
Zitat:
Die IMHO bessere Lösung wäre aber diese (falls im except-Block die Prozedur nicht abgebrochen wird):
Delphi-Quellcode:
Gruß, Marco
Image := TBitmap.Create;
try Image.LoadFromFile(GehtSchief); //Bild weiterverarbeiten except ShowMessage('Fehler aufgetreten; interessiert aber eh keinen!'); end; FreeAndNil(Image); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 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-2025 by Thomas Breitkreuz