Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: ActiveX/СОМ/CORBA > Delphi+Word


Автор: VictorBondarenko 24.6.2005, 14:48
Уважаемые друзья!

У меня возникла такая проблема. Как определить из программы на Дельфи:
1. Версию установленного на компе Ворда.
2. Подключена ли в Ворде возможность работы с макросами на Visual-Basic.

Заранее благодарен за любые идеи, т.к. пока мне не понятно как вообще
подступиться к этой проблеме.

С уважением и благодарностью за внимание и помощь,
Виктор


Автор: _hunter 24.6.2005, 15:01
1 -- смотри HKEY_CLASSES_ROOT\Word.Application\CurVer

Автор: Poseidon 24.6.2005, 17:47
Цитата(VictorBondarenko @ 24.6.2005, 14:48)
1. Версию установленного на компе Ворда.
http://vingrad.ru/DELPHI-DLP-001400

Автор: VictorBondarenko 27.6.2005, 10:46

Уважаемый Poseidon !

Твой совет
http://vingrad.ru/DELPHI-DLP-001400

я посмотрел и реализовал для просмотра
версии установленного на компе Ворда.
Однако под версией там понимается язык версии и прога мне выдает слово "Русский", а нужно версия в смысле

Word 97, Word 2000, Word 2003.

Если у кого-то есть какие-либо идеи на этот счет, то заранее благодарен за внимание и помощь.
Виктор

Автор: Kesh 27.6.2005, 10:55
Как уже говорил _hunter
Цитата
HKEY_CLASSES_ROOT\Word.Application\CurVer

11 - Word 2003
10 - Word XP
9 - Word 2000 и т.д.

Автор: Albinos_x 27.6.2005, 11:15
Код
...
var ver:integer;
...
ver:=(strtoint(copy(WordApplication1.version, 0, pos('.',wordapplication1.version)-1)));
case ver of
  8  : // word97;
  9  : // word2000;
  10: // Word XP;
  11: // Word 2003;
 end;
...

Автор: Kesh 27.6.2005, 11:25
Albinos_x Да ну... Зачем туда еще и WordApplication кидать? Можно чисто реестром обойтись... Все равно он оттуда его и возьмет... (и то не факт...)

Автор: VictorBondarenko 27.6.2005, 11:34
Kesh, большое спасибо, я видел эти 11, 9, но
как связать эти цифры с версией не знал.


Можно ли аналогично проверить возможность работы
с Visual-Basic в Word'е ? Если в реестре есть ключ Word.Basic , то
означает ли это, что Visual-Basic подключен и в Word'е можно работать с макросами на Visual-Basic?
И вот таким кодом можно выявить подключен ли Visual-Basic к Word'у

Код

 uses 
 ..., Registry; 

function IsMSWordBasicInst: Boolean; 
var 
 Reg: TRegistry; 
 S: string; 
begin 
 Reg := TRegistry.Create; 
 with Reg do 
 begin 
   RootKey := HKEY_CLASSES_ROOT; 
   Result := KeyExists('Word.Basic'); 
   Free; 
 end; 
end; 

Но я попробовал деинсталлировать у себя в Word'е Visual-Basic но , ключ
Word.Basic в реестре как был, так и остался. Может у него смысл какой-то другой?

Может кто чего подскажет?
Виктор

Автор: Albinos_x 27.6.2005, 12:03
Цитата
Albinos_x Да ну... Зачем туда еще и WordApplication кидать? Можно чисто реестром обойтись...


Это всего лишь пример... я предположил, что необходимо от версии ворда реализовывать, те или иные возможности, не поддерживаемые в младших версиях.

Цитата
Но я попробовал деинсталлировать у себя в Word'е Visual-Basic но , ключ
Word.Basic в реестре как был, так и остался. Может у него смысл какой-то другой?


Поробуй весь ворд деинсталировать, увидишь, что половина ключей в реестре останется...
Думаю, надо проверять в реестре раздел, который указывает на комплект установки

Автор: VictorBondarenko 27.6.2005, 12:28

Albinos_x, ты написал:
Думаю, надо проверять в реестре раздел, который указывает на комплект установки.

А более точно, что это за раздел, потому, что я переблал вроде бы все разделы реестра, но ничего подходящего не заметил.

Автор: Albinos_x 27.6.2005, 13:37
Цитата
А более точно, что это за раздел, потому, что я переблал вроде бы все разделы реестра, но ничего подходящего не заметил.

что-то нашёл, но пока разбираюсь как это использовать...
Добавлено @ 13:43
можно попробовать, не знаю как при деинсталяции будет этот параметр или нет

hkey_lokal_machine\software\microsoft\windows\cuttentversion\installer\folders

Автор: VictorBondarenko 27.6.2005, 14:09
Спасибо, Albinos_x,
но в
hkey_lokal_machine\software\microsoft\windows\cuttentversion\installer\folders

что-то ничего не видно, что бы указывало на установку Visual-Basic в Worde'е.

Я тоже попробую "покрутить" этот раздел.

Автор: Albinos_x 27.6.2005, 17:41
там указана папка где установлен VB, можно проверять есть такая или нет и так узнать установлен ли Visual-Basic, ну и отсюда следует если он установлен, то с ним ворд работает. заколебался по всему реестру лазить, кое-что нашёл, но там в параметрах либо набор цифр либо строка иероглифов, как это использовать не нашёл, поэтому могу предложить только этот вариант.
Ну ещё можнопроверять dll-ку Visual-Basic её адрес можно найти в разделе:
hkey_local_machine\software\microsoft\vba

По идее он где-то ещё должен оставлять информацию об установленой комплектации, но где - пока не нашёл...

Автор: VictorBondarenko 1.7.2005, 15:05

Я подумал:
"Как проверить установлен ли Visual-Basic в Word'е". Да просто запустить какой-либо работающий проверенный макрос. Если он сработает VBA установлен, а если нет - то нет.
Для этого я написал такой код

procedure TForm1.Button4Click(Sender: TObject);
var
Word:variant;
begin
Word:= CreateOleObject('Word.Application');
Word.Application.Visible:=true;
Word.Documents.Open('E:\Version\t2.doc' );
try
Word.Application.Run( 'A' );
except
on EOleException do showmessage( ' Visual-Basic не подключен');
end;
end;

Этот код работает. Макрос запускаестя.
Но возникла такая проблема. Я для проверки работы обработчика прерываний дал имя несуществующего макроса.
Моя обработка прерывания EOleException не срабатывает и работа на
on EOleException do ... не выходит.
Работает какой-то системный обработчик.
Может, что-то не так написал.

Заранее благодарен за любую подсказку.
Виктор


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)