Hallo,
wie Hoika schon erklärte, die Compiler-Meldung ist völlig korrekt.
Also... Du möchtest erreichen, dass Deine Funktion
nur dann True zurück liefert, wenn keine
Exception aufgetreten ist. Das ist genau das, was immer geschieht, denn so funktioniert nun mal das
Exception-Konzept. Wenn eine
Exception in Deiner Funktion auftritt, dann liefert diese Funktion
gar nichts zurück, denn die Funktion wird (nach Abarbeitung eines eventuell vorhandenen finally-Blockes) direkt verlassen, genauso wie der aufrufende Kontext. Wird die
Exception nicht irgendwo auf dem Weg "nach oben" abgefangen, wird sie schließlich von der Application als Meldung angezeigt. Das alles kann man aber auch in der Delphi-Hilfe nachlesen^^
Korrekt wäre Dein Funktionsgerüst also so:
Delphi-Quellcode:
function TMainDlg.TestFunktion: Boolean;
begin
try
//Hier steht Code, der eine Exception auslösen könnte. Dadurch wird das Result ganz unten am Ende der Funktion nur zugewiesen, wenn es keine Exception gibt.
except
//...
end;
Result := True;
end;
Wenn Du jedoch eine eigene
Exception-Behandlung in Deine Funktion einbaust und keine
Exception oder nur bestimmte Exceptions nicht "raus lässt", dann sähe das Ganze wie folgt aus:
Delphi-Quellcode:
function TMainDlg.TestFunktion: Boolean;
var
bOK: Boolean;
begin
bOK := True;
try
//...
except
on e:
Exception do
begin
bOK := False;
//... z.B. eigene Meldung anzeigen, Log schreiben, etc. ...
end;
end;
Result := bOK;
end;
Und bitte nicht daran stören, dass ich im obigen Beispiel
alle Exceptions abfange (on e:
Exception) und nicht nur bestimmte - das soll ja nur ein Beispiel sein und das Prinzip verdeutlichen und daher möglichst einfach bleiben
Noch ein Hinweis am Rande:
Viele halten es für einen guten Stil (dazu gehöre ich selbst auch), Result grundsätzlich nur am Ende einer Funktion zuzuweisen, also als allerletztes Statement einer Funktion - und nicht mittendrin und vielleicht sogar noch an mehreren Stellen.
LG