обработчик событий формы/контрола

v-e-t
Дата: 24.01.2016 05:46:42
Доброго дня!
Мне необходимо в рантайме разным контролам и формам назначить идентичный обработчик события - некоторую пользовательскую функцию ОБРАБОТКА, определенную в общем модуле. Например, назначить ее событию OnMouseDown. С назначением обработчика в VBA нет вопросов: ="=ОБРАБОТКА()", но как передать параметры стандартного обработчика, которые есть в модуле формы при использовании "[event procedure]" - MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single).
Вопрос - как значения этих параметров передать в мою функцию ОБРАБОТКА(Button As Integer, Shift As Integer, X As Single, Y As Single)?

спасибо.
studieren
Дата: 24.01.2016 06:42:10
v-e-t,

Прямо внутри события и вызывайте свою функцию / процедуру и заодно передавайте значение параметров.
Private Sub Поле0_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    ОБРАБОТКА Button, Shift, X, Y
End Sub
v-e-t
Дата: 24.01.2016 15:12:49
studieren
v-e-t,

Прямо внутри события и вызывайте свою функцию / процедуру и заодно передавайте значение параметров.
Private Sub Поле0_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    ОБРАБОТКА Button, Shift, X, Y
End Sub


Вопрос именно в том, чтобы не писать в модуле формы вообще ничего, а в режиме рантайм назначить обработчик в виде готовой функции потому, что форм будет много (например 30), и при чего-либо в функции я не хочу править все 30 форм.
Predeclared
Дата: 24.01.2016 16:39:37
v-e-t
... Вопрос именно в том, чтобы не писать в модуле формы вообще ничего...

Тогда никак.

v-e-t
... форм будет много (например 30), и при чего-либо в функции я не хочу править все 30 форм.

Можно для каждого типа формы/контрола описать класс-обертку, где подписываться на события,
описывать процедуры обработки событий, и в них реализовывать нужный "стандартизированный" функционал.
Predeclared
Дата: 24.01.2016 18:31:28
Пример лайт:
для формы - бэк колор области данных при активации/деактивации
для кнопок - клик и форе колор на получение/потерю фокуса
для текстбоксов - мышка вниз, мышка вверх.
v-e-t
Дата: 25.01.2016 07:59:41
Predeclared,
На счет своих классов и инстансов форм я знаю. Интересует решение именно в постановке вопроса, но все равно спасибо.
Вакшуль Сергей
Дата: 27.01.2016 01:41:11
v-e-t, добрый день.

Собственно, Predeclared уже все сказал, я лишь добавлю, пару слов. Может вам пригодится.
К параметрам, которые вас интересуют (Button As Integer, Shift As Integer, X As Single, Y As Single), можно получить доступ только из модуля формы. Делегаты тут не используешь. Писать код в каждой форме вас не устраивает, значит, как сказал Predeclared, на эти события нужно подписаться откуда-нибудь. Причем это должен быть только модуль класса.
Собственно я и хотел предложить вариант.
Вот тут я выкладывал файл:
http://am.rusimport.ru/MsAccess/topic.aspx?ID=782
Тема другая, но там есть фрагмент, который можно приспособить для вашей задачи.

Вы хотите в одном месте разместить код, который будут использовать разные формы/отчеты и их контролы. Т.е. нужен класс.

в примере, что я дал, одна из подсистем это своеобразный Диспетчер уровня приложения, который следит за происходящим: Открытие/Закрытие/Активация/Декативация форм/отчетов в приложении(Диспетчер представлен двумя классами и одним интерфейсом) и генерирует соответствующие события.

Так вот. По вашей задаче. Как я сказал, вам нужен класс, где вы разместите свой код на все случаи жизни.
В моем примере таким классом был модуль формы F_Start. В этом классе, создается объектная переменная типа Диспетчера.
Это вам дает доступ ко событиям Диспетчера. А события эти:
Event AfterOpenFR(FR_Object As Object)
Event ActivationFR(FR_Object As Object, blnAfterOpen As Boolean)
Event DeactivateFR(FR_Object As Object, intReasonDeact As ReasonDeact, NewFR As Object, FR_IsBeingActivated As Object)
Event CloseFR(FR_Object As Object)

Т.е. вы получаете возможность прослушивать из одного места события Открытие(суррогат этого события)/Закрытие/Активация/Декативация всех форм/отчетов. Непосредственная дальнейшая организация - это уже ваше творчество, как построите.

у Диспетчера есть ряд ограничений. Они описаны в файле: формы не должны быть всплывающие или быть открыты как acDialog, а также все они должны иметь модуль.