Also dieser Code ist arg bösartig:
Delphi-Quellcode:
stop := at;
while (aValue[stop+1] in permittedChar) and (stop < length(aValue)) do
begin
Inc (stop)
end;
weil nämlich im Falle von "stop = length(value)" der Zugriff auf "aValue[stop+1]" einen RangeError auslösen sollte (passiert immer dann, wenn eine Mail-Adresse am Ende von aValue steht). Ditto bei der Suche nach dem Anfang der Mail-Adresse. Deswegen soll man ja auch beim Entwicklen und Debuggen diverse Compiler-Flags wie "Bereichsüberprüfung" und "Überlaufprüfung" einschalten.
Besser wäre hier (unter der Annahme, daß "Vollst. Boolesche Auswertung" abgeschaltet ist):
Delphi-Quellcode:
start := at-1;
while (start > 0)
and (aValue[start]
in permittedChar)
do
begin
Dec (start)
end;
{ hier steht start vor dem ersten gültigen Zeichen (kann 0 sein) }
stop := at+1;
while (stop <= length(aValue))
and (aValue[stop]
in permittedChar)
do
begin
Inc (stop)
end;
{ hier steht stop nach dem letzten gültigen Zeichen (kann length() + 1 sein) }
Mytext:= Copy (aValue, start, stop - start - 1);