Ciao,
utilizzo questo codice ( How to use the System Tray directly from Visual Basic ) per minimizzare i miei programmi nella SysTray, ora però ho fatto un progetto con MDI + FormFiglie e questo codice non funziona, grazie all'aiuto di TheTruster ho fatto delle modifiche, ma ancora non funziona come dovrebbe, ecco la situazione:
FUNZIONA
* Icona visualizzata in SysTray
NON FUNZIONA
* visualizzazione Menu al click col destro in SysTray
* ... di conseguenza imposibile testare il resize/altro ...
CODICE
codice:
Private Sub MDIForm_Load()
'##### Gestisco NotifyIcon in SysTray #####
With nid
.cbSize = Len(nid)
.hwnd = Me.hwnd
.uId = vbNull
.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
.uCallBackMessage = WM_MOUSEMOVE
.hIcon = Me.Icon
.szTip = "TooTip" & vbNullChar
End With
Shell_NotifyIcon NIM_ADD, nid
End Sub
codice:
Private Sub MDIForm_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode = vbFormControlMenu Then
'Dim risp As Integer
'risp = MsgBox("Il programma è stato minimizzato sulla SystemTray", vbExclamation)
Me.Hide
Cancel = True
End If
End Sub
codice:
Private Sub MDIForm_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim Result As Long
Dim msg As Long
msg = X / Screen.TwipsPerPixelX
Select Case msg
' Case WM_LBUTTONUP
' Me.WindowState = vbNormal
' Result = SetForegroundWindow(Me.hwnd)
' Me.Show
Case WM_LBUTTONDBLCLK
Me.WindowState = vbNormal
Result = SetForegroundWindow(Me.hwnd)
Me.Show
Case WM_RBUTTONUP
Result = SetForegroundWindow(Me.hwnd)
Me.PopupMenu Me.mPopupSys
End Select
End Sub
codice:
Private Sub MDIForm_Resize()
If Me.WindowState = vbMinimized Then Me.Hide
End Sub
codice:
Private Sub mPopRestore_Click()
Dim Result As Long
Me.WindowState = vbNormal
Result = SetForegroundWindow(Me.hwnd)
Me.Show
End Sub
codice:
Private Sub mPopExit_Click()
Unload Me
End Sub
codice:
Private Sub MDIForm_Unload(Cancel As Integer)
Shell_NotifyIcon NIM_DELETE, nid
End Sub
codice:
Option Explicit
'##### modulo.bas --> Dichiaro il necessario per ridurre in SysTray #####
Public 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
Public Const NIM_ADD = &H0
Public Const NIM_MODIFY = &H1
Public Const NIM_DELETE = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_ICON = &H2
Public Const NIF_TIP = &H4
Public Const WM_MOUSEMOVE = &H200
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Public Const WM_LBUTTONDBLCLK = &H203
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_RBUTTONUP = &H205
Public Const WM_RBUTTONDBLCLK = &H206
Public Declare Function SetForegroundWindow Lib "user32" _
(ByVal hwnd As Long) As Long
Public Declare Function Shell_NotifyIcon Lib "shell32" _
Alias "Shell_NotifyIconA" _
(ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
Public nid As NOTIFYICONDATA
Qualcuno riesce a trovare l'errore?