buona sera volevo chiedere se qualcuno sapeva come inserire l' icona di un programma nel systray se era possibile da windows o bisogna agire tramite codice Grazie![]()
buona sera volevo chiedere se qualcuno sapeva come inserire l' icona di un programma nel systray se era possibile da windows o bisogna agire tramite codice Grazie![]()
In un Modulo .bas
codice: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 leo As NOTIFYICONDATA Public Const NIM_ADD = &H0 Public Const NIM_MODIFY = &H1 Public Const NIM_DELETE = &H2 Public Const WM_MOUSEMOVE = &H200 Public Const NIF_MESSAGE = &H1 Public Const NIF_ICON = &H2 Public Const NIF_TIP = &H4 Public Const WM_LBUTTONDOWN = &H201 'Button down Public Const WM_LBUTTONUP = &H202 'Button up Public Const WM_LBUTTONDBLCLK = &H203 'Double-click Public Const WM_RBUTTONDOWN = &H204 'Button down Public Const WM_RBUTTONUP = &H205 'Button up Public Const WM_RBUTTONDBLCLK = &H206 'Double-click Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Public Function HyperJump(ByVal URL As String) As Long HyperJump = ShellExecute(0&, vbNullString, URL, vbNullString, vbNullString, vbNormalFocus) End Function Public Sub Icona(testo As String, f As Form) trayicona = True With leo .cbsize = Len(leo) .hwnd = f.hwnd .uid = vbNull .uflags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE .ucallbackmessage = WM_MOUSEMOVE .hicon = f.Icon .sztip = testo End With Shell_NotifyIcon NIM_ADD, leo End Sub
scusa mi e' partito invio
in un Form inserissci un menu (ctrl+ e) (menu) visibilita false
e una voce si sotto menu (pop1) che vuoi visualizzare sul'icona della tray
Ciaocodice:Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) DoEvents Msg = Button 'Debug.Print str(Msg) Msg = X / Screen.TwipsPerPixelX Select Case Msg Case WM_LBUTTONDBLCLK Menu pop1 Case WM_RBUTTONUP Case WM_RBUTTONDBLCLK Menu pop1 End Select End Sub Private Sub Form_Terminate() Shell_NotifyIcon NIM_DELETE, leo End Sub Private Sub popmenu1_Click() 'azioni che vuoi fare al click sulla voce di menu sull'icona End Sub
non sono tanto esperto potresti darmi una spiegazione della prima parte la seconda e' ok grazie
![]()
la prima parte devi solo copiarla in un modulo.bas
ricomincio
mettiamo caso che io abbia un' applicazione che si avvia automaticamente ogni volta che parte il sistema operativo.
Vorrei che la stessa non rimanesse visibile per esteso ma che si avviasse direttamente nel systray.
Come dovrei comportarmi in tal caso?
Grazie per la pazienza
...Terrible warlords, good warlords, and an english song
per avvio automatico devi scrivere una key nel regedit del tipo:
questo codice all'avvio di Windows ti esegue il file pippo.execodice:' nella dichiarazione di un form Dim lngRegKeyROOT As Long Dim strTempRegKeyRoot As String Dim strRegKeyName As String Dim lngKeyDataType As Long Dim strKeyValueName As String Dim KeyDataValue Private Const KEY_ALL_ACCESS = &H2003F Private Declare Function GetComputerName Lib "Kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long Private Declare Function RegOpenKeyEx Lib "advapi32" Alias "RegOpenKeyExA" ( _ ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, _ ByVal samDesired As Long, ByRef phkResult As Long) As Long Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" ( _ ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" ( _ ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, _ ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long Private Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" ( _ ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, _ ByRef lpType As Long, ByVal lpData As String, ByRef lpcbData As Long) As Long Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" ( _ ByVal hKey As Long, ByVal lpValueName As String) As Long Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" ( _ ByVal hKey As Long, ByVal lpSubKey As String) As Long Private Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long Private Sub cmdAction_Click() If Check1.Value = 1 Then Dim Message As String Dim path As String lngRegKeyROOT = &H80000002 strRegKeyName = "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" path = App.path & "\" & "pippo" & ".exe" lngKeyDataType = 1 strKeyValueName = "pippo.exe" KeyDataValue = path Call SetKeyDataValue(lngRegKeyROOT, strRegKeyName, lngKeyDataType, strKeyValueName, KeyDataValue) end if end sub Private Sub SetKeyDataValue(RegKeyRoot As Long, RegKeyName As String, KeyDataType As Long, KeyValueName As String, KeyValueDate As Variant) Dim OpenKey As Long, SetValue As Long, hKey As Long OpenKey = RegOpenKeyEx(RegKeyRoot, RegKeyName, 0, KEY_ALL_ACCESS, hKey) If (OpenKey <> 0) Then Call RegCreateKey(RegKeyRoot, RegKeyName, hKey) End If Select Case KeyDataType Case 1: SetValue = RegSetValueEx(hKey, KeyValueName, 0&, KeyDataType, ByVal CStr(KeyValueDate & Chr$(0)), Len(KeyValueDate)) Case 3: SetValue = RegSetValueEx(hKey, KeyValueName, 0&, KeyDataType, ByVal CStr(KeyValueDate & Chr$(0)), Len(KeyValueDate)) Case 4: SetValue = RegSetValueEx(hKey, KeyValueName, 0&, KeyDataType, CLng(KeyValueDate), 4) End Select SetValue = RegCloseKey(hKey) End Sub
naturalmente deve essere lanciato almeno una volta l'exe
per scrivere la path esatta
spero di essere stato chiaro
Ciao![]()
Ciao! Per me sei stato chiarissimo, e ti ringrazio!
Se volessi creare una applicazione come MSN che oltre all'icona ed al menu nel System Tray visualizza anche delle finestre a seguito di determinati eventi, come posso fare?
![]()
-... Jack: quando ti viene in mente un'idea, scrivila e basta!-
(Alec Baldwin "Caccia a Ottobre Rosso)
In questa discussione, già conclusa da tempo, l'argomento è già stato cambiato più volte. Apri una nuova discussione per ogni nuovo quesito.
Ciao!![]()
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...