fusebyte (Normal User)
Expert
Messaggi: 332
Iscritto: 24/12/2008
|
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
|
|
fusebyte (Normal User)
Expert
Messaggi: 332
Iscritto: 24/12/2008
|
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.
|
|
fusebyte (Normal User)
Expert
Messaggi: 332
Iscritto: 24/12/2008
|
Codice sorgente - presumibilmente VB.NET |
'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
|
Codice sorgente - presumibilmente VB.NET |
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 il 07/09/2009 alle 14:01 |
|
fusebyte (Normal User)
Expert
Messaggi: 332
Iscritto: 24/12/2008
|
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 |
|
fusebyte (Normal User)
Expert
Messaggi: 332
Iscritto: 24/12/2008
|
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 |
' 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
|
Codice sorgente - presumibilmente VB.NET |
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 |
|
GrG (Member)
Guru^2
Messaggi: 3430
Iscritto: 21/08/2007
|
|
|
fusebyte (Normal User)
Expert
Messaggi: 332
Iscritto: 24/12/2008
|
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
|
|
GrG (Member)
Guru^2
Messaggi: 3430
Iscritto: 21/08/2007
|
Ok, allora, in un modulo inserisci:
Codice sorgente - presumibilmente VB.NET |
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:
Codice sorgente - presumibilmente Plain Text |
AddToTray Form1, "Nome Programma", Form1.Icon
|
e nel codice mettici questo:
Codice sorgente - presumibilmente VB.NET |
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 |
|
fusebyte (Normal User)
Expert
Messaggi: 332
Iscritto: 24/12/2008
|
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 |
|