Спасибо за подсказку, но как мне кажется, дело не в фокусе...
А в координатах расположения иконки для отображения меню... С меню все понятно и все работает, а при простом клике на иконке форма отображается, но .....посмотирете сами.
Подскажите, как можно это исправить?
Я выложу весь код, администраторы простите, как мог укоротил...
Для работы создайте меню Name - "menu"
и пункт меню Name - "MnuPrev"
в
Class Modules
Option Explicit
Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4
Private Const NIM_ADD = &H0
Private Const NIM_MODIFY = &H1
Private Const NIM_DELETE = &H2
Private Const WM_RBUTTONDOWN = &H204
Private Const WM_NULL = &H0
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 NID As NOTIFYICONDATA
Private m_hWnd As Long
Private m_Icon As Long
Private m_ToolTipText As String
Public Enum TrayIcon_Mouse
TRAYICON_MOUSE_NONE = 0
TRAYICON_MOUSE_LEFTDOWN = 1
TRAYICON_MOUSE_LEFTUP = 2
TRAYICON_MOUSE_LEFTDBLCLICK = 3
TRAYICON_MOUSE_RIGHTDOWN = 4
TRAYICON_MOUSE_RIGHTUP = 5
TRAYICON_MOUSE_RIGHTDBLCLICK = 6
End Enum
Public Event OnIcon(MouseButton As Integer)
Public Property Get hwnd() As Long
hwnd = m_hWnd
End Property
Public Property Let hwnd(ByVal NewValue As Long)
m_hWnd = NewValue
End Property
Public Property Get Icon() As Long
Icon = m_Icon
End Property
Public Property Let Icon(ByVal NewValue As Long)
m_Icon = NewValue
End Property
Public Property Get ToolTipText() As String
ToolTipText = m_ToolTipText
End Property
Public Property Let ToolTipText(ByVal NewValue As String)
m_ToolTipText = NewValue
End Property
Public Sub Add()
Dim ret As Long
NID.uID = m_hWnd
NID.hwnd = m_hWnd
NID.hIcon = m_Icon
NID.szTip = Left$(m_ToolTipText, 63) & Chr$(0)
NID.uFlags = NIF_TIP + NIF_MESSAGE + NIF_ICON
NID.uCallbackMessage = WM_RBUTTONDOWN
NID.cbSize = Len(NID)
ret = Shell_NotifyIcon(NIM_ADD, NID)
End Sub
Public Sub Modify()
Dim ret As Long
NID.hIcon = m_Icon
NID.szTip = Left$(m_ToolTipText, 63) & Chr$(0)
NID.uFlags = NIF_TIP + NIF_ICON
NID.cbSize = Len(NID)
ret = Shell_NotifyIcon(NIM_MODIFY, NID)
End Sub
Public Sub Delete()
Dim ret As Long
NID.cbSize = Len(NID)
ret = Shell_NotifyIcon(NIM_DELETE, NID)
End Sub
Public Sub CallEvent(X As Single, Y As Single)
If Y Then Exit Sub
Dim MouseButton As Integer
MouseButton = (X And &HFF) / Screen.TwipsPerPixelX
RaiseEvent OnIcon(MouseButton)
End Sub
Public Sub CallPopupMenu(Window As Form, PopMenu As menu, Optional Flags, Optional X, Optional Y, Optional DefMenu)
SetForegroundWindow m_hWnd
Window.PopupMenu PopMenu, Flags, X, Y, DefMenu
PostMessage m_hWnd, WM_NULL, 0, 0
End Sub
Public Sub ShowFrm()
SetForegroundWindow m_hWnd
Form1.WindowState = 0
Form1.Visible = True
PostMessage m_hWnd, WM_NULL, 0, 0
End Sub
В форму (Form1)
Option Explicit
Dim WithEvents cTray As TrayIcon
Private Sub Form_Load()
Set cTray = New TrayIcon
End Sub
Private Sub butAdd_Click()
cTray.hwnd = hwnd
cTray.Icon = Icon
cTray.ToolTipText = "Привет!"
cTray.Add
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
cTray.Delete
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbRightButton Then cTray.CallEvent X, Y
If Button = vbLeftButton Then cTray.ShowFrm
'cTray.CallEvent X, Y
End Sub
Private Sub cTray_OnIcon(MouseButton As Integer)
Debug.Print MouseButton
If MouseButton = TRAYICON_MOUSE_LEFTUP Then cTray.ShowFrm
If MouseButton = TRAYICON_MOUSE_RIGHTUP Then cTray.CallPopupMenu Me, menu, 2, , , MnuPrev
End Sub
Private Sub Form_Resize()
If Form1.WindowState = 1 Then MibimizeFrm
End Sub
Public Sub MibimizeFrm()
Form1.Visible = False
cTray.hwnd = hwnd
cTray.Icon = Icon
cTray.ToolTipText = "Привет!"
cTray.Add
End Sub
Private Sub MnuPrev_Click()
cTray.ShowFrm
End Sub
Нажмите минимизировать и посмотрите, что происходит... Помогите пожалуйста!