![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| Contribuez Access : Vos contributions. Postez ici vos codes sources, conseils, astuces et autres propositions. Ce forum n'est pas un forum technique mais destiné aux contributions pour www.developpez.com |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
![]() Date d'inscription: septembre 2003
Messages: 2 562
|
Bjr,
Comment ajouter une icône à la zone de notification (SysTray)? Créez un formulaire FrmSysTray et collez-y ce code : Code du formulaire FrmSysTray :
'*************************************************************************************** '* CLASSE POUR SYSTRAY * '*************************************************************************************** '*************************************************************************************** ' Auteur : Thierry GASPERMENT (Arkham46) ' v0.3 (31/10/08) ' Adapté de : http://support.microsoft.com/kb/176085 '*************************************************************************************** '*************************************************************************************** '* EN-TETE * '*************************************************************************************** Option Explicit Option Base 1 Option Compare Database '*************************************************************************************** '* API * '*************************************************************************************** Private Declare Function GetFileVersionInfo Lib "Version.dll" Alias "GetFileVersionInfoA" (ByVal lptstrFilename As String, ByVal dwhandle As Long, ByVal dwlen As Long, lpData As Any) As Long Private Declare Function GetFileVersionInfoSize Lib "Version.dll" Alias "GetFileVersionInfoSizeA" (ByVal lptstrFilename As String, lpdwHandle As Long) As Long Private Declare Function VerQueryValue Lib "Version.dll" Alias "VerQueryValueA" (pBlock As Any, ByVal lpSubBlock As String, lplpBuffer As Any, puLen As Long) As Long Private Declare Sub RtlMoveMemory Lib "kernel32" (Destination As Any, Source As Any, ByVal length As Long) Private Declare Function CreateIconFromResourceEx Lib "user32" _ (presbits As Byte, ByVal dwResSize As Long, ByVal fIcon As Long, _ ByVal dwVer As Long, ByVal cxDesired As Long, ByVal cyDesired As Long, ByVal uFlags As Long) As Long Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" _ (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Long Private Declare Function ExtractIcon Lib "shell32" Alias "ExtractIconA" _ (ByVal hInst As Long, ByVal lpszexename As String, _ ByVal hIcon As Long) As Long Private Declare Function ExtractAssociatedIcon Lib "shell32.dll" Alias "ExtractAssociatedIconA" (ByVal hInst As Long, ByVal lpIconPath As String, lpiIcon As Long) As Long Private Declare Function DestroyIcon Lib "user32.dll" (ByVal hIcon As Long) As Long Private Declare Function CreatePopupMenu Lib "user32" () As Long Private Declare Function TrackPopupMenuEx Lib "user32" _ (ByVal hMenu As Long, ByVal wFlags As Long, ByVal X As Long, _ ByVal Y As Long, ByVal hWnd As Long, ByVal lptpm As Any) As Long Private Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" _ (ByVal hMenu As Long, ByVal wFlags As Long, _ ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long Private Declare Function DestroyMenu Lib "user32" (ByVal hMenu As Long) As Long Private Declare Function GetCursorPos Lib "user32" (lpPoint As PointAPI) As Long Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function GetParent Lib "user32" (ByVal hWnd As Long) As Long Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hdc As Long) As Long Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long '*************************************************************************************** '* Constantes * '*************************************************************************************** Private Const MF_STRING = &H0& Private Const MF_SEPARATOR = &H800& Private Const TPM_LEFTALIGN = &H0& Private Const TPM_RETURNCMD = &H100& Private Const TPM_RIGHTBUTTON = &H2& Private Const SW_HIDE = 0 Private Const SW_SHOWNORMAL = 1 Private Const SW_SHOWMINIMIZED = 2 Private Const SW_SHOWMAXIMIZED = 3 Private Const SW_SHOWNA = 8 Private Const SW_SHOWMINNOACTIVE = 7 Private Const NIM_ADD As Long = &H0 Private Const NIM_MODIFY As Long = &H1 Private Const NIM_DELETE As Long = &H2 Private Const NIF_TIP As Long = &H4 Private Const NIF_MESSAGE As Long = &H1 Private Const NIF_ICON As Long = &H2 Private Const NIF_INFO = &H10 Private Const NIIF_NONE = &H0 Private Const NIIF_INFO = &H1 Private Const NIIF_WARNING = &H2 Private Const NIIF_ERROR = &H3 Private Const NIIF_GUID = &H5 Private Const NIIF_ICON_MASK = &HF Private Const NIIF_NOSOUND = &H10 Private Const NOTIFYICON_VERSION = &H3 Private Const WM_MOUSEMOVE = &H200 Private Const WM_LBUTTONDBLCLK = &H203 Private Const WM_LBUTTONDOWN = &H201 Private Const WM_LBUTTONUP = &H202 Private Const WM_RBUTTONDBLCLK = &H206 Private Const WM_RBUTTONDOWN = &H204 Private Const WM_RBUTTONUP = &H205 Private Const WM_MBUTTONDOWN = &H207 Private Const WM_MBUTTONUP = &H208 Private Const WM_MBUTTONDBLCLK = &H209 Private Const LOGPIXELSX As Long = 88 ' Constantes pour nombre de pixels par pouces Private Const WS_EX_APPWINDOW = &H40000 Private Const GWL_EXSTYLE = -20 Private Const NOTIFYICONDATA_V1_SIZE As Long = 88 ' Taille structure avant v5 Private Const NOTIFYICONDATA_V2_SIZE As Long = 488 ' Taille structure à partir de v5 Private Const NIN_BALLOONSHOW = &H402 Private Const NIN_BALLOONHIDE = &H403 Private Const NIN_BALLOONTIMEOUT = &H404 Private Const NIN_BALLOONUSERCLICK = &H405 '*************************************************************************************** '* Enumérations * '*************************************************************************************** Public Enum ESysTrayIcon SystrayNoIcon = NIF_INFO SystrayInformation = NIIF_INFO SystrayWarning = NIIF_WARNING SystrayError = NIIF_ERROR SystrayNoSound = NIIF_NOSOUND End Enum '*************************************************************************************** '* Types * '*************************************************************************************** Private Type VS_FIXEDFILEINFO dwSignature As Long dwStrucVersionl As Integer dwStrucVersionh As Integer dwFileVersionMSl As Integer dwFileVersionMSh As Integer dwFileVersionLSl As Integer dwFileVersionLSh As Integer dwProductVersionMSl As Integer dwProductVersionMSh As Integer dwProductVersionLSl As Integer dwProductVersionLSh As Integer dwFileFlagsMask As Long dwFileFlags As Long dwFileOS As Long dwFileType As Long dwFileSubtype As Long dwFileDateMS As Long dwFileDateLS As Long End Type Private Type PointAPI X As Long Y As Long End Type Private Type NOTIFYICONDATA cbSize As Long hWnd As Long uID As Long uFlags As Long uCallbackMessage As Long hIcon As Long szTip As String * 128 dwState As Long dwStateMask As Long szInfo As String * 256 uTimeoutAnduVersion As Long szInfoTitle As String * 64 dwInfoFlags As Long End Type ' PT : Window sizing information for object ' used in OBJECTHEADER type. Private Type PT Width As Integer Height As Integer End Type Private Type OBJECTHEADER Signature As Integer ' Type signature (0x1c15). HeaderSize As Integer ' Size of header (sizeof(struct ' OBJECTHEADER) + cchName + ' cchClass). ObjectType As Long ' OLE Object type code (OT_STATIC, ' OT_LINKED, OT_EMBEDDED). NameLen As Integer ' Count of characters in object ' name (CchSz(szName) + 1). ClassLen As Integer ' Count of characters in class ' name (CchSz(szClass) + 1). NameOffset As Integer ' Offset of object name in ' structure (sizeof(OBJECTHEADER)). ClassOffset As Integer ' Offset of class name in ' structure (ibName + cchName). ObjectSize As PT ' Original size of object (see ' code below for value). OleInfo As String * 256 End Type Private Type OLEHEADER OleVersion As Long Format As Long TypeLen As Long End Type ' En-tete d'un fichier icone Private Type ICONDIR idReserved As Integer idType As Integer idCount As Integer End Type ' Données de chaque icone du fichier Private Type ICONDIRENTRY bWidth As Byte bHeight As Byte bColorCount As Byte bReserved As Byte wPlanes As Integer wBitCount As Integer dwBytesInRes As Long dwImageOffset As Long End Type '*************************************************************************************** '* Variables * '*************************************************************************************** Private gNID As NOTIFYICONDATA ' Données du systray Private gStructSize As Long ' Taille de la structure en fonction de la version '*************************************************************************************** '* Propriétés * '*************************************************************************************** Public Property Let SysTrayTipText(pText As String) On Error GoTo Gestion_Erreurs ' Rempli la structure pour l'API With gNID ' NIF_TIP pour changement du texte .uFlags = NIF_TIP .szTip = pText & vbNullChar End With ' Ajout l'icone Call Shell_NotifyIcon(NIM_MODIFY, gNID) On Error GoTo 0 Exit Property Gestion_Erreurs: MsgBox "Error " & Err.Number & " (" & Err.Description & ") dans la propriété SysTrayTipText du module Form_FrmSysTray" End Property Public Property Get SysTrayTipText() As String SysTrayTipText = Left(gNID.szTip, InStr(gNID.szTip, vbNullChar) - 1) End Property '*************************************************************************************** '* Procédures/fonctions * '*************************************************************************************** '--------------------------------------------------------------------------------------- ' Version de la dll '--------------------------------------------------------------------------------------- Private Function GetDllVersion(ByVal pPath As String) As Integer Dim lReturn As Long Dim lBuffer() As Byte Dim lSize As Long Dim lPointer As Long Dim lFileInfo As VS_FIXEDFILEINFO On Error GoTo Gestion_Erreurs ' Taille des infos lSize = GetFileVersionInfoSize(pPath, 0&) If lSize < 1 Then GoTo Gestion_Erreurs ' Redimensionne le buffer ReDim lBuffer(1 To lSize) ' Récupère les infos dans le buffer lReturn = GetFileVersionInfo(pPath, 0&, lSize, lBuffer(1)) If lReturn = 0 Then GoTo Gestion_Erreurs ' Formate les infos à l'emplacement mémoire lPointer lReturn = VerQueryValue(lBuffer(1), "\", lPointer, 0&) If lReturn = 0 Then GoTo Gestion_Erreurs ' Déplace les données dans la structure RtlMoveMemory lFileInfo, ByVal lPointer, Len(lFileInfo) ' Récupère le numéro de version principale GetDllVersion = lFileInfo.dwFileVersionMSh On Error GoTo 0 Exit Function Gestion_Erreurs: GetDllVersion = 0 End Function '--------------------------------------------------------------------------------------- ' Modification de l'icone = icone de l'application ou d'access si inexistante '--------------------------------------------------------------------------------------- Public Function PutIconDefault() As Boolean Dim lhIcon As Long ' Icone de l'application On Error Resume Next lhIcon = ExtractIcon(0, CurrentDb.Properties("AppIcon"), 0) On Error GoTo Gestion_Erreurs If lhIcon = 0 Then ' Extraction de l'icone associée au fichier lhIcon = ExtractAssociatedIcon(0, CurrentDb.Name, 0) End If ' Si icone extraite avec succès If lhIcon <> 0 Then ' Supprime l'ancienne icone If gNID.hIcon <> 0 Then DestroyIcon gNID.hIcon ' Rempli la structure pour l'API With gNID ' NIF_ICON pour affichage icone .uFlags = NIF_ICON .hIcon = lhIcon End With ' Ajout l'icone PutIconDefault = (Shell_NotifyIcon(NIM_MODIFY, gNID) <> 0) End If On Error GoTo 0 Exit Function Gestion_Erreurs: MsgBox "Error " & Err.Number & " (" & Err.Description & ") dans la fonction PutIconDefault du module Form_FrmSysTray" PutIconDefault = False End Function '--------------------------------------------------------------------------------------- ' Modification de l'icone à partir d'un fichier '--------------------------------------------------------------------------------------- Public Function PutIconFromFile(pFile As String) As Boolean Dim lhIcon As Long On Error GoTo Gestion_Erreurs ' Extraction de l'icone associée au fichier lhIcon = ExtractIcon(0, pFile, 0) ' Si icone extraite avec succès If lhIcon <> 0 Then ' Supprime l'ancienne icone If gNID.hIcon <> 0 Then DestroyIcon gNID.hIcon ' Rempli la structure pour l'API With gNID ' NIF_ICON pour affichage icone .uFlags = NIF_ICON .hIcon = lhIcon End With ' Ajout l'icone PutIconFromFile = (Shell_NotifyIcon(NIM_MODIFY, gNID) <> 0) End If On Error GoTo 0 Exit Function Gestion_Erreurs: MsgBox "Error " & Err.Number & " (" & Err.Description & ") dans la fonction PutIconFromFile du module Form_FrmSysTray" PutIconFromFile = False End Function '--------------------------------------------------------------------------------------- ' Modification de l'icone à partir d'une icone dans un package ' pPackage = cadre OLE indépendant ' pIconNumber = numéro de l'icone (un fichier pouvant contenir plusieurs icones) '--------------------------------------------------------------------------------------- Public Function PutIconFromPackage(pPackage As Access.ObjectFrame, Optional ByVal pIconNumber As Long = 1) As Boolean ' Adapté de http://support.microsoft.com/kb/147727/fr Dim lhIcon As Long Dim lData() As Byte Dim lHeader As OBJECTHEADER Dim lOleHeader As OLEHEADER Dim lBuffer() As Byte Dim lpos As Long Dim lLong As Long Dim lIcon() As Byte Dim lIconDir As ICONDIR Dim lIconDirEntry As ICONDIRENTRY On Error GoTo Gestion_Erreurs ' Extraction des données lData = pPackage.OleData ' Récupère l'en-tête lpos = LBound(lData) RtlMoveMemory lHeader, lData(lpos), Len(lHeader) ' Test si objet intégré If lHeader.ObjectType <> 2 Then Exit Function ' Test si package ReDim lBuffer(1 To 8) lpos = LBound(lData) + lHeader.ClassOffset RtlMoveMemory lBuffer(1), lData(lpos), 8 If StrConv(lBuffer, vbUnicode) <> "Package" & vbNullChar Then Exit Function ' En-tête OLE lpos = LBound(lData) + lHeader.HeaderSize RtlMoveMemory lOleHeader, lData(lpos), Len(lOleHeader) ' Taille du contenu lpos = LBound(lData) + lHeader.HeaderSize + 20 + lOleHeader.TypeLen RtlMoveMemory lLong, lData(lpos), 4 lpos = lpos + 4 ' on passe la taille ' Entier = 2 (taille 2) lpos = lpos + 2 ' Nom du fichier Do Until lData(lpos) = 0 lpos = lpos + 1 Loop lpos = lpos + 1 ' on passe le chr(0) ' Chemin complet du fichier Do Until lData(lpos) = 0 lpos = lpos + 1 Loop lpos = lpos + 1 ' on passe le chr(0) ' Long = 3 (taille 4) lpos = lpos + 4 ' Taille du chemin qui suit RtlMoveMemory lLong, lData(lpos), 4 lpos = lpos + 4 + lLong ' On passe le chemin du fichier ' Taille du fichier RtlMoveMemory lLong, lData(lpos), 4 ' Buffer pour contenir le fichier ReDim lBuffer(1 To lLong) lpos = lpos + 4 RtlMoveMemory lBuffer(1), lData(lpos), lLong ' En-tête de l'icone RtlMoveMemory lIconDir, lBuffer(1), Len(lIconDir) If pIconNumber > lIconDir.idCount Then pIconNumber = lIconDir.idCount RtlMoveMemory lIconDirEntry, lBuffer(1 + Len(lIconDir) + Len(lIconDirEntry) * (pIconNumber - 1)), Len(lIconDirEntry) ' Test si icone If lIconDir.idType <> 1 Then Exit Function ' Données de l'icone ReDim lIcon(1 To lIconDirEntry.dwBytesInRes) RtlMoveMemory lIcon(1), lBuffer(1 + lIconDirEntry.dwImageOffset), lIconDirEntry.dwBytesInRes ' Création de l'icone en mémoire lhIcon = CreateIconFromResourceEx(lIcon(1), lIconDirEntry.dwBytesInRes, 1, &H30000, lIconDirEntry.bWidth, lIconDirEntry.bHeight, 0) ' Si icone créée avec succès If lhIcon <> 0 Then ' Supprime l'ancienne icone If gNID.hIcon <> 0 Then DestroyIcon gNID.hIcon ' Rempli la structure pour l'API With gNID ' NIF_ICON pour affichage icone .uFlags = NIF_ICON .hIcon = lhIcon End With ' Modifie l'icone PutIconFromPackage = (Shell_NotifyIcon(NIM_MODIFY, gNID) <> 0) End If On Error GoTo 0 Exit Function Gestion_Erreurs: MsgBox "Error " & Err.Number & " (" & Err.Description & ") dans la fonction PutIconFromPackage du module Form_FrmSysTray" PutIconFromPackage = False End Function '--------------------------------------------------------------------------------------- ' Affichage d'une info-bulle ballon ' pTimeOut en secondes entre 10 et 30 ' Suelement à partir de win2000 '--------------------------------------------------------------------------------------- Public Function DisplayBallon(pText As String, Optional pTitle As String = "", Optional pTimeOut As Long = 10, Optional pIcon As ESysTrayIcon) As Boolean On Error GoTo Gestion_Erreurs ' Rempli la structure pour l'API With gNID ' NIF_INFO pour affichage ballon .uFlags = NIF_INFO .szInfo = pText & vbNullChar .szInfoTitle = pTitle & vbNullChar .uTimeoutAnduVersion = pTimeOut * 1000 .dwInfoFlags = pIcon End With ' Ajout l'icone Call Shell_NotifyIcon(NIM_MODIFY, gNID) On Error GoTo 0 Exit Function Gestion_Erreurs: MsgBox "Error " & Err.Number & " (" & Err.Description & ") dans la propriété SysTrayTipText du module Form_FrmSysTray" End Function '--------------------------------------------------------------------------------------- ' Affichage de l'icone '--------------------------------------------------------------------------------------- Public Function DisplaySysTray() As Boolean On Error GoTo Gestion_Erreurs ' Rempli la structure pour l'API With gNID .cbSize = gStructSize .hWnd = Me.hWnd .uID = vbNull ' NIF_ICON pour affichage icone ' NIF_TIP pour affichage tooltip ' NIF_MESSAGE pour callback .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE ' Les messages du systray seront renvoyés vers le formulaire dans ' l'évenement "souris déplacée" .uCallbackMessage = WM_MOUSEMOVE ' Le texte doit contenir un caractère nul If .szTip = "" Then .szTip = vbNullChar End With ' Ajout l'icone DisplaySysTray = (Shell_NotifyIcon(NIM_ADD, gNID) <> 0) On Error GoTo 0 Exit Function Gestion_Erreurs: MsgBox "Error " & Err.Number & " (" & Err.Description & ") dans la fonction DisplaySysTray du module Form_FrmSysTray" DisplaySysTray = False End Function '--------------------------------------------------------------------------------------- ' Supprime l'icone '--------------------------------------------------------------------------------------- Public Function HideSysTray() As Boolean On Error GoTo Gestion_Erreurs ' Supprime l'ancienne icone If gNID.hIcon <> 0 Then DestroyIcon gNID.hIcon ' Supprime l'icone de la barre HideSysTray = (Shell_NotifyIcon(NIM_DELETE, gNID) <> 0) On Error GoTo 0 Exit Function Gestion_Erreurs: MsgBox "Error " & Err.Number & " (" & Err.Description & ") dans la fonction HideSysTray du module Form_FrmSysTray" HideSysTray = False End Function '--------------------------------------------------------------------------------------- ' Affiche le menu dans le systray '--------------------------------------------------------------------------------------- Private Function PopupMenu(pMenuItems() As String) As Long Dim lResult As Long, lhMenu As Long, lPt As PointAPI Dim lCpt As Integer On Error GoTo Gestion_Erreurs 'Creer le menu contextuel lhMenu = CreatePopupMenu() 'Creer les items du menu contextuel For lCpt = LBound(pMenuItems) To UBound(pMenuItems) AppendMenu lhMenu, MF_STRING Or IIf(pMenuItems(lCpt) = "", MF_SEPARATOR, 0), 1 + lCpt - LBound(pMenuItems), pMenuItems(lCpt) Next 'Récupere l'emplacement de la souris GetCursorPos lPt 'Affiche le menu à l'emplacement de la souris 'Et récupere la valeur de l'item cliqué lResult = TrackPopupMenuEx(lhMenu, TPM_LEFTALIGN Or TPM_RETURNCMD _ Or TPM_RIGHTBUTTON, lPt.X, lPt.Y, GetParent(gNID.hWnd), ByVal 0&) 'Supprime le menu DestroyMenu lhMenu 'Renvoi le resultat PopupMenu = lResult On Error GoTo 0 Exit Function Gestion_Erreurs: MsgBox "Error " & Err.Number & " (" & Err.Description & ") dans la fonction PopupMenu du module Form_FrmSysTray" PopupMenu = 0 End Function '--------------------------------------------------------------------------------------- ' Fermeture du formulaire '--------------------------------------------------------------------------------------- Private Sub Form_Close() HideSysTray End Sub '--------------------------------------------------------------------------------------- ' Initialisation du formulaire '--------------------------------------------------------------------------------------- Private Sub Form_Open(Cancel As Integer) ' Taille de la structure NOTIFYICONDATA en focntion de la version If GetDllVersion("shell32.dll") >= 5 Then gStructSize = NOTIFYICONDATA_V2_SIZE Else gStructSize = NOTIFYICONDATA_V1_SIZE End If ' Affiche l'icone dans le systray DisplaySysTray End Sub '--------------------------------------------------------------------------------------- ' Conversion Twips -> Pixels '--------------------------------------------------------------------------------------- Private Function ConvertTwipsToPixels(pTwips As Long) Dim lPtsPerPixel As Single Dim lhdc As Long lhdc = GetDC(Me.hWnd) lPtsPerPixel = 1440 / GetDeviceCaps(lhdc, LOGPIXELSX) ReleaseDC 0, lhdc ConvertTwipsToPixels = pTwips \ lPtsPerPixel End Function '--------------------------------------------------------------------------------------- ' Affiche la fenêtre Access '--------------------------------------------------------------------------------------- Public Sub ShowAccessWindow() ShowWindow Application.hWndAccessApp, SW_SHOWNA End Sub '--------------------------------------------------------------------------------------- ' Masque la fenêtre Access '--------------------------------------------------------------------------------------- Public Sub HideAccessWindow() ShowWindow Application.hWndAccessApp, SW_HIDE End Sub '--------------------------------------------------------------------------------------- ' Affiche formulaire dans barre des tâches '--------------------------------------------------------------------------------------- Public Sub ShowFormInTaskBar(pForm As Access.Form) Dim lStyle As Long lStyle = GetWindowLong(pForm.hWnd, GWL_EXSTYLE) Call SetWindowLong(pForm.hWnd, GWL_EXSTYLE, lStyle Or WS_EX_APPWINDOW) End Sub '--------------------------------------------------------------------------------------- ' Masque formulaire dans barre des tâches '--------------------------------------------------------------------------------------- Public Sub HideFormInTaskBar(pForm As Access.Form) Dim lStyle As Long lStyle = GetWindowLong(pForm.hWnd, GWL_EXSTYLE) Call SetWindowLong(pForm.hWnd, GWL_EXSTYLE, lStyle Xor WS_EX_APPWINDOW) End Sub '--------------------------------------------------------------------------------------- ' Evenement sur icone du systray '--------------------------------------------------------------------------------------- Private Sub Détail_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim lMsg As Long On Error GoTo Gestion_Erreurs ' Conversion de points/twips vers pixels pour retrouver le numéro du message d'origine lMsg = ConvertTwipsToPixels(X + Me.CurrentSectionLeft) - 1 Select Case lMsg Case WM_MOUSEMOVE ' Déplacement souris Case WM_LBUTTONDOWN ' Bouton gauche appuyé Case WM_LBUTTONUP ' Bouton gauche relâché Case WM_LBUTTONDBLCLK ' Double click gauche Case WM_RBUTTONDOWN ' Bouton droit appuyé Case WM_RBUTTONUP ' Bouton droit relâché Case WM_RBUTTONDBLCLK ' Double click droit Case WM_MBUTTONDOWN ' Bouton milieu appuyé Case WM_MBUTTONUP ' Bouton milieu relâché Case WM_MBUTTONDBLCLK ' Double click milieu Case NIN_BALLOONTIMEOUT ' Time out de l'info-bulle ballon Case NIN_BALLOONUSERCLICK ' Click sur info-bulle ballon End Select On Error GoTo 0 Exit Sub Gestion_Erreurs: MsgBox "Error " & Err.Number & " (" & Err.Description & ") dans la procédure Détail_MouseMove du module Form_FrmSysTray" End Sub Ouvrez ce formulaire caché pour afficher l'icône dans le systray : Code :
DoCmd.OpenForm "FrmSysTray", acNormal, , , , acHidden Fermez ce formulaire pour la supprimer : Code :
DoCmd.Close acForm, "FrmSysTray" Dans la procédure Détail_MouseMove du formulaire FrmSysTray, insérez votre code dans les différents Case WM_.... en fonction du message ciblé. Petites fonctions utiles : - Pour masquer la fenêtre principale (ne laisser que les formulaires visibles, s'ils sont les propriétés indépendant et modal) : Code :
Form_FrmSysTray.HideAccessWindow
Code :
Form_FrmSysTray.HideAccessWindow
Code :
Form_FrmSysTray.ShowFormInTaskBar Me Code :
Form_FrmSysTray.ShowFormInTaskBar Forms("NomDuFormulaire") Code :
FrmSysTray.SysTrayTipText = "Mon texte d'information" Code :
FrmSysTray.PutIconDefault
Code :
FrmSysTray.PutIconFromFile "c:\le chemin\lefichier.ico" Coller l'icone sur le formulaire FrmSysTray => ça créé un objet package sur le formulaire (CadreOLEIndépendant) Code :
FrmSysTray.PutIconFromPackage FrmSysTray.CadreOLEIndépendant Code :
Form_FrmSysTray.DisplayBallon "Texte à afficher", "Le Titre", 10, SystrayError Or SystrayNoSound Dans Détail_MouseMove, on peut réagir sur click sur l'info-bulle ou sur time-out. Un exemple pour finir : Remarque : l'exemple n'intégre pas encore l'info-bulle ballon. ftp://ftp-developpez.com/arkham46/fi...essSysTray.zip Mirroir HTTP Lorsqu'on ouvre cette base de données, seul le formulaire d'accueil est visible (il est indépendant et modal). La fenêtre de l'application avec les fonds gris et les menus est masquée. On peut la réafficher en double-cliquant sur l'icône de la zone de notification ou avec le menu (utilise la fonction PopupMenu du formulaire) de cette icône (il faut cliquer sur l'icône restaurer du formulaire pour voir la fenêtre en dessous car formulaire indépendant modal bien sûr). L'icone change en fonction du formulaire affiché.
__________________
------------------------------------------------------------------------------------------------------------------------------------------- ![]() [Office] Défi n°1 : Créer un jeu de puissance 4[ACCESS][EXCEL] clGdiPlus est un module de classe VBA pour faciliter l'utilisation de la librairie graphique gdiplus.dll (GDI+) |
|
|
|
|
|
#3 (permalink) | |
![]() Date d'inscription: septembre 2003
Messages: 2 562
|
Citation:
![]() D'où souhaites-tu récupérer l'icône? Je pensais récupérer l'icône à partir du contenu d'un contrôle image access mais ce sera pour un peu plus tard parce que c'est pas facile. Pour l'instant le plus simple que j'ai trouvé c'est de prendre l'icône associée au fichier. C'est un minimum, j'essayerai de faire mieux plus tard.
__________________
------------------------------------------------------------------------------------------------------------------------------------------- ![]() [Office] Défi n°1 : Créer un jeu de puissance 4[ACCESS][EXCEL] clGdiPlus est un module de classe VBA pour faciliter l'utilisation de la librairie graphique gdiplus.dll (GDI+) |
|
|
|
|