Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Версия 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


Наверх

Титульная страница Поиск, карта сайта Написать письмо