Страница 1 из 1

Модальность диалоговых окон в Word

Добавлено: 03 окт 2009, 13:26
Busine2009
Что нужно написать в коде, чтобы диалоговые окна становились или модальными или не модальными.
Например, я запустил макрос, содержащий MsgBox. Пока я не нажму на кнопку в выскочившем диалоговом окне, то ничего не смогу делать в документе. Как сделать так, чтобы Диалоговое окно висело, но что бы я мог, например, текст вводить, или перемещаться по документу.

Re: Модальность диалоговых окон в Word

Добавлено: 03 окт 2009, 13:35
EducatedFool
Надо использовать не встроенный MsgBox, а создать форму, которая внешне выглядит как MsgBox.

Или использовать API-функцию MessageBox, которая может отображать немодальное сообщение:

Код: Выделить всё

Private Declare Function MessageBox Lib "user32.dll" Alias "MessageBoxA" ( _
     ByVal hwnd As Long, _
     ByVal lpText As String, _
     ByVal lpCaption As String, _
     ByVal wType As Long) As Long

Re: Модальность диалоговых окон в Word

Добавлено: 03 окт 2009, 13:59
Busine2009
EducatedFool

то есть к встроенным диалоговым окнам, например, vbOKCancel, нельзя применить модальность?

Я, например, не создаю своих диалоговых окон, т.к. мне кажется, что из-за этого макросы будут медленнее выполняться. На самом ли деле макросы будут медленнее выполняться, если использовать свои диалоговые окна, а не встроенные?

Re: Модальность диалоговых окон в Word

Добавлено: 03 окт 2009, 14:22
EducatedFool
то есть к встроенным диалоговым окнам, например, vbOKCancel, нельзя применить модальность?
Нет, нельзя.
Читаем справку по MsgBox:
vbApplicationModal 0
Application modal; the user must respond to the message box before continuing work in the current application.

vbSystemModal 4096
System modal; all applications are suspended until the user responds to the message box.
Как видишь, немодального режима здесь нет (есть только 2 вида модальных).
На самом ли деле макросы будут медленнее выполняться, если использовать свои диалоговые окна, а не встроенные?
Не скорость макросов это почти не влияет.
По крайней мере, ты не заметишь разницы в скорости.