Страница: 1 |
В моей проге надо, чтобы когда юзер переключается на другую форму, не мою, главный цикл в программе приостанавливался, а когда юзер опять переключается на мою, цикл опять запускается. События формы GotFocus и LostFocus не работают. Что делать?
Дубль этой темы можно ликвидировать. см. примеры В примерах я ничего не нашёл. Иногда требуется определить, когда ваша программа потеряла фокус, то есть стала неактивной в данной момент программой. Также этот пример показывает момент активизации вашей программы. В данном примере вам обязательно потребуется дополнительный модуль, в который вы должны вписать следующий код: Private Const WM_ACTIVATEAPP = &H1C 'КОД ФОРМЫ Private Sub Form_Load() Эти событи срабатывают только внутри приложения. Если проверять активночсть надо не часто, то можно сделать по таймеру с итервалом равным к примеру 500. Private Declare Function GetActiveWindow Lib "user32" () As Long If GetActiveWindow = frmMain.hwnd Then 'Форма активна Else 'Форма не активна end if А если я 100 раз в секунду проверять буду, тормозить не начнёт? Страница: 1 |
Вопрос: У формы не срабатывают GotFocus и LostFocus!
Добавлено: 11.04.03 14:07
Автор вопроса: Страшный Сон
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #1
Добавлено: 11.04.03 14:09
Номер ответа: 2
Автор ответа:
Вопросов: 7
Ответов: 37
Web-сайт:
Профиль | | #2
Добавлено: 11.04.03 23:01
Номер ответа: 3
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #3
Добавлено: 12.04.03 12:53
Номер ответа: 4
Автор ответа:
Вопросов: 7
Ответов: 37
Web-сайт:
Профиль | | #4
Добавлено: 14.04.03 08:41
--------------------------------------------------------------------------------
'КОД МОДУЛЯ
Private Const GWL_WNDPROC = (-4)
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private m_lWndProc As Long
Public Sub WindowHook(hWnd As Long)
m_lWndProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf MessageCenter)
End Sub
Public Sub WindowFree(hWnd As Long)
SetWindowLong hWnd, GWL_WNDPROC, m_lWndProc
End Sub
Private Function MessageCenter(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_ACTIVATEAPP Then
If wParam Then
Form1.OnAppActivate
Else
Form1.OnAppDeActivate
End If
End If
MessageCenter = CallWindowProc(m_lWndProc, hWnd, Msg, wParam, lParam)
End Function
WindowHook hWnd
End Sub
Public Sub OnAppActivate()
MsgBox "Добро пожаловать назад!"
End Sub
Public Sub OnAppDeActivate()
MsgBox "Покидаете программу?"
End Sub
Private Sub Form_Unload(Cancel As Integer)
WindowFree hWnd
End Sub
Номер ответа: 5
Автор ответа:
NightVolk
Вопросов: 12
Ответов: 21
Web-сайт:
Профиль | | #5
Добавлено: 14.04.03 09:20
Номер ответа: 6
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #6
Добавлено: 14.04.03 13:30