![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Версия MSOffice [D7, Win95/98, Win2k, WinXP]
kalishenko © (2004-11-12 16:36:00)Как программно определить версию установленного офиса, т.е. 97, 2000 или XP?
kalishenko (2004-11-15 14:17:00) [1]Спасибо.
zz 5 (2004-11-15 12:43:00) [2]Да не нужен метод 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 12:24:00) [3]1) Метод WordDocument.Connect или WordDocument.ConnectTo - коннект к серверу или к уже открытому документу.
2) С помощью команд, посылаемых серверу.
zz 5 (2004-11-15 12:19:00) [4]1) Что за метод Connect ?
2) Редактировать в каком смысле: с помощью команд посылаемых серверу или вручную через Word ?
kalishenko (2004-11-15 11:38:00) [5]А как открытый таким способом документ редактировать, ведь, как я понял, для автоматических оле-объектов метод connect не работает?
kalishenko (2004-11-15 11:38:00) [6]2 zz 5
А как открытый таким способом документ редактировать, ведь, как я понял, для автоматических оле-объектов метод connect не работает?
zz 5 (2004-11-15 10:40:00) [7]Как вариант, можешь отказаться от классов 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 09:44:00) [8]Хорошо, с этим разобрался. Но вот как в зависимости от того или иного установленного офиса выполнять функцию 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);
естественно компилятор ругается. Как быть?
GanibalLector (2004-11-13 12:22:00) [9]2 zz 5
Что за ссылка?
zz 5 (2004-11-13 12:20:00) [10]2GanibalLector А ссылку обнулить ?
GanibalLector (2004-11-13 12:10:00) [11]...
WordApp := CreateOleObject('Word.Application');
...
Caption:=WordApp.Version;
Shadow-UA (2004-11-12 19:15:00) [12]--->
Попробуй через реестр:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office
Там есть ключ с name'ом в зависимости от версии Office: 9, 10, 11 ;((
А может есть и попроще ??? Хйзн.
---> Shadow