Форум: "WinAPI";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
ВнизВерсия MSOffice Найти похожие ветки
← →
kalishenko (2004-11-12 16:36) [0]Как программно определить версию установленного офиса, т.е. 97, 2000 или XP?
← →
Shadow-UA (2004-11-12 19:15) [1]--->
Попробуй через реестр:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office
Там есть ключ с name"ом в зависимости от версии Office: 9, 10, 11 ;((
А может есть и попроще ??? Хйзн.
---> Shadow
← →
GanibalLector © (2004-11-13 12:10) [2]...
WordApp := CreateOleObject("Word.Application");
...
Caption:=WordApp.Version;
← →
zz 5 © (2004-11-13 12:20) [3]2GanibalLector А ссылку обнулить ?
← →
GanibalLector © (2004-11-13 12:22) [4]2 zz 5
Что за ссылка?
← →
kalishenko (2004-11-15 09:44) [5]Хорошо, с этим разобрался. Но вот как в зависимости от того или иного установленного офиса выполнять функцию WordApplication1.Documents.Open не знаю. У нее в разных модулях количество параметров и сами параметры разные, т.е. если используется Word97.pas - одно количество, WordXP.pas - совершенно другое. При попытке делать следующее
if WordApplication1.Version = "10.0" then
WordApplication1.Documents.Open(Filename, EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,
EmptyParam, EmptyParam,
EmptyParam,EmptyParam,
EmptyParam,EmptyParam,
EmptyParam,EmptyParam)
else if WordApplication1.Version = "8.0" then
WordApplication1.Documents.Open(Filename, EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,
EmptyParam,
EmptyParam,EmptyParam);
естественно компилятор ругается. Как быть?
← →
zz 5 © (2004-11-15 10:40) [6]Как вариант, можешь отказаться от классов TWordApplication, и работать с вариантной переменной. Естесственно из uses убираешь
Win97, WinXP.
{ Пример }
const
WordApplication = "Word.Application";
var
FWordApp: Variant; { ????????? Word }
Result: HRESULT;
Unknown: IUnknown;
WGuid: TGUID;
begin
{ ??????????? ? ??????? ????????????? }
WGuid := StringToGUID(WordApplication);
Result := GetActiveObject(WGuid,nil,Unknown);
if Result = MK_E_UNAVAILABLE then
FWordApp := CreateOleObject(WordApplication)
else
FWordApp := GetActiveOleObject(WordApplication);
FWordApp.Documents.Open(AFileName,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam); { Должно полдойти и для 97 и для XP }
Ну и так далее...
2GanibalLector WordApp := Unassigned
← →
kalishenko (2004-11-15 11:38) [7]А как открытый таким способом документ редактировать, ведь, как я понял, для автоматических оле-объектов метод connect не работает?
← →
kalishenko (2004-11-15 11:38) [8]2 zz 5
А как открытый таким способом документ редактировать, ведь, как я понял, для автоматических оле-объектов метод connect не работает?
← →
zz 5 © (2004-11-15 12:19) [9]1) Что за метод Connect ?
2) Редактировать в каком смысле: с помощью команд посылаемых серверу или вручную через Word ?
← →
kalishenko (2004-11-15 12:24) [10]1) Метод WordDocument.Connect или WordDocument.ConnectTo - коннект к серверу или к уже открытому документу.
2) С помощью команд, посылаемых серверу.
← →
zz 5 © (2004-11-15 12:43) [11]Да не нужен метод Connect здесь, вот пример:
const
WordApplication = "Word.Application";
var
WordApp, WordDoc: Variant;
Result: HRESULT;
Unknown: IUnknown;
WGuid: TGUID;
begin
if OpenDialog1.Execute then
begin
WGuid := StringToGUID(WordApplication);
Result := GetActiveObject(WGuid,nil,Unknown);
if Result = MK_E_UNAVAILABLE then
WordApp := CreateOleObject(WordApplication)
else
WordApp := GetActiveOleObject(WordApplication);
WordApp.Documents.Open(OpenDialog1.FileName,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam);
WordDoc := WordApp.ActiveDocument;
WordDoc.Range.Text := "Hello, World";
WordApp.Visible := True;
WordApp := Unassigned;
end;
WordDoc ссылка на открытый документ, с ней и работаешь
← →
kalishenko (2004-11-15 14:17) [12]Спасибо.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.036 c