Einzelnen Beitrag anzeigen

Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#54

Re: [Kompo] TWindowsVersionsInfo - Kompo zur Windowserkennun

  Alt 15. Jun 2009, 18:41
Zitat von MagicAndre1981:
danke für deine Anregungen, ich schau mir das mal an.
Ich hab mir das auch noch mal angeschaut.

Du verwendest den cruStrSplitter ja nur um aus String wie '123.456.789.0' die Zahl 456 zu bekommen.
Das geht auch mit Copy und Pos(Ex).
  • Pos bestimmt die Position eines SubStr in einem Str.
    Mit i := Pos('.', BuildLabEx); steht in i die Stelle an der der 1. Punkt steht. Bei 123.456.78... ist das 4
    PosEx bestimmt die Position eines SubStr in einem Str ab der x. Stelle (Offset).
    Mit PosEx('.', BuildLabEx, i) bestimmst Du also wie weit der 2. Punkt nach dem 1. steht.
    Bei 123.456.78 mit Offset 4 ist das 4
    Copy(s,x,y) gibt Dir einen SubStr ab der x. Stelle mit der Länge y zurück.

    Copy(BuildLabEx, i+1, PosEx('.', BuildLabEx, i)-1);
    -> i+1 ist das 1. Zeichen nach dem 1. Punkt
    -> PosEx('.', BuildLabEx, i)-1 ist die Länge des SubStr bis zum 2. Punkt. (-1 da der Punkt ja nicht im SubStr enthalten sein soll)
    -> Gibt also '456' zurück

    Glücklicherweise gibt Pos und PosEx eine 0 zurück wenn nichts gefunden wird.
    -> Copy(s, 1, -1) gibt dann einen Leerstring zurück ''
Delphi-Quellcode:
...
    // Vorschlag ohne StrSplitter Objekt
    function GetRevisionFromBuildLabEx: DWORD;
    var
      s: string;
      i: Integer;
      E: Integer;
    begin
      i := Pos('.', BuildLabEx);
      s := Copy(BuildLabEx, i+1, PosEx('.', BuildLabEx, i)-1); // PosEx ist in Unit StrUtils
      Val(s, Result, E);
      if E <> 0 then Result := MAXDWORD;
    end;
...
Damit kannst Du dann ganz auf dieses Objekt verzichten und bist wieder nonVCL.
Es dürfte auch etwas schneller sein als das Splitter Objekt.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat