Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.043 c
14-1102064193
080D:07BBh
2004-12-03 11:56
2004.12.26
DB components


14-1102562004
Думкин
2004-12-09 06:13
2004.12.26
С днем рождения! 9 декабря


1-1102510216
Игорь нтк
2004-12-08 15:50
2004.12.26
Редактирование DBEdit


3-1101464030
Garry_c
2004-11-26 13:13
2004.12.26
проверка UpdateStatus


1-1102499948
mefisto
2004-12-08 12:59
2004.12.26
Как передать сообщение своей программе с коммандной строки?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский