Опубликовано в Gazeta.Ru от 13-05-1999 (Выпуск No 048)
Оригинал: http://gazeta.ru/flopovod/13-05-1999_office.htm


Сергей Лосев, <srlosev@4unet.ru>
К борьбе с синонимами...

Итак, синонимы...



Столь странная тема выбрана нами из-за того, что, во-первых, надо с чего-то начинать, во-вторых, создаваемая программа затрагивает много интересных особенностей Word, о которых можно узнать лишь что-то запрограммировав, и, в-третьих, программа (по личному убеждению) позволяет полностью отказаться от использования диалогового окна со страшным заголовком "Тезаурус: Русский", открываемого еще более страшной командой меню Сервис – Язык – Тезаурус.

Что понадобится для создания программы? Всего четыре вещи...

  1. Умение работать в Visual Basic for Application и понятие об объектах Microsoft Office.
  2. Объект CommandBars.
  3. Умение писать обработчики событий объекта Application.
  4. Функция SynonymInfo

А что должно получиться в итоге? Опять же четыре вещи...

  1. В контекстном меню должна появиться команда "Синонимы".
  2. При выборе этой команды на экране должна появляться панель инструментов "Синонимы", содержащая список синонимов.
  3. При выборе любой команды в панели "Синонимы" текущее слово должно заменяться на выбранный синоним.
  4. И практически никаких диалоговых окон (практически – это потому, что если синонимов нет, об этом надо каким-то образом сообщить).



Что ж, цель ясна. Можно переходить к теоретическим выкладкам.

Редактор программ на Visual Basic for Application

Редактор программ на Visual Basic for Application – это отдельное приложение, которое вызывается из любого другого приложения Microsoft Office (в данном случае из Word) с помощью клавиш Alt-F11. При этом появляется окно, подобное представленному на рисунке. Большую часть времени придется провести именно в этом редакторе.



Пока в редакторе ничего нет. Модуль, форму или модуль класса нужно прежде создать, воспользовавшись меню Вставка. Но стоп! Еще рано создавать модули.

Word имеет очень интересную структуру документа. Каждый новый документ создается на базе шаблона Normal.Dot. А, следовательно, если поместить модули непосредственно в этот шаблон, то они будут доступны все документам без исключения. Вставка же модулей в текущий документ ограничит их использование лишь каким-то одним документом, а кроме того, при его открытии вы будете навязчиво информированы о возможной атаке вирусов – слишком болезненно Word реагирует на любую самую безобидную программу на Visual Basic for Application.

А вообще о том, что из себя представляет Microsoft Word с точки зрения программиста можно узнать из вполне серьезной статьи в апрелевском номере "КомпьютерПресса", которая располагается на CD ROM к журналу.

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

Объект CommandBars

Объект CommandBars универсален. Это одновременно и меню, и панели инструментов, и контекстное меню. Открыв справочную информацию по этому объекту, вы сможете удостовериться, что любые команды, как бы они не выглядели, например:
так так или так


создаются с помощью свойств и методов объекта CommandBars.

А вот и пример, показывающий, как программно управлять панелями инструментов. В следующей программе удаляются все панели инструментов, которые не являются встроенными (свойство BuiltIn)и не отображаются на экране (свойство Visible).

Свойство SynonymInfo

Говоря научным языком (иначе, впрочем, и не скажешь), SynonymInfo – это свойство, которое позволяет получить набор синонимов, антонимов и похожих по смыслу терминов для указанного слова. Свойство имеет такой синтаксис:

SynonimInfo(<слово>, <код языка>)
где
<слово> – слово, о котором вы хотите получить информацию.
<код языка> – константа wdRussian, wdEnglishUS или wdEnglishUK.

Возвращаемый свойством результат представляет собой ссылку на одноименный объект. В нем нам понадобятся свойства SynonymList и AntonymList.

Как использовать эти свойства? Лучшим ответом на вопрос является следующий пример, в котором отбираются синонимы и антонимы для слова "Большой".

От слов к делу

Настала пора ввести текст основной программы и как можно подробнее прокомментировать процесс ввода. По понятным причинам, комментарии не могут растянуться на 50 страниц, приходится укладываться всего в 1-2.

Этап I. Создание модуля класса.

Особенность объекта Application, вернее, событий объекта Application, состоит в том, что для их активизации требуется создать модуль класса и инициализировать в нем объект. Вот какие действия при этом вам надо выполнить:

  1. Раскройте в окне проекта ветвь Normal.
  2. Выполните команду меню Вставка – Модуль класса
  3. Откройте окно свойств, щелкнув по кнопке . Укажите имя нового класса – в следующих программах используется имя EventClass.
  4. Введите в модуле класса следующие строки:

Этап II. Создание вспомогательных процедур.

  1. В шаблоне Normal создайте новый модуль, выбрав в меню команду ВставкаМодуль.
  2. Введите в нем процедуру Prepare_PopMenu_Text.
  1. Введите процедуру ShowSynCtrlBars. Это основная процедура нашей программы, она довольно большая и не допускает каких-либо ошибок при вводе.
  1. Введите процедуру InsertMenuCommand
Этап III. Создание событий для объекта Document

Чтобы при создании или открытии документа в контекстном меню появлялась команда "Синонимы", надо инициализировать события Document_New и Document_Open. Для этого откройте ветвь Microsoft Word Объекты для шаблона Normal, щелкните по ThisDocument, чтобы открыть соответствующий модуль, и введите в нем следующий код.

Этап IV. Заключительный этап.

  1. Убедитесь, что все модули введены правильно (в этом поможет режим отладки и компиляции).
  2. Сохраните шаблон Normal.dot, нажав клавиши Ctrl-S.
  3. Создайте новый документ.
  4. Введите в нем слово "большой". Установите в середине этого слова курсор и щелкните правой кнопкой мыши.
  5. Должно появиться контекстное меню, в котором находится пункт "Синонимы".
  6. Выберите пункт "Синонимы", а затем в панели инструментов укажите нужное вам слово, – оно заменит слово "большой".
  7. У вас все должно получиться.

Пишите нам: info@gazeta.ru
Copyright © Gazeta.Ru
RRU_Network
При перепечатке и цитировании ссылка на источник с указанием автора обязательна. Перепечатка без ссылки и упоминания имени автора является нарушением российского и международного законодательства, а также большим свинством.