Einzelnen Beitrag anzeigen

Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#22

Re: Höchster Wert aus Registry

  Alt 17. Jun 2007, 16:02
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 Delphi-Referenz durchsuchenTStringList.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
  Mit Zitat antworten Zitat