Hallo,
solange du deinen Code noch beschleunigen kannst, solltest du nicht an einen Ladebalken denken.
Delphi-Quellcode:
function Encode(const s, key1a, ..., key3b: string): string;
var
buf: string;
begin
buf := StringReplace(s, 'a','th%6' , [rfReplaceAll]);
buf := StringReplace(buf, 'b','g' + key3b + 'fhu' , [rfReplaceAll]);
// ...
buf := StringReplace(buf, '9','H$' + key1b + ')' , [rfReplaceAll]);
Result := StringReplace(buf, '0','H$' + key1b + '=' , [rfReplaceAll]);
end;
So hast du deine Prozedur zur Funktion umgebaut. Da jetzt nicht mehr 126 mal auf die Texteigenschaft des Memos zugegriffen wird, wird der Code sicher etwas schneller ausgeführt. Noch schneller wird der Code, wenn du nicht mehr mit StringReplace() arbeitest, da mit dieser Funktion jedesmal wieder der gesamte Text abgesucht wird. Wenn du nur einmal über deinen Text gehst, wird alles noch schneller.
Delphi-Quellcode:
function Encode(const s, key1a, ..., key3b: string): string;
var
i: Integer;
buf: string;
begin
buf := '';
for i := 1 to Length(s) do
case s[i] of
'a': buf := buf + 'th%6';
'A': buf := buf + 'g' + key3b + 'fhu';
// ...
'9': buf := buf + 'H$' + key1b + ')';
'0': buf := buf + 'H$' + key1b + '=';
else buf := buf + s[i];
end;
Result := buf;
end;
Wenn du dann als nächsten Schritt noch die zu erwartende Größe des Ergebnisses berechnest, dann entfällt auch noch das aufwändige schrittweise Vergrößern von buf und alles wird noch einmal deutlich schneller.
Bevor du dann daran gehst einen Fortschrittsbalken anzuzeigen, musst du erstmal den zu erwartenden Zeitbedarf ausrechnen.
Freundliche Grüße vom marabu