Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#10

AW: Office 2010 - Click-To-Run - Installation erkennen

  Alt 8. Feb 2014, 11:18
Pssst, ab dem ersten Else, bis zum Finally, gehört alles irgendwie bissl nach Rechts, denn dieses Else gehört zu dem, was man jetzt denken könnte.
(aber über Formatierung kann man ja bekanntlich streiten)
Single würde ja auch schon reichen, bei den kleinen Werten, wobei hier sogar ein Integer passen würde, da es ja (aktuell) keine Nachkommastellen gibt, wobei sich ein Integer aber "sicherer" vergleichen lässt.

Und OpenKeyReadOnly hat einen Rückgabewert, in dem das KeyExists schon eingebaut ist.




Die Funktion WordVersion liefert aber nicht zuverlässig die Version. Auf einem 64Bit Betriebssystem und ein Office 2010 64Bit wird nicht erkannt, außer ich kompiliere es als 64Bit Anwendung.
Gab es da nicht einen Befehl, welcher diese Umleitung deaktiviert?

Ansonsten fängt man ja an:
- 32 Bit-Windows mit 32 Bit-Word
- 64 Bit-Windows mit 64 Bit-Word
- 64 Bit-Windows mit 32 Bit-Word





Delphi-Quellcode:
// Wenn ich dein Muster der Formatierung konsequennt versucht weiterzuverfolgen, dann lande ich hier.
function WordVersion: Integer;
begin
  Result := 0;
  with TRegistry.Create do
    try
      if OpenKeyReadOnly('Software\Microsoft') then
        if KeyExists('Word\7.0') then // Office 95
          Result := 7
        else
          if OpenKeyReadOnly('Office') then
            if KeyExists('8.0\Word') then // Office 97
              Result := 8
            else
              if KeyExists('9.0\Word') then // Office 2001
                Result := 9
            else
              if KeyExists('10.0\Word') then // Office XP
                Result := 10
            else
              if KeyExists('11.0\Word') then // Office 2003
                Result := 11
            else
              if KeyExists('12.0\Word') then // Office 2007
                Result := 12
            else
              if KeyExists('14.0\Word') then // Office 2011
                Result := 14
            else
              if KeyExists('15.0\Word') then // Office 2013
                Result := 15;
    finally
      Free;
    end;
end;


// Oder man zieht alle IFs auf die selbe Ebene, welche als ELSE-IF zusammenhängen.
function WordVersion: Integer;
begin
  Result := 0;
  with TRegistry.Create do
    try
      if OpenKeyReadOnly('Software\Microsoft') then
        if KeyExists('Word\7.0') then // Office 95
          Result := 7
        else
        if OpenKeyReadOnly('Office') then
          if KeyExists('8.0\Word') then // Office 97
            Result := 8
          else
          if KeyExists('9.0\Word') then // Office 2001
            Result := 9
          else
          if KeyExists('10.0\Word') then // Office XP
            Result := 10
          else
          if KeyExists('11.0\Word') then // Office 2003
            Result := 11
          else
          if KeyExists('12.0\Word') then // Office 2007
            Result := 12
          else
          if KeyExists('14.0\Word') then // Office 2011
            Result := 14
          else
          if KeyExists('15.0\Word') then // Office 2013
            Result := 15;
    finally
      Free;
    end;
end;


// Wenn man die nun auch wieder entsprechend dem ELSE aufteilt und das ELSE-IF nicht zusammenhängend sieht, dann sieht das schnell so aus.
// Denn so, wie im Beispiel 1 (welches deiner Vorlage entsprach), würden sonst die ELSE vom IF scheinbar eine Ebene wegrutschen.
function WordVersion: Integer;
begin
  Result := 0;
  with TRegistry.Create do
    try
      if OpenKeyReadOnly('Software\Microsoft') then
        if KeyExists('Word\7.0') then // Office 95
          Result := 7
        else
          if OpenKeyReadOnly('Office') then
            if KeyExists('8.0\Word') then // Office 97
              Result := 8
            else
              if KeyExists('9.0\Word') then // Office 2001
                Result := 9
              else
                if KeyExists('10.0\Word') then // Office XP
                  Result := 10
                else
                  if KeyExists('11.0\Word') then // Office 2003
                    Result := 11
                  else
                    if KeyExists('12.0\Word') then // Office 2007
                      Result := 12
                    else
                      if KeyExists('14.0\Word') then // Office 2011
                        Result := 14
                      else
                        if KeyExists('15.0\Word') then // Office 2013
                          Result := 15;
    finally
      Free;
    end;
end;


// Während ich die ELSE-IF dann doch lieber auch zusammenhänge. Quasi so, als gäbe es auch im Delphi einen zusammenhängenden Elseif-Befehl.
// Denn dann kann man die Einrückung wieder problemlos konsequennt durchziehen.
function WordVersion: Integer;
begin
  Result := 0;
  with TRegistry.Create do
    try
      if OpenKeyReadOnly('Software\Microsoft') then
        if KeyExists('Word\7.0') then // Office 95
          Result := 7
        else if OpenKeyReadOnly('Office') then
          if KeyExists('8.0\Word') then // Office 97
            Result := 8
          else if KeyExists('9.0\Word') then // Office 2001
            Result := 9
          else if KeyExists('10.0\Word') then // Office XP
            Result := 10
          else if KeyExists('11.0\Word') then // Office 2003
            Result := 11
          else if KeyExists('12.0\Word') then // Office 2007
            Result := 12
          else if KeyExists('14.0\Word') then // Office 2011
            Result := 14
          else if KeyExists('15.0\Word') then // Office 2013
            Result := 15;
    finally
      Free;
    end;
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 8. Feb 2014 um 11:21 Uhr)
  Mit Zitat antworten Zitat