Irgendie hast du das mit dem
try .. finally
wohl noch nicht verstanden
Delphi-Quellcode:
MyObject := TMyObject.Create;
// Instanz erzeugen
try // Hier beginnt der Schutzblock
MyObject.DoSomeThing;
// Beliebig viele Sachen durchführen
// und egal was hier drinnen passiert (z.B. eine Exception)
finally // wird das hier ausgeführt
MyObject.Free;
// Instanz aus dem Speicher entfernen
end;
Dein Konstrukt
Delphi-Quellcode:
function Speichern_mit_Dialog : boolean;
var Speicher_Pfad : string;
Ordner_Pfad : string;
Datei_Name : string;
begin
try
...
finally
Result := True;
end;
...
end;
ist völlig unsinnig ... auch wenn ein Fehler auftritt, dann soll der Rückgabewert True sein?
Ok, dann reicht das völlig aus (fragt sich nur wozu dann eine Funktion
Delphi-Quellcode:
function Speichern_mit_Dialog : boolean;
var Speicher_Pfad : string;
Ordner_Pfad : string;
Datei_Name : string;
begin
// Kein try mehr
Result := True; // Result setzen ...
// Hier jetzt dein Rest-Code
Programm.SpeicherDialog.InitialDir := Dokumente_Pfad;
if Programm.SpeicherDialog.Execute = True then
begin
Datei_Name := ExtractFileName(Programm.SpeicherDialog.FileName);
Ordner_Pfad := Dokumente_Pfad+'\'+ChangeFileExt(Datei_Name,'');
if not DirectoryExists(Ordner_Pfad) then
ForceDirectories(Ordner_Pfad);
Speicher_Pfad := Ordner_Pfad+'\'+Datei_Name;
AktuellerDateiName := Speicher_Pfad;
{***Speichern***}
if Speichern(Speicher_Pfad) = True then //Das eigentlich speichern ist unwichtig, es verursacht den Fehler nicht (getestet)
ShowMessage('Speichern erfolgreich.')
else
ShowMessage('Speichern abgebrochen.');
end;
end;
Und GAAAAANZ wichtig so bitte nie niemals nicht
Delphi-Quellcode:
if Programm.SpeicherDialog.Execute = True then
if Speichern(Speicher_Pfad) = True then
Das reicht aus und funktioniert immer
Delphi-Quellcode:
if Programm.SpeicherDialog.Execute then
if Speichern(Speicher_Pfad) then
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)