Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: У формы не срабатывают GotFocus и LostFocus! Добавлено: 11.04.03 14:07  

Автор вопроса:  Страшный Сон

В моей проге надо, чтобы когда юзер переключается на другую форму, не мою, главный цикл в программе приостанавливался, а когда юзер опять переключается на мою, цикл опять запускается. События формы GotFocus и LostFocus не работают. Что делать?

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 Страшный Сон



Вопросов: 46
Ответов: 848
 Профиль | | #1 Добавлено: 11.04.03 14:09

Дубль этой темы можно ликвидировать.

Ответить

Номер ответа: 2
Автор ответа:
 



Вопросов: 7
Ответов: 37
 Web-сайт: www.littlehumans.nm.ru
 Профиль | | #2
Добавлено: 11.04.03 23:01

  см. примеры

 
 :) 
 

Ответить

Номер ответа: 3
Автор ответа:
 Страшный Сон



Вопросов: 46
Ответов: 848
 Профиль | | #3 Добавлено: 12.04.03 12:53

В примерах я ничего не нашёл.

Ответить

Номер ответа: 4
Автор ответа:
 



Вопросов: 7
Ответов: 37
 Web-сайт: www.littlehumans.nm.ru
 Профиль | | #4
Добавлено: 14.04.03 08:41

Иногда требуется определить, когда ваша программа потеряла фокус, то есть стала неактивной в данной момент программой. Также этот пример показывает момент активизации вашей программы.

В данном примере вам обязательно потребуется дополнительный модуль, в который вы должны вписать следующий код:


--------------------------------------------------------------------------------
'КОД МОДУЛЯ

Private Const WM_ACTIVATEAPP = &H1C
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

'КОД ФОРМЫ

Private Sub Form_Load()
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-сайт: dopesoft.narod.ru
 Профиль | | #5
Добавлено: 14.04.03 09:20

Эти событи срабатывают только внутри приложения. Если проверять активночсть надо не часто, то можно сделать по таймеру с итервалом равным к примеру 500.

Private Declare Function GetActiveWindow Lib "user32" () As Long

If GetActiveWindow = frmMain.hwnd Then

'Форма активна

Else

'Форма не активна

end if

Ответить

Номер ответа: 6
Автор ответа:
 Страшный Сон



Вопросов: 46
Ответов: 848
 Профиль | | #6 Добавлено: 14.04.03 13:30

А если я 100 раз в секунду проверять буду, тормозить не начнёт?

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам