type
TDtausOnError =
procedure (Sender: TObject; ACode: TErrorCode;
const AMsg:
string)
of Object;
TDtausOnNotify =
procedure (Sender: TObject; ACode: TErrorCode;
const AMsg:
string;
var AExcept: Boolean)
of Object;
TDtausDataType =
class()
private
FOnError: TDtausOnError;
FOnNotify: TDtausOnNotify;
protected
procedure DoOnError(ACode: TErrorCode;
const AMsg:
string);
virtual;
procedure DoOnNotify(ACode: TErrorCode;
const AMsg:
string; AExcept: Boolean = False);
virtual;
public
property OnError: TDtausOnError
read FOnError
write FOnError;
property OnNotify: TDtausOnNotify
read FOnNotify
write FOnNotify;
end;
procedure TDtausDataType.DoOnError(ACode: TErrorCode; AMsg:
string);
begin
if Assigned(FOnError)
then
FOnError(Self, ACode, AMsg);
raise TDtausExcetpion.Create(ACode, AMsg);
end;
procedure TDtausDataType.DoOnNotify(ACode: TErrorCode; AMsg:
string; AExcept: Boolean = False);
begin
if Assigned(FOnNotify)
then
FOnNotify(Self, ACode, AMsg, AExcept);
if AExcept
then
raise TDtausExcetpion.Create(ACode, AMsg);
end;
procedure TDtausDataType.SetValue(v:
String);
var i: Integer;
begin
// convert to upper case
fValue := UpperCase(v);
// lower case characters detected
if StrComp(PAnsiChar(v), PAnsiChar(fValue)) <> 0
then
DoOnNotify(1, '
Klein- zu Großbuchstaben konvertiert!');
// check each character
for i:=1
to Length(v)
do
begin
{ Hier folgt eine weitere Überprüfung jedes einzelnen Zeichens,
ob es im "DTAUS-Zeichensatz" erlaubt ist.
Nicht erlaubte Zeichen sollen dabei mit Leerzeichen ersetzt werden.
Bei bestimmten Daten (wie z. B. Kontonummer) ist das ein Fehler,
bei anderen (wie z. B. Verwendungszweck) lediglich eine Warnung.
}
{immer Exception auslösen}
DoOnError(2, '
Ungültige Zeichen im Feld xxx');
{oder normalerweise Exception auslösen, es sei den die Anwendung sagt das ist ok}
DoOnNotify(3, '
Ungültige Zeichen im Feld yyy', True);
{oder normalerweise keine Exception auslösen, es sei den die Anwendung sagt das ist nicht ok}
DoOnNotify(4, '
Ungültige Zeichen im Feld zzz', False);
end;
end;