Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как вызвать функцию на событие MouseMove? / 6 сообщений из 6, страница 1 из 1
06.03.2013, 23:31
    #38176758
ЛилиПути
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать функцию на событие MouseMove?
На форме есть 100500 контролов, и мне нужно, что бы всегда знал, наl каким контролом в данный момент находится мышька. Можно для каждого контрола в режиме конструктора ВРУЧНУЮ определить функцию (ControlName_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)). Когда контролов не много - ладно, можно мышкой потыкать, а когда их реально стопицот можно ли как-то вместо [Процедура обработки событий] вписать что-то на подобие "=FunctionMouseMove(..." и передать в вызываемую функцию координаты мыши и имя контрола?
...
Рейтинг: 0 / 0
07.03.2013, 04:45
    #38176830
гурД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать функцию на событие MouseMove?
ЛилиПутиНа форме есть 100500 контролов, и мне нужно, что бы всегда знал, наl каким контролом в данный момент находится мышька. Можно для каждого контрола в режиме конструктора ВРУЧНУЮ определить функцию (ControlName_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)). Когда контролов не много - ладно, можно мышкой потыкать, а когда их реально стопицот можно ли как-то вместо [Процедура обработки событий] вписать что-то на подобие "=FunctionMouseMove(..." и передать в вызываемую функцию координаты мыши и имя контрола?
Попробуйте методом CreateEventProc. Хэлп:
Метод CreateEventProc создает процедуру обработки событий в модуле класса. Он возвращает значение типа Long, указывающее номер первой строки процедуры обработки событий.

Синтаксис

объект.CreateEventProc(имяСобытия, имяОбъекта)

Метод CreateEventProc использует следующие аргументы.

Аргумент Описание
объект Объект Module, свойство Type которого возвращает константу acClassModule, имеющую значение 1.
имяСобытия Строковое выражение,значением которого является имя события.
имяОбъекта Объект, для которого возникает событие, указанное в аргументе имяСобытия. Сюда относятся объекты Form, Report и Control, а также раздел формы, раздел отчета и модуль класса.

На основе примера из хэлпа попробуйте примерно так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
Function ClickEventProc() As Boolean
Dim frm As Form, ctl As Control, mdl As Module
Dim lngReturn As Long

On Error GoTo Error_ClickEventProc

'Возвращает ссылку на форму
set frm = Forms!ВашаФорма
'Возвращает ссылку на модуль формы.
Set mdl = frm.Module

	for each ctl in frm		' for i=0 to стопиццот контролов -1
	
'			 Добавляет процедуру обработки события.
		lngReturn = mdl.CreateEventProc("Здесь имя процедуры в кавычках", ctl.Name)

'			 Вставляет текст в процедуру.
		mdl.InsertLines lngReturn + 1, vbTab & "MsgBox ""Порядок!"""
		ClickEventProc = True
		
	Next ctl

Exit_ClickEventProc:
	Exit Function

Error_ClickEventProc:
	MsgBox Err & " :" & Err.Description
	ClickEventProc = False
	Resume Exit_ClickEventProc
End Function

...
Рейтинг: 0 / 0
07.03.2013, 06:10
    #38176836
srgPlun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать функцию на событие MouseMove?
Можно ставить в событии(OnMouseMove) =myMouseMove("имя_контрола"). единственная сложность, что нужно прописать для каждого контрола.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
	
'временная: 
for each ctl in frm		' for i=0 to стопиццот контролов -1

ctl.OnMouseMove="=myMouseMove(" & chr(34) &  ctl.Name & chr(34) &  ")"

Next ctl


'в модуле или форме
Public function myMouseMove( byval ctrlName as string)

end  function


в процессе разработки, тестов myMouseMove может глюкануть и выдавать сообщение об ошибке. проходит только после перезапуска Access-а.


пс: еще можно получать положение курсора(GetCursor) и сравнивать с положениями контрлов. но это слишком затратный вариант.
...
Рейтинг: 0 / 0
07.03.2013, 06:16
    #38176838
srgPlun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать функцию на событие MouseMove?
*GetCursorPos
...
Рейтинг: 0 / 0
07.03.2013, 07:14
    #38176849
гурД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать функцию на событие MouseMove?
Недописалось при копировании:
Код: vbnet
1.
for each ctl in frm.controls
...
Рейтинг: 0 / 0
07.03.2013, 08:13
    #38176871
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать функцию на событие MouseMove?
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как вызвать функцию на событие MouseMove? / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]