PDA

View Full Version : [VB] Ridurre un'applicazione a icona sulla try bar


leon84
19-05-2005, 08:56
Come posso fare ?

fgmac
19-05-2005, 09:09
Cerca nella documentazione delle API (www.allapi.net) Shell_NotifyIcon

Ti permette di gestire un'applicazione nella try.

ciao,

Massi91
19-05-2005, 16:21
ecco, in un modulo bas standard:


' dichiarazione dell'oggetto icona
Private ObjIcon As NOTIFYICONDATA
' dichiarazione costanti
Private Const NIM_ADD = &H0
Private Const NIM_MODIFY = &H1
Private Const NIM_DELETE = &H2
Private Const WM_MOUSEMOVE = &H200
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4
Private Const WM_LBUTTONDOWN = &H201 'Button down
Private Const WM_LBUTTONUP = &H202 'Button up
Private Const WM_LBUTTONDBLCLK = &H203 'Double-click
Private Const WM_RBUTTONDOWN = &H204 'Button down
Private Const WM_RBUTTONUP = &H205 'Button up
Private Const WM_RBUTTONDBLCLK = &H206 'Double-click
' dichiarazione api necessarie
Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

' dichiarazione tipo NotifyIconData
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 Sub MinimizeInTray(Text As String, QuestionForm As Form, Optional HideAfter As Boolean=True)

' trayicona = True
With ObjIcon
.cbsize = Len(ObjIcon)
' definizione hwnd
.hwnd = QuestionForm.hwnd
.uid = vbNull
' inserimento flags
.uflags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
.ucallbackmessage = WM_MOUSEMOVE
' imposta l'icona della form in questione come l'icona mostrata poi nella tray
.hicon = QuestionForm.Icon
' imposta il tool tip text dell'icona
' il tool tip dell'icona deve essere terminata con un chr$(0) o si avranno dei caratteri insensati alla fine!
.sztip = Text & Chr$(0)
End With
' affiunta dell'icona
Shell_NotifyIcon NIM_ADD, ObjIcon
' nascondi la form, se è stato precisato nel codice precedente
If HideAfter = True Then QuestionForm.Hide
End Sub

Public Sub RemoveIcon()
' rimuove l'icona nella traybar
Shell_NotifyIcon NIM_DELETE, ObjIcon
End Sub

Public Sub EditText(Text As String)
With ObjIcon
' imposta il testo a una stringa vuota
.sztip = ""
' come prima, la stringa deve essere terminata con un chr$(0)
.sztip = Text & Chr$(0)
End With
Shell_NotifyIcon NIM_MODIFY, ObjIcon
End Sub

71104
19-05-2005, 18:55
ehm, non vorrei rompere troppo le balle, ma si chiama "tray" e non "try" :D

leon84
19-05-2005, 20:35
ehm, non vorrei rompere troppo le balle, ma si chiama "tray" e non "try" :D

Ops si hai ragione ...

leon84
20-05-2005, 07:09
ecco, in un modulo bas standard:


' dichiarazione dell'oggetto icona
Private ObjIcon As NOTIFYICONDATA
' dichiarazione costanti
Private Const NIM_ADD = &H0
Private Const NIM_MODIFY = &H1
Private Const NIM_DELETE = &H2
Private Const WM_MOUSEMOVE = &H200
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4
Private Const WM_LBUTTONDOWN = &H201 'Button down
Private Const WM_LBUTTONUP = &H202 'Button up
Private Const WM_LBUTTONDBLCLK = &H203 'Double-click
Private Const WM_RBUTTONDOWN = &H204 'Button down
Private Const WM_RBUTTONUP = &H205 'Button up
Private Const WM_RBUTTONDBLCLK = &H206 'Double-click
' dichiarazione api necessarie
Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

' dichiarazione tipo NotifyIconData
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 Sub MinimizeInTray(Text As String, QuestionForm As Form, Optional HideAfter As Boolean=True)

' trayicona = True
With ObjIcon
.cbsize = Len(ObjIcon)
' definizione hwnd
.hwnd = QuestionForm.hwnd
.uid = vbNull
' inserimento flags
.uflags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
.ucallbackmessage = WM_MOUSEMOVE
' imposta l'icona della form in questione come l'icona mostrata poi nella tray
.hicon = QuestionForm.Icon
' imposta il tool tip text dell'icona
' il tool tip dell'icona deve essere terminata con un chr$(0) o si avranno dei caratteri insensati alla fine!
.sztip = Text & Chr$(0)
End With
' affiunta dell'icona
Shell_NotifyIcon NIM_ADD, ObjIcon
' nascondi la form, se è stato precisato nel codice precedente
If HideAfter = True Then QuestionForm.Hide
End Sub

Public Sub RemoveIcon()
' rimuove l'icona nella traybar
Shell_NotifyIcon NIM_DELETE, ObjIcon
End Sub

Public Sub EditText(Text As String)
With ObjIcon
' imposta il testo a una stringa vuota
.sztip = ""
' come prima, la stringa deve essere terminata con un chr$(0)
.sztip = Text & Chr$(0)
End With
Shell_NotifyIcon NIM_MODIFY, ObjIcon
End Sub


Ho provato il codice e mi funziona .... ma ora mi serve chiaramente che al clic sull'icona della tray bar mi riapre il form del mio programma .... come faccio ?

71104
20-05-2005, 11:39
Ho provato il codice e mi funziona .... ma ora mi serve chiaramente che al clic sull'icona della tray bar mi riapre il form del mio programma .... come faccio ?
nella struttura NOTIFYICONDATA avrai sicuramente impostato un valore come messaggio da inviare ad una tua finestra quando l'icona sulla tray riceve un mouse event; quello che devi fare è intercettare quel messaggio: il tipo di evento ce l'hai in lParam, quindi tu non devi far altro che riaprire la finestra quando lParam è uguale a WM_LBUTTONDOWN ad esempio.