Und warum hier ein try...except-Block (keine Kritik sondern ich möchte es verstehen
)???
Naja, habe hat keine Ahnung wie komplex Dein konkretes Problem ist, daher mal prophylaktisch mit eingebaut.
Try Except gibt es bei mir immer, wenn ich nicht absolut ausschließen kann, dass irgendwas passiert, womit ich nicht rechne.
Try finally immer, wenn es sonst passieren könnte, dass irgendwas nicht freigegeben wird.
Ok: Konkret mehr als True bzw. False.
Funktion bekommt noch 'nen weiteren var-Parameter, in den Du die Fehlermeldung schreibst. Ist der Rückgabewert false, muss der Programmierer, der die Funktion nutzt, diesen auswerten und entsprechend reagieren.
Oder wie hoika schreibt: Eigene
Exception definieren.
Ohne Garantie für irgendwas (nur hingedaddelt):
Delphi-Quellcode:
type
EUserIDKleiner0 =
class(
Exception);
EUserIDExistiertNicht =
class(
Exception);
EUserIDNichtOnline =
class(
Exception);
EUserIDSonstigerFehler =
class(
Exception);
...
function SendText(
const UserID : Integer; Text:
String) : Boolean;
begin
Result := false;
if UserID < 0
then begin
raise EUserIDKleiner0.CreateFmt('
Die Userid %d ist kleiner als 0.',[UserID]);
end else
if not UserIDExists(UserID)
then begin
raise EUserIDExistiertNicht.CreateFmt('
Die UserID %d existiert nicht.',[UserID]);
end else
if not UserIDIstOnline(UserID)
then begin
EUserIDNichtOnline.CreateFmt('
User mit UserID %d ist nicht online.',[UserID]);
end else begin
try
// Machen, was zu tun ist ...
Result := True;
except
on e :
Exception do begin
// und weitere Fehlerbehandlung.
// ggfls. Raise ...
Raise EUserIDSonstigerFehler.CreateFmt('
%s zu UserID %d',[e.
Message,UserID]);
end;
end;
end;
...
// irgendwelcher Quelltext, der die Funktion nutzt.
begin
try
if SendText(47, '
Text')
then begin
// Erfolgsmeldung ...
end else begin
// Fehler, der nicht explizit in der Funktion behandelt wurde...
end;
except
on e : EUserIDKleiner0
do begin
// Einfachstes
MessageDlg(e.
Message,mtError,[mbOk],0);
// Oder beliebige andere Fehlerbehandlung.
end;
on e : EUserIDExistiertNicht
do begin
...
end;
on e : EUserIDNichtOnline
do begin
...
end;
on e : EUserIDSonstigerFehler
do begin
...
end;
on e :
Exception do begin
MessageDlg(e.
Message,mtError,[mbOk],0);
end;
end;
end;