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
 
#52

Re: [Kompo] TWindowsVersionsInfo - Kompo zur Windowserkennun

  Alt 15. Jun 2009, 10:33
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.

    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.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat