Работа с окнами
При открытии каждого документа и при редактировании макрокоманды WinWord создает новое окно, в котором и происходит работа с ними. Однако в каждый момент времени только одно из этих окон активно. В меню Окно (Windows) имеется список открытых окон, причем активное окно помечено галочкой. Группа операторов и функций языка WordBasic позволяет узнать номер активного окна, его заголовок, сделать активным другое окно и многое другое. Посмотрим, как это делается.
Число открытых окон возвращает функция CountWindows().
Функция Window() возвращает номер активного окна в списке окон меню Окно. При этом 1 – соответствует первой позиции в списке, 2 – второй и т. д. Если открытых окон нет, то Window() возвращает 0 (ноль). Обратите внимание, что WinWord выводит список заголовков окон в алфавитном порядке, при этом изменение текущего каталога может изменить порядок следования заголовков в этом списке, так как для текущего каталога выводится только имя файла, а для файлов в других каталогах в заголовке окна указывается еще и полный путь.
Получить заголовок открытого окна можно с помощью функции WindowName$(номер), где номер – номер заголовка в списке. Если номер опущен или равен 0,
возвращается заголовок активного окна.
WindowList номер – делает активным окно с заданным номером. Если номер больше числа открытых окон в списке, то диагностируется ошибка. Этот оператор кроме всего весьма полезен при отладке макрокоманд.
Два оператора NextWindow и PrevWindow позволяют циклически перемещаться по списку окон в обоих направлениях. NextWindow – активирует окно, находящееся в списке непосредственно после активного окна. Если имя активного окна стоит в списке последним, то активизируется окно, стоящее в списке первым. Если активное окно единственное в списке, ничего не происходит. Оператор PrevWindow работает точно так же, но в обратном направлении.
Пример.
Оператор PrevWindow часто используется для переключения между окном редактирования макрокоманд и окном документа.
Оба этих окна должны быть предварительно открыты.
Sub MAIN
If DocMaximize() = 0 Then DocMaximize
MsgBox "Нажмите OK, чтобы перейти к предыдущему окну"
PrevWindow
MsgBox "Теперь нажмите OK, чтобы вернуться."
PrevWindow
End Sub
Чтобы отличить окно, в котором происходит редактирование, от окон документов,
используется функция IsMacro([номер]). Она возвращает -1, если это так, и 0, если нет.
Оператор WordNewWindow – открывает новое окно, содержащее документ, находящийся в активном окне. К заголовкам обоих окон WinWord добавляет двоеточие номер (соответствует выбору пункта Новое окно в меню Окно).
Оператор WindowArrangeAll упорядочивает расположение окон на экране таким образом, чтобы они не перекрывались (соответствует выбору пункта Упорядочить все в меню Окно).
Пример: Активизация первого окна, содержащего документ TEST.DOC:
numwin = CountWindows()
If numwin <> 0 Then
i = 1
While i <= numwin And leave <> 1
winname$ = WindowName$(i)
If InStr(winname$, "TEST.DOC") Then leave = 1
If leave <> 1 Then i = i + 1
Wend
End If
If InStr(winname$, "TEST.DOC") Then
WindowList i
Else
MsgBox "В списке нет окна, содержащего TEST.DOC."
End If