Delphi-PRAXiS

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

Klaus D. 28. Feb 2004 15:26


try,except,finally
 
Ich schreibe in eine INI-Datei auf folgende weise.
Delphi-Quellcode:
try
 frmMain.V_Ini:=TiniFile.Create(frmMain.V_Pfad+'\Einstellungen.ini');
 frmMain.V_Ini.WriteInteger('Suchoptionen','ItemIndex',frmEinstellungen.Suchoptionen.ItemIndex);

 frmMain.V_Ini.Free;
 btnOK.Enabled:=false;
except begin
 ShowMessage('Es ist ein Fehler aufgetreten'+#13+'Starten sie das Programm neu und versuchen sie es erneut');
 frmMain.V_Ini.Free;
 btnOK.Enabled:=false;

end;
 end;
  end;
aber ich muß doch die INI auf jeden fall wieder freigeben. Ist es da besser noch mit finally zu arbeiten?
MfG Klaus

[edit=r_kerber]Delphi-Tags eingefügt Mfg, r_kerber[/edit]

Luckie 28. Feb 2004 15:31

Re: try,except,finally
 
Puh. Schon mal was von Quellcodeformatierung gehört? ;) Also wann wie einrücken und neue Zeile usw.?

Ressourcenschutzblöcke werden generell mit try-finally gemacht.
Delphi-Quellcode:
sl := xcy.Create;
try
  // mach was mit sl
finally
  FreeAndNil(sl);
end;

Christian Seehase 28. Feb 2004 15:32

Re: try,except,finally
 
Moin Klaus,

die Struktur sollte im Allgemeinen so aussehen:

Delphi-Quellcode:
Resource belegen (in Deinem Falle Objekt erzeugen)
try
  mit der Resource arbeiten
finally
  Resource freigeben
end;
Erst nachdem eine Resource belegt ist wird try verwendet, da vorher ja noch nichts passiert ist.
In Deinem speziellen Fall kannst Du auf den try/except Block verzichten, da WriteInteger keine Exception auslöst.

(BTW: Bei der Meldung die Du generierst, wäre eine vom System vielleicht aussagekräftiger ;-) )

dizzy 29. Feb 2004 02:35

Re: try,except,finally
 
Kann man nicht auch alle 3 benutzen? Also:
Delphi-Quellcode:
aha := TStringList.Create;
try
  aha.Add('soso');
except
  ShowMessage('ging nicht!');
finally
  aha.Free;
end;

Basilikum 29. Feb 2004 02:43

Re: try,except,finally
 
Zitat:

Zitat von dizzy
Kann man nicht auch alle 3 benutzen? Also:

neee.... entweder except oder finally.... beides zusammen macht eh keinen Sinn...

Robert_G 29. Feb 2004 03:00

Re: try,except,finally
 
Und im EXCEPT Block werden Objekte IMHO nicht wirklich freigegeben.

Leuselator 29. Feb 2004 03:28

Re: try,except,finally
 
@dizzy: Wenn Du Gürtel UND Hosenträger benutzen möchtest, kannst Du try/exept bzw.try/finally schachteln:
Code:
[b]begin[/b]
  Objektvariable [b]:=[/b] TObject.Create;
[color=red] [b]try[/b] [/color]
[color=seagreen]   [b]try[/b]
      ObjectVariable.DoSomething;
    [b]except[/b]
      MessageDlg([/color][color=darkblue]'Fehlermeldung'[/color][color=seagreen], mtError, [mbOK], 0);
    [b]end[/b]; [/color]
[color=red] [b]finally[/b]
    FreeAndNil(Objektvariable);
  [b]end[/b];[/color]
[b]end[/b];
Grün: innerer Try-/Except-Block (Gürtel)
Rot : äusserer Try-/Finally-Block (Hosenträger) :-)
Gruß

Luckie 29. Feb 2004 04:37

Re: try,except,finally
 
Zitat:

Zitat von Robert_G
Und im EXCEPT Block werden Objekte IMHO nicht wirklich freigegeben.

Doch, aber nur wenn es vorher kracht und eine Exeception ausgelöst wird. ;)

Synonym 29. Feb 2004 09:44

Re: try,except,finally
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von Robert_G
Und im EXCEPT Block werden Objekte IMHO nicht wirklich freigegeben.

Doch, aber nur wenn es vorher kracht und eine Exeception ausgelöst wird. ;)

Deswegen hat er ja auch wahrscheinlich "nicht wirklich" hingeschrieben!

synonym

Pseudemys Nelsoni 29. Feb 2004 11:08

Re: try,except,finally
 
ausserdem brauchst du nach except/finally nicht extra ein "begin..end" für mehrere befehle...

dizzy 29. Feb 2004 18:02

Re: try,except,finally
 
@Leuselator: Jupp, Gürtel + Hosenträger ist immer gut! Schöner Vergleich, und danke für Richtigstellung (auch an das Kraut ;) ) und Workaround.


gruss,
dizzy


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz