Wenn bei Key = B aus dem A ein B werden soll, so ist die Differenz = 1.
Ord('A') = 65
Ord('B') = 66
Ord('B') - Ord('A') = 1
Du musst also die Differenz zwischen Ord(Key) und Ord('A') berechnen und zu Ord(text[i]) addieren, also nicht Ord(text[i]) + Key sondern Ord(text[i]) + Ord(key) - Ord('A').
Und natürlich wird Z + Ord(Key) immer ein Zeichen "hinter" den Großbuchstaben ergeben.
Wenn also aus Z + Key -> A werden soll, also ein Buchstabe, dessen Ord < Ord('Z') ist, dann musst Du Dir überlegen, welchen Wert Du dann abziehen musst, um von Ord('Z') -> 90 plus Ord(Key) auf Ord('A') -> 65 zu kommen.
Delphi-Quellcode:
function TCaeser.GetText : string;
var
i : integer;
begin
Result := text;
for i := 1 to Length(Result) do begin
Result[i] := Chr(Ord(Result[i]) + (Ord(Key) - Ord('A')));
if Ord(Result[i]) > Ord('Z') then Result[i] := Chr(Ord(Result[i] - (Ord('Z') - Ord('A')));
end;
end;
PS: Das ist jetzt nur hingedaddelt, keine Ahnung ob's auch korrekt ist.