Generell stellt sich mir die Frage, was man mit dieser Information denn nun anfangen möchte?
In den seltensten Fällen, möchte man ja nur diese Versionsnummer anzeigen.
Der Grund für die Abfrage ist mir schon klar, denn jede Version hat so seine Eigenarten, die man dann auch berücksichtigen muss.
Aber will ich denn wirklich in dem produzierenden Code ständig diese Fallunterscheidungen machen?
Da wäre es doch besser ich habe eine abstrakte Klasse, die für die Erstellung eines Dokuments zuständig ist.
Für jede Office- Version gibt es eine Ableitung (insofern das denn auch notwendig ist).
Dann hole ich mir über eine Factory abhängig von der Office-Version eine passende Instanz und benutze diese. Diese Factory kann dann eine
Exception werfen, wenn es keine oder keine unterstützte Office-Version findet. Alternativ könnte aber auch eine Instanz geliefert werden, die dann z.B. ein RTF-Dokument (oder was auch immer) erstellt.
BTW
Die beste Methode um die installierte Version zu ermitteln ist:
Delphi-Quellcode:
function GetInstalledWordVersion : integer;
var
LWord : OleVariant;
begin
LWord := CreateOleObject( 'Word.Application' );
try
Result := LWord.Version;
finally
LWord := Unassigned;
end;
end;
PS: Die "Click-To-Run" können per
OLE-Automatisierung nicht angesprochen werden