Delphi-PRAXiS
Seite 6 von 6   « Erste     456   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   [Kompo] TWindowsVersionsInfo - Kompo zur Windowserkennung (https://www.delphipraxis.net/97999-%5Bkompo%5D-twindowsversionsinfo-kompo-zur-windowserkennung.html)

pertzschc 26. Feb 2009 11:05

Re: [Kompo] TWindowsVersionsInfo - Kompo zur Windowserkennun
 
Zitat:

Zitat von MagicAndre1981
schalte in der IDE die Option "Bei Delphi Exceptions stoppen" ab.

Das würde ich gerne vermeiden.

Hier ein Vorschlag, wenn es keinerlei Betaversionen/Builds auf dem Rechner ist:

Delphi-Quellcode:
    function GetRevisionFromBuildLabEx(): DWORD;
    var
      sp : TStrSplitter;
    begin
      // begin changed by Christoph
      if (BuildLabEx = '') then begin
        Result := MAXDWORD;
        Exit;
      end;
      // end changed by Christoph
      sp := TStrSplitter.Create;
      try
        try
          sp.Execute(BuildLabEx,'.');
          Result := StrToInt( sp[1] );
        except on E: EConvertError do
          Result := MAXDWORD;
        end;
      finally
        FreeAndNil(sp);
      end;
    end;
Gruß,
Christoph

MaBuSE 15. Jun 2009 10:33

Re: [Kompo] TWindowsVersionsInfo - Kompo zur Windowserkennun
 
Zitat:

Zitat von MagicAndre1981
TWindowsVersionsInfo - Kompo zur Windowserkennung
Da mehrfach danach gefragt wurde hab ich mal die Windowserkennng in eine Klasse gepackt, die per Direktive auch als VLC-Kompo auf die Form geklatscht werden kann.

Hallo,
Die TWindowsVersionsInfo finde ich gut. Ich habe sie in einem kleinen Testprogramm benötigt.

Bei der Benutzung sind mir aber ein paar Kleinigkeiten aufgefallen:
  • Ich finde es immer besser einen Fehler zu vermeiden als auf ihn reagieren zu müssen.
    Wenn Du einen EConvertError erwartest weil sp[1] = '', warum prüfst Du denn nicht vorher auf einen korrekten Wert?
    Besser noch Du schaust Dir an wie IntToStr funktioniert und verwendest Val.

    Ich hätte es wahrscheinlich ja gar nicht bemerkt, aber der Delphi Debugger bleibt natürlich immer bei einer Exception stehen. ( -> sehr nervig und unnötig)

    Delphi-Quellcode:
    ...
    // Deine Funktion
    function GetRevisionFromBuildLabEx(): DWORD;
    var
      sp : TStrSplitter;
    begin
      sp := TStrSplitter.Create;
      try
        try
          sp.Execute(BuildLabEx,'.');
          Result := StrToInt( sp[1] );
        except on E: EConvertError do
          Result := MAXDWORD;
        end;
      finally
        FreeAndNil(sp);
      end;
    end;
    ...

    // Mein Vorschlag
    function GetRevisionFromBuildLabEx(): DWORD;
    var
      sp : TStrSplitter;
      E: Integer;
    begin
      sp := TStrSplitter.Create;
      try
        sp.Execute(BuildLabEx,'.');
        Val(sp[1], Result, E);
        if E <> 0 then Result := MAXDWORD;
      finally
        FreeAndNil(sp);
      end;
    end;
    ...
    [edit]
    Ups, ich sehe gerade, dass dieses Problem schon jemand anderes gepostet hat. (Ich hätte nicht nur den 1. Beitrag lesen sollen). Trotzdem ist mein Vortschlag besser als das if str = '' then ...
    [/edit]


    nonVCL
    Du bietest die Option an mit dem Schalter {.$define USE_VCL} nur ein TObjekt statt einer Komponente zu benutzen.
    Die Idee ist super, Du benötigst dann kein Classes und kein Controls und bist damit quasi nonVCL.
    Delphi-Quellcode:
    uses
      SysUtils,
    {$IFDEF USE_VCL}
      Classes, Controls,
    {$ENDIF}
      Windows ;
    Aber Du bist nicht konsequent. Du verwendest die Unit cruStrSplitter, die natürlich Classes einbindet.
    Damit hast Du dann wieder die ganze VCL eingebunden. :stupid:

    Lösungsvorschlag:
    Nenne Deinen Kompilerschalter einfach um in USE_TCOMPONENT.
    Dann kann sich niemand beschweren.

    oder besser:
    Überarbeite die cruStrSplitter, das diese auch nonVCL wird. Die kleinen *.exe Dateien werden es Dir danken ;-)

Ich hoffe diese Infos helfen Dir dein Projekt noch besser zu machen.

MagicAndre1981 15. Jun 2009 12:23

Re: [Kompo] TWindowsVersionsInfo - Kompo zur Windowserkennun
 
danke für deine Anregungen, ich schau mir das mal an.

MaBuSE 15. Jun 2009 17:41

Re: [Kompo] TWindowsVersionsInfo - Kompo zur Windowserkennun
 
Zitat:

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.

MagicAndre1981 15. Jun 2009 21:18

Re: [Kompo] TWindowsVersionsInfo - Kompo zur Windowserkennun
 
danke, das bau ich dann ein :thumb:

dann kommt noch die Windows 7 / Vista Sp2 / Server 2008 (neue Editionen) Erkennung und dann gibts bald wieder ein Update.

MaBuSE 17. Jun 2009 14:36

Re: [Kompo] TWindowsVersionsInfo - Kompo zur Windowserkennun
 
Zitat:

Zitat von MagicAndre1981
danke, das bau ich dann ein :thumb:

Gern geschehen.

Das ist jetzt etwas offtopic, aber ;-)

http://www.levenez.com/windows/redir...ndows_pdf.html

bzw.

http://www.levenez.com/windows

Viel Spaß
MaBuSE

TUX_der_Pinguin 1. Dez 2009 11:29

Re: [Kompo] TWindowsVersionsInfo - Kompo zur Windowserkennun
 
Zitat:

Zitat von MagicAndre1981
danke, das bau ich dann ein :thumb:

dann kommt noch die Windows 7 / Vista Sp2 / Server 2008 (neue Editionen) Erkennung und dann gibts bald wieder ein Update.

Hi MagicAndre1981,

die Komponente ist echt Super, aber die Frage wäre ob du schon die Zeit gefunden hast die neusten Versionen einzupflegen und ein
Update der Komponente bereitstellen kannst.

Vielen dank

TUX

WojTec 6. Mär 2013 18:34

Re: [Kompo] TWindowsVersionsInfo - Kompo zur Windowserkennung
 
This is very very nice class, but don't support latest Windows. Do you plan update?

rNoob 18. Apr 2016 17:23

AW: [Kompo] TWindowsVersionsInfo - Kompo zur Windowserkennung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe diese Komponente für mich selber vor Kurzem angepasst. Es werden alle Windows 10-Versionen korrekt ausgelesen.
Try-Except's könnte man mal hier und da einbauen und ein paar weitere Überprüfungen. Aber für meinen Fall war das nicht notwendig.

MagicAndre1981 ist ja leider seit 2009 nicht mehr aktiv. Deswegen wurde in den Credits folgendes von mir hinzugefügt:
Zitat:

(* V1.6.0 (18.04.2016) [Diese Änderung wurde NICHT durch MagicAndre1981 vorgenommen - Fehler gelten ggf. also nicht ihm] *)
(* - Erkennung bis Windows 10 *)
(* V1.6.1 (19.04.2016) [Diese Änderung wurde NICHT durch MagicAndre1981 vorgenommen - Fehler gelten ggf. also nicht ihm] *)
(* - cruStrSplitter entfernt *)
(* - "except on E: EConvertError do"-Blöcke entfernt *)
cruStrSplitter wurde durch die Version von MaBuSE ersetzt: http://www.delphipraxis.net/923631-post54.html #54

Wen diese Version interessiert, sie ist im Anhang zu finden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:48 Uhr.
Seite 6 von 6   « Erste     456   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz