1

Тема: (решено) Как отловить события мыши в окне документа в VBA?

Есть идея, для реализации которой требуется отследить смену положения курсора в тексте документа и вычислить Range этого места. Понятно, что это событие в объектной модели Ворда, документа, окна и т.д. - отсутствует.

Но отловить это событие, как системное - стандартный процесс API системы. Насколько я понимаю, в VB он осуществляется описанием в декларации, интерфейса с dll, с помощью которой его можно осуществить. И информацию о событии получают от перехватчика системных событий. Как это реализовать?

2

Re: (решено) Как отловить события мыши в окне документа в VBA?

rizalut пишет:

требуется отследить смену положения курсора

Так КУРСОРА или УКАЗАТЕЛЯ МЫШИ?

rizalut пишет:

это событие в объектной модели Ворда, документа, окна и т.д. - отсутствует

Событий навалом, например:
WindowSelectionChange
WindowBeforeRightClick

Макросы под заказ и готовый пакет - mtdmacro.ru

3

Re: (решено) Как отловить события мыши в окне документа в VBA?

Мне нужно то событие, которое приводит к смене положения курсора в тексте.
Видимо эти:

Клик левой мышью в окне документа
Нажатие на стрелки на клавиатуре (влево, вправо, вверх вниз).

4

Re: (решено) Как отловить события мыши в окне документа в VBA?

Форум у меня глючит, и уже не впервый раз.
Я открыл свою тему для редактирования, изменил ее заголовок и текст. Нажал "Отправить".
В результате появился дубликат темы с измененным заголовком и текстом.

Чтобы не плодить сущностей, я удалил дубликат, а единственный ответ перенес сюда. Прошу прощения за перенос.
--------------------------------------------------------------------

viter.alex Оставил сообщение в дубликате ветки темы 25.01.2010 в 13:12:39


rizalut пишет:
Понятно, что это событие в объектной модели Ворда, документа, окна и т.д. - отсутствует.

Нет, такая возможность присутствует.
Добавьте в документ модуль класса и вставьте в него такой код:

Option Explicit

Public WithEvents app As Word.Application

Private Sub app_WindowSelectionChange(ByVal Sel As Selection)
  MsgBox "Курсор находится на " & Sel.End & " символов от начала документа"
End Sub

Затем в любом модуле запускаем такую процедуру, которая свяжет наше конкретное приложение с событиями в классе:

Dim wdapp As Class1

Sub ConnectToApplication()
  Set wdapp = New Class1
  Set wdapp.app = Word.Application
End Sub

После этого попробуйте пощёлкать мышью в разных частях документа.
--------------------------------------------------------------------
Лучше день потерять — потом за пять минут долететь!

5

Re: (решено) Как отловить события мыши в окне документа в VBA?

viter.alex, я сделал, как вы написали, но реакция на клик не появилась. Странно.

Ворд2007.
В свойствах модуля класса я ничего не менял, стоит следующее:
(Name): Class1
Instansing: 1 - Private

6

Re: (решено) Как отловить события мыши в окне документа в VBA?

viter.alex

Разобрался, что то я туплю.
Нужно же создать экземпляр класса, т.е. вызвать ConnectToApplication.
А я просто вставил код и кликаю.

Все работает, спасибо. В классе появились ссылки на все доступные события.