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;