Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Сообщений [ 3 ]
- Зарегистрирован: 17.03.2010
- Сообщений: 17
- Поблагодарили: 7
Тема: Как поймать событие изменения текста документа?
Задача: необходимо контролировать количество символов в тексте документа, а в случае превышения некоторого максимального значения выделять цветом "лишние" символы.
Собственно сама проверка и выделение цветом проблем не вызывают. Главный вопрос, каким образом оперативно отслеживать изменения в документе и вызывать проверку.
Вариант 1. Запускать проверку периодически через некоторые интервалы времени. Недостатки: бесконечный цикл с проверкой условия даже при отсутствии изменений в документе.
Вариант 2. Отслеживать события нажатия клавиш (набор и удаление символов) и левой кнопки мыши (вставка текста посредством контекстного меню или кнопки на панели инструментов).
Sub HandleEvents()
Dim m As MSG
bCancel = False
Do While Not bCancel
WaitMessage
If PeekMessage(m, GetActiveWindow, 0, 0, PM_NOREMOVE) Then
Select Case m.Message
Case WM_KEYUP, WM_LBUTTONUP
UpdateInfo
End Select
End If
DoEvents
Loop
End Sub
Sub AutoOpen()
HandleEvents
End Sub
Недостатки, выявленные в Word 2003 SP3: 1) некоторые изменения становятся видны только после дополнительного клика мышью или нажатия клавиши; 2) при запуске документа иконки стандартных панелей инструментов не видны до первого клика.
Может, есть решение лучше? Подходящих событий объектной модели Word я не нашел.
Post's attachmentsdead_toolbars.png 5.31 Кб, файл не был скачан.
You don't have the permssions to download the attachments of this post.

- viter.alex
- Модератор
- Неактивен
- Откуда: Харьков, Украина
- Зарегистрирован: 21.12.2009
- Сообщений: 884
- Поблагодарили: 140
Re: Как поймать событие изменения текста документа?
Через WinAPI это круто! Но тут нужно работать через класс. Создаём класс с именем Class1 и пишем в него такой код:
Public WithEvents app As Word.Application
Private Sub app_WindowSelectionChange(ByVal Sel As Selection)
MsgBox Sel.End
End Sub
Затем при открытии документа связываем наше приложение с классом:
Dim app As New Class1 'Объявляем глобально
Private Sub Document_Open()
Set app.app = Application
End Sub
Лучше день потерять — потом за пять минут долететь!
- Зарегистрирован: 17.03.2010
- Сообщений: 17
- Поблагодарили: 7
Re: Как поймать событие изменения текста документа?
Событие WindowSelectionChange все-таки не очень подходит, так как случается, когда меняется выделенный текст либо точка вставки.
Недостаток предложенного вами варианта в том, что событие не происходит:
1) при наборе текста с клавиатуры, хотя курсор перемещается вправо;
2) при удалении символов клавишей BackSpace.
Сообщений [ 3 ]
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как поймать событие изменения текста документа?
Для всех, кто желает совершенствоваться, расти и не любит терять времени понапрасну, предлагаем замечательную шпаргалку по Ворду – форум Ворд Эксперт. Наш сайт о Microsoft Office Word даст ответ про: ключ microsoft word 2007.
Что приятно, это русский форум, очень теплый, там вы не найдете заумных слов и жутких сленговых терминов, в которых без Билла Гейтса не разберешься. Наш сайт о Microsoft Office Word даст ответ про: антоним к слову дружес.
Все просто и понятно.
Заходя в дом - на форум, вы тут же оказываетесь в «прихожей» - разделе, где даются ответы на основные вопросы, как по самому Ворду, так и по устройству форума и сайта. Наш сайт о Microsoft Office Word даст ответ про: ключ для ms office 2007.
Там же вам предложат почитать что-нибудь интересное (про Ворд, конечно, за этим вы и пришли).
А в «гостиной» вы сможете обсудить программу, вашу версию, ее настройки, особенности работы, форматирование и многое другое. Наш сайт о Microsoft Office Word даст ответ про: как добавить подпись в ворде.
Вас научат оптимизировать эксплуатацию Microsoft Word с помощью макросов. Это совсем не сложно.
В «столовой» форума подаются готовые блюда – оригинальные решения той либо иной проблемы, макросы и многое другое. Наш сайт о Microsoft Office Word даст ответ про: почему в ворде 2007 такие большие сноски.
Если хотите заказать «экзотическое блюдо», добро пожаловать «на кухню» - раздел «заявки на разработку». Наш сайт о Microsoft Office Word даст ответ про: оформление документа без рамок.
Оставьте в нем описание своей проблемы, и вам помогут.
Что такое «курилка» объяснять, наверно, никому не надо. На портале о Microsoft Office Word вы узнаете про: ка распределить текст по ширине листа в worde 2010.
Заходите и сами все увидите. А пожелания можно оставлять в соответствующем разделе.