Oppure

Loading
07/09/09 11:08
fusebyte
Vedo che molti chiedono di poter mettere una icona,che nella maggiorp arte dei casi è inutile o solo abbellisce esteticamente.
Quell'icona ha una sua funzionalita',di poter chiiudere in icona il soft e poterlo riaprire a comando.
Cercherei un aiuto per implementare sui vari codici che si trovano per ICONTRAY questa
funzione di apri chiudi soft.
Potete aiutarmi?

Grazie
aaa
07/09/09 11:28
fusebyte
A dire il vero ho trovato un esempio,ma non ho capito come associarlo,perche le icone
che danno l'effetto "move" o "lampeggiante" ,secondo le icone inserite sono un un form a se stante.
Magari pubblico il codice "ma l'avro' preso qui?" "o chissa' dove" e ne discutiamo.
aaa
07/09/09 11:35
fusebyte
'dichiarazione API
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


Private Sub Form_Load()
    TrayI.cbSize = Len(TrayI)
    TrayI.hWnd = pichook.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 = imgIcon(2).Picture
    TrayI.szTip = "fusebyte" & Chr$(0)
    'Create the icon
    Shell_NotifyIcon NIM_ADD, TrayI
    Me.Hide
End Sub
Private Sub Form_Unload(Cancel As Integer)
    TrayI.cbSize = Len(TrayI)
    TrayI.hWnd = pichook.hWnd
    TrayI.uId = 1&
    'Delete the icon
    Shell_NotifyIcon NIM_DELETE, TrayI
    End
End Sub
Private Sub mnuPop_Click(Index As Integer)
    Select Case Index
        Case 0  'About
            msgbox "fusebyte" + vbCrLf + "piero.tofy", vbInformation + vbOKOnly
        Case 2  'End
            Unload Me
    End Select
End Sub
Private Sub pichook_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Msg = X / Screen.TwipsPerPixelX
    If Msg = WM_LBUTTONDBLCLK Then  'If the user dubbel-clicked on the icon
        mnuPop_Click 0
    ElseIf Msg = WM_RBUTTONUP Then  'Right click
        Me.PopupMenu mnuPopUp
    End If
End Sub
Private Sub Timer1_Timer()
    'Animate icon
    Static mPic As Integer
    Me.Icon = imgIcon(mPic).Picture
    TrayI.hIcon = imgIcon(mPic).Picture
    mPic = mPic + 1
    If mPic = 14 Then mPic = 0
    Shell_NotifyIcon NIM_MODIFY, TrayI
End Sub


Ora c'è un form1(TrayIcon.frm)
dove sono state messi
1 Timer
9 icone
1 picturebox chiamata PICHOOK
1 menu popup (che non ci interessa)

Io ho gia' un FORM1 con tanto di codice ecc ecc,quindi dovrei capire come inglobare il codice.
Il menu popup lo elimino(non mi riesce neanche toglierlo dal FORM...)

Per la dichiarazione non ci sono problemi e neanche per i form LOAD e UNLOAD,mi domando
come trasferire i componenti del FORM1(trayicon.frm) nel mio FORM1.


Ciao
Ultima modifica effettuata da fusebyte 07/09/09 12:01
aaa
07/09/09 13:11
fusebyte
Allora ,diciamo che ho risolto la prima parte,ho importato il codice e la parte grafica(icone,picture.hWnd,timer) sul mio Form e nascoste sotto una testboxLog.
All'avvio appare una icona animata.
Pero' non ho risolto il problema del thread.
infatti il soft non si riduce ad icona e l'icona non riapre il soft.
Credo che il codice abbia bisogno di un bel po' di modifiche.

Mi aiutate?

Grazie,Ciao
Ultima modifica effettuata da fusebyte 07/09/09 13:12
aaa
09/09/09 13:14
fusebyte
Ho trovato questo codice che dice sembra funzionare,pero' manca la parte,una volta ridotto
il soft in ICONTRAY, per riaprirlo dalla ICONTRAY stessa.


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


Qualcuno conosce la parte di codice mancante per riaprire il soft dalla icontray?

Ciao
aaa
09/09/09 15:00
GrG
non ho capito bene cosa vuoi fare... mettere un programma in trayicon ma che abbia un'icona "animata" tipo quella di msn?

comunque se n'è già discusso, ad esempio guarda qui:
pierotofy.it/pages/extras/forum/6/20382-tasto_riduci_ad_icona_e_trayicon/
aaa
09/09/09 15:13
fusebyte
No,vorrei solo che riducendo a icona il soft andasse in icontray sulla barra(dove è la data per intenderci) e dalla stessa icontray riaprirlo di solito con doppio click,un po' come fanno quasi tutti i soft,dove addirittura col DX del mouse hai un menu da usare per
riaprirlo,per i setting,per chiuderlo,ecc.
Una cosa di normale amministrazione per i soft attuali,solo che non conosco il relativo codice VB6.



Ciao
aaa
09/09/09 15:27
GrG
Ok, allora, in un modulo inserisci:
Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
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_DELETE = &H2
Public Const NIM_MODIFY = &H1
Public Const NIF_ICON = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_TIP = &H4
Public Const WM_MOUSEMOVE = &H200
Public Const WM_RCLICK = &H205
Public Const WM_LDBCLICK = &H203
Global TrayIcon As NOTIFYICONDATA
Public Sub AddToTray(frm As Form, ToolTip As String, Icon)
On Error Resume Next
TrayIcon.cbSize = Len(TrayIcon)
TrayIcon.hwnd = frm.hwnd
TrayIcon.szTip = ToolTip & vbNullChar
TrayIcon.hIcon = Icon
TrayIcon.uID = vbNull
TrayIcon.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
TrayIcon.uCallbackMessage = WM_MOUSEMOVE
Shell_NotifyIcon NIM_ADD, TrayIcon
frm.WindowState = 1
frm.Hide
End Sub

Public Sub RemoveFromTray()
Shell_NotifyIcon NIM_DELETE, TrayIcon
End Sub



poi nel button per farlo andare in trayicon:
AddToTray Form1, "Nome Programma", Form1.Icon


e nel codice mettici questo:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim Msg As Long
Msg = X / Screen.TwipsPerPixelX
If Msg = WM_LDBCLICK Then 'click tasto sinistro
'CODICE per far apparire un menù
form1.popupmenu form2.NomeMenu 'devi creare un form2 con il menu
'CODICE per farlo tornare normale:
'Form1.WindowState = vbNormal 
'Call RemoveFromTray
'Form1.Show
'--------------
End If
End Sub


spero sia chiaro :k:
aaa