Hallo,
der Laufzeitfehler wird ausgegeben, weil beim Versuch, einen Stringinhalt in einen Integerwert zu wandeln, der zulässige Wertebereich für Integer (-2147483648..2147483647) verlassen wurde. Du könntest nun alles auf
Cardinal oder
Int64 umstellen und hättest damit einen größeren Wertebereich zur Verfügung. Wenn die Schlüsselnamen nur Ziffernfolgen (ohne führende Nullen) sind, könntest du aber auch bei Strings bleiben und die Methode
TStringList.CustomSort verwenden:
Delphi-Quellcode:
var
Keys : TStringList;
Reg : TRegistry;
begin
...
Reg.GetKeyNames (Keys);
Keys.CustomSort (CompareKeys);
ShowMessage ('Maximum: ' + Keys[0]);
...
end;
Die Funktion
CompareKeys würde dann so aussehen:
Delphi-Quellcode:
function CompareKeys (List: TStringList; Index1, Index2: Integer): Integer;
var
Key1, Key2 : string;
begin
Key1 := List[Index1];
Key2 := List[Index2];
// zunächst nur die Längen vergleichen
Result := Length(Key2) - Length(Key1);
if (Result = 0) then
// bei gleicher Stringlänge zeichenweise vergleichen
Result := CompareStr(Key2, Key1);
end;
Gruß Hawkeye