Lecture

Институт управления, бизнеса и права
Опубликован: 24.03.2009 | Access: free | Students: 7361 / 1536 | Rate: 4.41 / 4.15 | Длительность: 14:33:00
Lecture 9:

Объектная модель MS Word, объект Application

< Lecture 8 || Lecture 9: 123 || Lecture 10 >

9.5.13. StatusBar - вывод информации в строку состояния

09-07-Status Bar.docm - пример к п. 6.3.2.13

Модифицировав свойство StatusBar вы можете записать любой текст в строку состояния Microsoft Word. Туда можно выводить сообщения о ходе выполнения какой-нибудь длительной операции и т.д. В листинге 9.31. приведен пример использования этого свойства.

Application.StatusBar = "Пожалуйста, подождите..."
Листинг 9.31. Вывод фразы в StatusBar

9.5.14. System - системная информация

09-08-System.docm - пример к п. 9.5.12.

Это свойство возвращает объект System, который дает доступ к различной системной информации (о разрешении экрана, типе процессора, объеме свободного места на жестких дисках и т.д.)

Например, свойство FreeDiskSpace объекта System позволяет узнать размер свободного пространства на текущем жестком диске (листинг 9.32.)

Dim var_DiskSize As Variant
var_DiskSize = Application.System.FreeDiskSpace
var_DiskSize = Int(var_DiskSize / (1024 ^ 2))
If var_DiskSize >= 2047 Then _
MsgBox ("На текущем HDD более 2 Гб свободного места") _
Else MsgBox ("Размер свободного места на текущем диске " + _
"равен " + Str(var_DiskSize) + " Мб")
Листинг 9.32. Определение свободного дискового пространства

В этом примере мы учитываем тот факт, что при определении свободного места свойство FreeDiskSpace, во-первых, возвращает значение в байтах, а во-вторых - максимальное значение, возвращаемое функцией, не превышает 2,147,483,647 байт, то есть 2048 Мб или 2 Гб. Для получения значения в мегабайтах мы делим полученное значение на 1024 во второй степени.

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

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. Располагаем окна на экране без перекрытия

Посмотрите на листинг 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. Работа с окнами документов

Здесь мы перебираем по очереди все окна (свойство 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. Объявляем новую объектную переменную

После этого в списке объектов модуля появится новый объект 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. Связываем переменную с приложением

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

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

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

9.7. Выводы

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

< Lecture 8 || Lecture 9: 123 || Lecture 10 >