Подскажите, пожалуйста, можно ли отключить MouseMove после однократного срабатывания, и потом снова активировать при выходе за рамки объекта.
Зачем это нужно: случай 1 (в архиве) - textfield, с рамкой меняющей цвет при on_hover и on_click (как в форме авторизации гугла). Делаю через MouseMove, возвращаю в исходное через Detail_MouseMove, а вот дальше уже ни Click, ни GotFocus не позволяют изменить цвет на синий при клике на текстовое поле.
случай 2 - listbox, изменяющий высоту в зависимости от количества строк. Размеры меняются также через MouseMove/Detail_MouseMove, но проблема в том что развернутый список мигает (перерисовается) при движении мыши по нему. Me.lstAutoHeight.Height = Me.lstAutoHeight.ListCount * 217
Есть ли возможность это обойти?
Вот это не работает, хотя и не должно )
Application.Echo False Application.Echo True
DoCmd.Echo False DoCmd.Echo True
LockWindowUpdate Me.hwnd LockWindowUpdate 0 +код в модуле
Доброго времени,
Подскажите, пожалуйста, можно ли отключить MouseMove после однократного срабатывания, и потом снова активировать при выходе за рамки объекта.
Зачем это нужно: случай 1 (в архиве) - textfield, с рамкой меняющей цвет при on_hover и on_click (как в форме авторизации гугла). Делаю через MouseMove, возвращаю в исходное через Detail_MouseMove, а вот дальше уже ни Click, ни GotFocus не позволяют изменить цвет на синий при клике на текстовое поле.
случай 2 - listbox, изменяющий высоту в зависимости от количества строк. Размеры меняются также через MouseMove/Detail_MouseMove, но проблема в том что развернутый список мигает (перерисовается) при движении мыши по нему. Me.lstAutoHeight.Height = Me.lstAutoHeight.ListCount * 217
Есть ли возможность это обойти?
Вот это не работает, хотя и не должно )
Application.Echo False Application.Echo True
DoCmd.Echo False DoCmd.Echo True
LockWindowUpdate Me.hwnd LockWindowUpdate 0 +код в модуле
Если кому-то интересно, решение через добавление проверки в MouseMove (подсказали люди с cyberforum):
для полей [vba]
Код
If Me.ActiveControl.Name <> "txtLogin" Then
[/vba] для списка [vba]
Код
If Me.lstAutoHeight.Height <> Me.lstAutoHeight.ListCount * 217 Then
[/vba] Хотя по списку другой небольшой косяк вылез. Если он при разворачивании перекрывает нижерасположеный список, то либо невозможно нормально выбрать элементы, либо перекрываемая часть просто скрывается под нижерасположеным до клика или скрола на ней.
Если кому-то интересно, решение через добавление проверки в MouseMove (подсказали люди с cyberforum):
для полей [vba]
Код
If Me.ActiveControl.Name <> "txtLogin" Then
[/vba] для списка [vba]
Код
If Me.lstAutoHeight.Height <> Me.lstAutoHeight.ListCount * 217 Then
[/vba] Хотя по списку другой небольшой косяк вылез. Если он при разворачивании перекрывает нижерасположеный список, то либо невозможно нормально выбрать элементы, либо перекрываемая часть просто скрывается под нижерасположеным до клика или скрола на ней.user0
Private Sub lstAutoHeight_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single) Me.lstAutoHeight.Height = X Me.lstAutoHeight.OnMouseMove = "" End Sub
[/vba]
[vba]
Код
Private Sub Detail_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single) If Me.lstAutoHeight.Height = X Then Me.lstAutoHeight.Height = Y End If Me.lstAutoHeight.OnMouseMove = "[Event Procedure]" End Sub
[/vba]
или еще можно так:
[vba]
Код
Private Sub lstAutoHeight_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single) Me.lstAutoHeight.Height = X Me.lstAutoHeight.OnMouseMove = "" End Sub
[/vba]
[vba]
Код
Private Sub Detail_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single) If Me.lstAutoHeight.Height = X Then Me.lstAutoHeight.Height = Y End If Me.lstAutoHeight.OnMouseMove = "[Event Procedure]" End Sub