Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Объектная модель MS Word объект Application.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
246.27 Кб
Скачать

9.5.15. Tasks - работа с запущенными приложениями

09-09-Tasks.docm - пример к п. 9.5.15.

Это свойство возвращает коллекцию Tasks, которая дает доступ ко всем приложениям, запущенным в системе. Давайте рассмотрим пример работы с приложением Notepad.exe (Блокнот), которое представлено в системе процессом Блокнот. Напишем программу (листинг 9.33.), которая проверяет, запущен ли Блокнот, если запущен - выводит сообщение "Блокнот уже запущен", активирует его окно. Если Блокнот не запущен - запускает его, сообщив об этом.

If Application.Tasks.Exists("Блокнот") = True Then

MsgBox ("Блокнот уже запущен")

With Tasks("Блокнот")

.Activate

.WindowState = wdWindowStateMaximize

End With

Else

MsgBox "Запускаем Блокнот..."

Shell ("Notepad.exe")

With Tasks("Блокнот")

.Activate

.WindowState = wdWindowStateMaximize

End With

End If

Листинг 9.33. Работа с внешним приложением из MS Word (htmltxt)

9.5.16. Visible - скрытие окна ms Word

Visible позволяет скрыть окно Microsoft Word. Если присвоить ему значение False - окно приложения будет скрыто, причем даже с панели задач Windows. Если значение True - окно снова отобразится.

9.5.17. Windows - работа с окнами

09-10-Windows.docm - пример к п. 9.5.17.

Это свойство возвращает коллекцию Windows, которая содержит окна всех открытых документов. Она позволяет управлять окнами. Например, код листинга 9.34. располагает окна на экране без перекрытия:

Application.Windows.Arrange (wdTiled)

Листинг 9.34. Располагаем окна на экране без перекрытия (htmltxt)

Посмотрите на листинг 9.35. Он иллюстрирует применение коллекции Windows:

For i = 1 To Application.Windows.Count

With Application.Windows.Item(i)

.Activate

.WindowState = wdWindowStateNormal

.Width = 400

.Height = 400

.Left = i * 10 - 10

.Top = i * 10 - 10

End With

Next i

Листинг 9.35. Работа с окнами документов (htmltxt)

Здесь мы перебираем по очереди все окна (свойство Count коллекции Windows ), активируем каждое из них ( Activate ), после чего устанавливаем параметр WindowsState (Состояние окна) в значение wdWindowsStateNormal (иначе, если окно развернуто на весь экран, мы не сможем изменить его размеры и получим сообщение об ошибке). Далее, устанавливаем ширину и высоту окна по 400 пикселей и размещаем окна каскадом от левого верхнего угла экрана (координата 0,0), располагая каждое следующее окно правее и ниже предыдущего на 10 пикселей.

9.6. События объекта Application

09-11-События.docm - пример к п. 9.6.

Как и любые другие объекты, Application может реагировать на различные события. Чтобы события объекта отображались в редакторе, нужно воспользоваться особой методикой. Во-первых - вставьте в ваш VBA-проект модуль класса командой Insert - Class Module (Вставить - Модуль класса) или любым другим удобным для вас способом. Теперь разместить в модуле такое объявление (листинг 9.36.).

Public WithEvents obj_Application As Word.Application

Листинг 9.36. Объявляем новую объектную переменную (htmltxt)

После этого в списке объектов модуля появится новый объект obj_Application, который будет представлять собой приложение Microsoft Word. В списке событий доступны для выбора различные события, соответствующие этому объекту. Например, следующие:

  • DocumentBeforeClose (Перед закрытием документа) - событие генерируется непосредственно перед закрытием одного из открытых документов. В этот обработчик можно вставить, например, команды проверки документа, команды сохранения копий документа и т.д.

  • DocumentBeforePrint (Перед печатью документа)

  • DocumentBeforeSave (Перед сохранением документа)

  • DocumentChange (Изменение документа) - это событие гененируется при создании нового документа, открытии существующего или тогда, когда любой документ становится активным.

  • DocumentOpen (Открытие документа)

  • NewDocument (Создание нового документа)

  • Quit (Выход из Microsoft Word)

  • WindowActivate (Активация окна документа)

  • WindowBeforeDoubleClick (Перед двойным щелчком) - происходит после двойного щелчка в области редактирования документа до выполнения стандартной процедуры обработчика двойного щелчка.

  • WindowBeforeRightClick (Перед щелчком правой кнопкой мыши)

  • WindowDeactivate (Деактивация окна)

  • WindowSelectionChange (Изменение выделенной области)

  • WindowSize (Размер окна) - происходит при изменении размеров или перетаскивании окна.

Если вы создадите модуль класса, объявите в нем объект приложения, создадите обработчики, они не будут работать без специальной подготовки. Дело в том, что прежде чем обработчики для Word.Application заработают, нужно связать переменную, представляющую приложение, с приложением. Это можно сделать из какого-нибудь другого модуля. Например, чуть ниже мы познакомимся с автоматически выполняемыми макросами - их можно использовать для подобных целей.

Создадим новый документ Microsoft Word, в редакторе VBA добавим к нему новый модуль класса, назовем его AppEventsModule. Разместим в нем сначала объявление объектной переменной так, как указано выше, а потом создадим пару обработчиков, например, для событий NewDocument и WindowSelectionChange, в которые добавим код вызова окна сообщения с соответствующими сообщениями, указывающими на выполнение данного обработчика. Ниже, на рис. 9.2. вы можете видеть окно проекта после создания модуля и добавления в него соответствующего кода.

увеличить изображение Рис. 9.2.  Окно проекта после добавления модуля класса

Теперь перейдем из редактора в документ, переключимся в режим конструктора, создадим в документе новую кнопку, назовем ее cmd_initObject подпишем как Инициализация, и напишем для нее такой код (листинг 9.37.):

Dim obj_Module As New AppEventsModule

Private Sub cmd_InitObject_Click()

Set obj_Module.obj_Application = Word.Application

End Sub

Листинг 9.37. Связываем переменную с приложением (htmltxt)

Мы не случайно привели здесь полный код обработчика - дело в том, что переменная obj_Module должна быть объявлена не внутри обработчика, а в разделе объявлений модуля. Давайте подробнее рассмотрим этот код.

Выше мы не работали с модулями класса, поэтому сейчас нас ждут некоторые неожиданности. Первая неожиданность возникает при объявлении переменной obj_Module. Как вы помните, при создании модуля класса мы задали его имя - AppEventsModule. Это имя может быть произвольным, главное - оно должно соответствовать общим правилам именования объектов и переменных VBA. В модуле мы объявили переменную obj_Application, которая должна представлять приложение. Итак, объявляя переменнуюobj_Module мы задаем для нее тип данных AppEventsModule - то есть создаем на основе класса AppEventsModule новый объект. В обработчике события нажатия кнопки cmd_InitObject мы связываем переменную объекта obj_Application (если следовать объектно-ориентированной терминологии, правильнее будет назвать ее свойством) с приложением Microsoft Word.

После того, как код обработчика для кнопки создан, выйдите из редактора VBA в документ, выключите режим конструктора, нажмите на кнопку и попытайтесь выполнить одно из действий, для которых в модуле AppEventsModule созданы обработчики. Если все сделано верно - вы увидите соответствующие этим обработчикам окна сообщений.