Einzelnen Beitrag anzeigen

kaschte

Registriert seit: 2. Apr 2006
72 Beiträge
 
#23

Re: Höchster Wert aus Registry

  Alt 17. Jun 2007, 16:57
Zitat von Hawkeye219:
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
Also bei mir gehts mit dem Code, bei meinem Bruder der mehrere Einträge hat (ich habe nur 0 und 42********) nimmt es nur das zweitgrösste!
  Mit Zitat antworten Zitat