1) Если после помещения формы в трей было открыто какое-либо окно, то оно загораживает окно приложения, вышедшего из трея.
2) Чтобы форма среагировала на клик мыши - нужно кликнуть дважды.
В общем окно становится не активно...
- Код: Выделить всё
Option Explicit
'V Форма сворачивается в трей******************************************************************************************************************
Private Type NOTIFYICONDATA
cbSize As Long
hWnd As Long
uId As Long
uFlags As Long
ucallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type
Private Const NIM_ADD = &H0
Private Const NIM_MODIFY = &H1
Private Const NIM_DELETE = &H2
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4
Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Const WM_MBUTTONDBLCLK = &H209
Private Const WM_MBUTTONDOWN = &H207
Private Const WM_MBUTTONUP = &H208
Private Const WM_RBUTTONDBLCLK = &H206
Private Const WM_RBUTTONDOWN = &H204
Private Const WM_RBUTTONUP = &H205
Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
Dim TrayI As NOTIFYICONDATA
Dim State As Integer 'запоминаем WindowState формы
'A Форма сворачивается в трей******************************************************************************************************************
Private Sub MDIForm_Load()
On Error GoTo Er
frmFirst.Show
frmFirst.ZOrder
Exit Sub
Er:
Screen.MousePointer = vbDefault
MsgBox "Error " & Err.Number & ": " & Err.Description, vbOKOnly + vbCritical, "Error"
End Sub
Private Sub MDIForm_Resize()
On Error GoTo Er
'V Форма сворачивается в трей**********************************************************
If WindowState = 1 Then
TrayI.hWnd = Picture1.hWnd 'Link the trayicon to this picturebox
TrayI.uId = 1&
TrayI.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
TrayI.ucallbackMessage = WM_LBUTTONDOWN
TrayI.hIcon = Picture1.Picture
TrayI.szTip = "Форма в трее" & Chr$(0)
Shell_NotifyIcon NIM_ADD, TrayI
Me.Hide
End If
If WindowState <> 1 Then State = WindowState
'A Форма сворачивается в трей**********************************************************
Exit Sub
Er:
Screen.MousePointer = vbDefault
MsgBox "Error " & Err.Number & ": " & Err.Description, vbOKOnly + vbCritical, "Error"
End Sub
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
On Error GoTo Er
'V Форма из трея************************************************************************
Dim Msg As Integer
Msg = x / Screen.TwipsPerPixelX
If Msg = WM_LBUTTONUP Or Msg = WM_RBUTTONUP Then 'Click
'Восстанавливаем форму
WindowState = State
Me.Visible = True
Screen.MousePointer = vbDefault
'Убираем значёк из трея
TrayI.cbSize = Len(TrayI)
TrayI.hWnd = Picture1.hWnd
TrayI.uId = 1&
'Delete the icon
Shell_NotifyIcon NIM_DELETE, TrayI
End If
'A Форма из трея************************************************************************
Exit Sub
Er:
Screen.MousePointer = vbDefault
MsgBox "Error " & Err.Number & ": " & Err.Description, vbOKOnly + vbCritical, "Error"
End Sub
Private Sub MDIForm_QueryUnload(Cancel As Integer, UnloadMode As Integer)
On Error GoTo Er
If UnloadMode = vbFormControlMenu Then
Cancel = MsgBox("Выйти?", vbQuestion + vbYesNo, "Выход") <> vbYes
End If
Exit Sub
Er:
Screen.MousePointer = vbDefault
MsgBox "Error " & Err.Number & ": " & Err.Description, vbOKOnly + vbCritical, "Error"
End Sub
Прочитал, что это ппроисходит после вызова функции
- Код: Выделить всё
Shell_NotifyIcon
Для устранения данной проблемы рекомендовано юзать
- Код: Выделить всё
SetForegroundWindow
Пробовал - не помогает.