Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - Ridurre un Soft a IconTray e poterlo riaprire
Forum - Visual Basic 6 - Ridurre un Soft a IconTray e poterlo riaprire

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
fusebyte (Normal User)
Expert


Messaggi: 332
Iscritto: 24/12/2008

Segnala al moderatore
Postato alle 13:08
Lunedì, 07/09/2009
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

PM Quote
Avatar
fusebyte (Normal User)
Expert


Messaggi: 332
Iscritto: 24/12/2008

Segnala al moderatore
Postato alle 13:28
Lunedì, 07/09/2009
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.

PM Quote
Avatar
fusebyte (Normal User)
Expert


Messaggi: 332
Iscritto: 24/12/2008

Segnala al moderatore
Postato alle 13:35
Lunedì, 07/09/2009
Codice sorgente - presumibilmente VB.NET

  1. 'dichiarazione API
  2. Private Type NOTIFYICONDATA
  3.     cbSize As Long
  4.     hWnd As Long
  5.     uId As Long
  6.     uFlags As Long
  7.     ucallbackMessage As Long
  8.     hIcon As Long
  9.     szTip As String * 64
  10. End Type
  11.  
  12. Private Const NIM_ADD = &H0
  13. Private Const NIM_MODIFY = &H1
  14. Private Const NIM_DELETE = &H2
  15. Private Const NIF_MESSAGE = &H1
  16. Private Const NIF_ICON = &H2
  17. Private Const NIF_TIP = &H4
  18.  
  19. Private Const WM_LBUTTONDBLCLK = &H203
  20. Private Const WM_LBUTTONDOWN = &H201
  21. Private Const WM_LBUTTONUP = &H202
  22. Private Const WM_MBUTTONDBLCLK = &H209
  23. Private Const WM_MBUTTONDOWN = &H207
  24. Private Const WM_MBUTTONUP = &H208
  25. Private Const WM_RBUTTONDBLCLK = &H206
  26. Private Const WM_RBUTTONDOWN = &H204
  27. Private Const WM_RBUTTONUP = &H205
  28.  
  29. Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
  30. Dim TrayI As NOTIFYICONDATA


Codice sorgente - presumibilmente VB.NET

  1. Private Sub Form_Load()
  2.     TrayI.cbSize = Len(TrayI)
  3.     TrayI.hWnd = pichook.hWnd 'Link the trayicon to this picturebox
  4.     TrayI.uId = 1&
  5.     TrayI.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
  6.     TrayI.ucallbackMessage = WM_LBUTTONDOWN
  7.     TrayI.hIcon = imgIcon(2).Picture
  8.     TrayI.szTip = "fusebyte" & Chr$(0)
  9.     'Create the icon
  10.     Shell_NotifyIcon NIM_ADD, TrayI
  11.     Me.Hide
  12. End Sub
  13. Private Sub Form_Unload(Cancel As Integer)
  14.     TrayI.cbSize = Len(TrayI)
  15.     TrayI.hWnd = pichook.hWnd
  16.     TrayI.uId = 1&
  17.     'Delete the icon
  18.     Shell_NotifyIcon NIM_DELETE, TrayI
  19.     End
  20. End Sub
  21. Private Sub mnuPop_Click(Index As Integer)
  22.     Select Case Index
  23.         Case 0  'About
  24.             msgbox "fusebyte" + vbCrLf + "piero.tofy", vbInformation + vbOKOnly
  25.         Case 2  'End
  26.             Unload Me
  27.     End Select
  28. End Sub
  29. Private Sub pichook_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  30.     Msg = X / Screen.TwipsPerPixelX
  31.     If Msg = WM_LBUTTONDBLCLK Then  'If the user dubbel-clicked on the icon
  32.         mnuPop_Click 0
  33.     ElseIf Msg = WM_RBUTTONUP Then  'Right click
  34.         Me.PopupMenu mnuPopUp
  35.     End If
  36. End Sub
  37. Private Sub Timer1_Timer()
  38.     'Animate icon
  39.     Static mPic As Integer
  40.     Me.Icon = imgIcon(mPic).Picture
  41.     TrayI.hIcon = imgIcon(mPic).Picture
  42.     mPic = mPic + 1
  43.     If mPic = 14 Then mPic = 0
  44.     Shell_NotifyIcon NIM_MODIFY, TrayI
  45. 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 il 07/09/2009 alle 14:01
PM Quote
Avatar
fusebyte (Normal User)
Expert


Messaggi: 332
Iscritto: 24/12/2008

Segnala al moderatore
Postato alle 15:11
Lunedì, 07/09/2009
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 il 07/09/2009 alle 15:12
PM Quote
Avatar
fusebyte (Normal User)
Expert


Messaggi: 332
Iscritto: 24/12/2008

Segnala al moderatore
Postato alle 15:14
Mercoledì, 09/09/2009
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:

Codice sorgente - presumibilmente VB.NET

  1. ' dichiarazione dell'oggetto icona
  2. Private ObjIcon As NOTIFYICONDATA
  3. ' dichiarazione costanti
  4. Private Const NIM_ADD = &H0
  5. Private Const NIM_MODIFY = &H1
  6. Private Const NIM_DELETE = &H2
  7. Private Const WM_MOUSEMOVE = &H200
  8. Private Const NIF_MESSAGE = &H1
  9. Private Const NIF_ICON = &H2
  10. Private Const NIF_TIP = &H4
  11. Private Const WM_LBUTTONDOWN = &H201 'Button down
  12. Private Const WM_LBUTTONUP = &H202 'Button up
  13. Private Const WM_LBUTTONDBLCLK = &H203 'Double-click
  14. Private Const WM_RBUTTONDOWN = &H204 'Button down
  15. Private Const WM_RBUTTONUP = &H205 'Button up
  16. Private Const WM_RBUTTONDBLCLK = &H206 'Double-click
  17. ' dichiarazione api necessarie
  18. Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
  19.  
  20. ' dichiarazione tipo NotifyIconData
  21. Public Type NOTIFYICONDATA
  22. cbsize As Long
  23. hwnd As Long
  24. uid As Long
  25. uflags As Long
  26. ucallbackmessage As Long
  27. hicon As Long
  28. sztip As String * 64
  29. End Type



Codice sorgente - presumibilmente VB.NET

  1. Public Sub MinimizeInTray(Text As String, QuestionForm As Form, Optional HideAfter As Boolean=True)
  2.  
  3. ' trayicona = True
  4. With ObjIcon
  5. .cbsize = Len(ObjIcon)
  6. ' definizione hwnd
  7. .hwnd = QuestionForm.hwnd
  8. .uid = vbNull
  9. ' inserimento flags
  10. .uflags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
  11. .ucallbackmessage = WM_MOUSEMOVE
  12. ' imposta l'icona della form in questione come l'icona mostrata poi nella tray
  13. .hicon = QuestionForm.Icon
  14. ' imposta il tool tip text dell'icona
  15. ' il tool tip dell'icona deve essere terminata con un chr$(0) o si avranno dei caratteri insensati alla fine!
  16. .sztip = Text & Chr$(0)
  17. End With
  18. ' affiunta dell'icona
  19. Shell_NotifyIcon NIM_ADD, ObjIcon
  20. ' nascondi la form, se è stato precisato nel codice precedente
  21. If HideAfter = True Then QuestionForm.Hide
  22. End Sub
  23.  
  24. Public Sub RemoveIcon()
  25. ' rimuove l'icona nella traybar
  26. Shell_NotifyIcon NIM_DELETE, ObjIcon
  27. End Sub
  28.  
  29. Public Sub EditText(Text As String)
  30. With ObjIcon
  31. ' imposta il testo a una stringa vuota
  32. .sztip = ""
  33. ' come prima, la stringa deve essere terminata con un chr$(0)
  34. .sztip = Text & Chr$(0)
  35. End With
  36. Shell_NotifyIcon NIM_MODIFY, ObjIcon
  37. End Sub



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

Ciao

PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 17:00
Mercoledì, 09/09/2009
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:
http://www.pierotofy.it/pages/extras/forum/6/20382-tasto_r ...

PM Quote
Avatar
fusebyte (Normal User)
Expert


Messaggi: 332
Iscritto: 24/12/2008

Segnala al moderatore
Postato alle 17:13
Mercoledì, 09/09/2009
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

PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 17:27
Mercoledì, 09/09/2009
Ok, allora, in un modulo inserisci:
Codice sorgente - presumibilmente VB.NET

  1. Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
  2. Public Type NOTIFYICONDATA
  3. cbSize As Long
  4. hwnd As Long
  5. uID As Long
  6. uFlags As Long
  7. uCallbackMessage As Long
  8. hIcon As Long
  9. szTip As String * 64
  10. End Type
  11. Public Const NIM_ADD = &H0
  12. Public Const NIM_DELETE = &H2
  13. Public Const NIM_MODIFY = &H1
  14. Public Const NIF_ICON = &H2
  15. Public Const NIF_MESSAGE = &H1
  16. Public Const NIF_TIP = &H4
  17. Public Const WM_MOUSEMOVE = &H200
  18. Public Const WM_RCLICK = &H205
  19. Public Const WM_LDBCLICK = &H203
  20. Global TrayIcon As NOTIFYICONDATA
  21. Public Sub AddToTray(frm As Form, ToolTip As String, Icon)
  22. On Error Resume Next
  23. TrayIcon.cbSize = Len(TrayIcon)
  24. TrayIcon.hwnd = frm.hwnd
  25. TrayIcon.szTip = ToolTip & vbNullChar
  26. TrayIcon.hIcon = Icon
  27. TrayIcon.uID = vbNull
  28. TrayIcon.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
  29. TrayIcon.uCallbackMessage = WM_MOUSEMOVE
  30. Shell_NotifyIcon NIM_ADD, TrayIcon
  31. frm.WindowState = 1
  32. frm.Hide
  33. End Sub
  34.  
  35. Public Sub RemoveFromTray()
  36. Shell_NotifyIcon NIM_DELETE, TrayIcon
  37. End Sub



poi nel button per farlo andare in trayicon:
Codice sorgente - presumibilmente Plain Text

  1. AddToTray Form1, "Nome Programma", Form1.Icon



e nel codice mettici questo:
Codice sorgente - presumibilmente VB.NET

  1. Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  2. Dim Msg As Long
  3. Msg = X / Screen.TwipsPerPixelX
  4. If Msg = WM_LDBCLICK Then 'click tasto sinistro
  5. 'CODICE per far apparire un menù
  6. form1.popupmenu form2.NomeMenu 'devi creare un form2 con il menu
  7. 'CODICE per farlo tornare normale:
  8. 'Form1.WindowState = vbNormal
  9. 'Call RemoveFromTray
  10. 'Form1.Show
  11. '--------------
  12. End If
  13. End Sub



spero sia chiaro :k:

PM Quote
Avatar
fusebyte (Normal User)
Expert


Messaggi: 332
Iscritto: 24/12/2008

Segnala al moderatore
Postato alle 19:10
Mercoledì, 09/09/2009
Si ,questo va bene pero' a me non serve un menu' popup nel FORM1.(a meno che non sia visibile solo in icontray e non sul FORM1 stesso)

Io dovrei ridurre in icona col TASTO MINBUTTON che fa parte del CONTROLBOX nelle proprieta' del FORM1 ,.il FORM1 stesso
e riaprirlo da ICONTRAY con doppio Click.
Col tasto DX del mouse invece dovrei avere un menu,ma qui mi sembra che senza menu' popup
non si possa fare..credo e vale quanto detto fra parentesi
Quindi la parte fondamentale è questa:

ridurre in icontray col TASTO MINBUTTON
riapre il FORM1 da ICOTRAY con doppio Click.
avere un menu' col DX del mouse solo in icontray,sul FORM1 non deve essere visibile,perche' ormai il soft è impostato in una certa maniera ed un menu popup sul FORM1 scombussolerebbe tutto.



Spero di non essere troppo opprimente con le mie richieste :-)))anzi spero di risolverle col tuo/vostro aiuto.

Ciao e grazie

Ultima modifica effettuata da fusebyte il 09/09/2009 alle 19:11
PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo