Plusieurs IconeTray

Résolu
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 - 6 nov. 2004 à 22:03
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 - 7 nov. 2004 à 01:55
Salut, bien je voudrais que mon soft affiche plusieurs icones dans le systray seulement voilà lorsque je vais pour les affichés rien ne se passe, mon icone principale est déjà affichée.

Voici le code :
Private Type IconeTray
    cbSize As Long 'Taille de l'icône (en octets)
    hWnd As Long 'Handle de la fenêtre chargée de recevoir les messages envoyés lors des évènements sur l'icône (clics, doubles-clics...)
    uID As Long 'Identificateur de l'icône
    uFlags As Long
    uCallbackMessage As Long 'Messages à renvoyer
    hIcon As Long 'Handle de l'icône
    szTip As String * 64 'Texte à mettre dans la bulle d'aide
End Type

Dim IconeT As IconeTray
Dim I(1 To 46) As IconeTray

'Constantes nécessaires
Private Const AJOUT = &H0
Private Const MODIF = &H1
Private Const SUPPRIME = &H2
Private Const MOUSEMOVE = &H200
Private Const MESSAGE = &H1
Private Const Icone = &H2
Private Const TIP = &H4
Private Const DOUBLE_CLICK_GAUCHE = &H203
Private Const BOUTON_GAUCHE_POUSSE = &H201
Private Const BOUTON_GAUCHE_LEVE = &H202
Private Const DOUBLE_CLICK_DROIT = &H206
Private Const BOUTON_DROIT_POUSSE = &H204
Private Const BOUTON_DROIT_LEVE = &H205

'API nécessaire
Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As IconeTray) As Boolean


Private Sub Form_Load()
    'Préparation de la variable IconeT
    IconeT.cbSize = Len(IconeT) 'Taille de l'icône en octet
    IconeT.hWnd = Me.hWnd 'Handle de l'application (pour qu'elle reçoive les messages envoyés lors d'un clic, double-clic...
    IconeT.uID = 1& 'Identificateur de l'icône
    IconeT.uFlags = Icone Or TIP Or MESSAGE
    IconeT.uCallbackMessage = MOUSEMOVE 'Renvoyer les messages concernant l'action de la souris
    IconeT.hIcon = Me.Icon 'Mettre en icône l'image qui est dans le contrôle "Image1"
    IconeT.szTip = "Horloge Floue" & Chr$(0) 'Texte de la bulle d'aide

    'Appel de la fonction pour mettre l'icône dans le système tray
    Shell_NotifyIcon AJOUT, IconeT

    'Création des icones texte
    sLetter = "a1"
    For ii = 1 To 46
        I(ii).cbSize = Len(I(ii)) 'Taille de l'icône en octet
        I(ii).hWnd = Me.hWnd 'Handle de l'application (pour qu'elle reçoive les messages envoyés lors d'un clic, double-clic...
        I(ii).uID = 1& 'Identificateur de l'icône
        I(ii).uFlags = Icone Or TIP Or MESSAGE
        I(ii).uCallbackMessage = MOUSEMOVE 'Renvoyer les messages concernant l'action de la souris
        I(ii).hIcon = LoadPicture("Caractères\Minuscule" & sLetter & ".ico") 'Mettre en icône l'image qui est dans le contrôle "Image1"
        I(ii).szTip = "Horloge Floue" & Chr$(0) 'Texte de la bulle d'aide
    Next ii
    ii = 0
    For ii = 46 To 1
        Shell_NotifyIcon AJOUT, I(ii)
    Next ii
End Sub


Merci d'avance

Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]

16 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
7 nov. 2004 à 00:32
j'ai trouvé une classe, c'est pas terrible mais c'est un exemple.

http://www.vbfrance.com/code.aspx?ID=5373

en plus il y a des erreurs !...

Dim m_icones() As New SysTray

ReDim m_icones(45)

Call m_icones(0).CreateIcon(Form1, "titre 1")
Call m_icones(1).CreateIcon(Form1, "titre 2")
etc...

Daniel
3
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
7 nov. 2004 à 01:05
Bon j'y suis arrivé, seul pb c'est que 46 icones ça prend vachement de la place !!! Mince
Merci quand même

pour faire varier j'ai mis ceci :

If i = 1 Then
            m_icones(i).uId = 1&
        Else
            m_icones(i).uId = (m_icones(i - 1).uId) + 1& 'Identificateur de l'icône
        End If


Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]
3
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
6 nov. 2004 à 23:36
si tu veux plusieurs icones, il faut plusieurs formes.
ce qui t'oblige à avoir 46 formes.
le principe c'est de les dupliquer et d'arriver à passer les paramètres.

Daniel
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
6 nov. 2004 à 23:38
c'est bien ce que j'avais peur.
Mince !

Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
6 nov. 2004 à 23:58
La meilleure solution c'est de faire une classe.

Dim i As Integer
Dim m_icones() As IconesSystray

ReDim m_icones(1 to 46)
For i = 1 To 46
Set m_icones(i) = New IconesSystray
m_icones(i).Show
Next
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
7 nov. 2004 à 00:16
Je viens d'essayer mais ça bloque au niveau de :

Set m_icones(i) = New IconeTray

Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
7 nov. 2004 à 00:34
y'a un truc que je pige pas, une classe c'est quoi un fichier, une dll ?

Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
7 nov. 2004 à 00:37
Si jamais je fait un contrôle activeX pour créer une iconetray, tu pense que je pourrais mettre 46 fois ce control et avoir 46 icones ?

Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
7 nov. 2004 à 00:44
heu oui, mais ça t'obligerait à le mettre 46 fois, à moins de le dupliquer

Une classe c'est fait pour ça, c'est comme une collection d'objets avec des propriétés identiques.
essayes avec l'exemple que je t'ai montré , il suffit de faire ajouter module de classe.

Daniel
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
7 nov. 2004 à 00:52
J'ai essayé mais je n'en ai toujours qu'une.

Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
7 nov. 2004 à 00:58
est-il possible de jouer en faisant varier :

IconeT.uId = 1& 'Identificateur de l'icône

à quoi correspond le "1&" ?

Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
7 nov. 2004 à 00:59
Réponse : oui on peux jouer avec mais comment faire varier le 1& vers un 2& , etc... ?

Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
7 nov. 2004 à 01:10
ha ben bravo!

1& c'est un Long, donc c'est seulement un numéro

sinon j'avais trouvé ça:
IconeT.uId = Me.icon

mais ça marche pas !

Daniel
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
7 nov. 2004 à 01:14
Les icones doivent t'elle faire forcement 32x32 ? car mes icones font du 16x16 et rien ne s'affiche.

Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
7 nov. 2004 à 01:28
normalement c'est du 16x16 sur la barre des taches, (et du 32x32 sur le bureau).
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
7 nov. 2004 à 01:55
j'ai modifié un peu et tester avec des icones dans imagelist

Public Sub CreateIcon(frmgeneral As Form, title As String, hicon As Picture, num As Long)
try.cbSize = Len(try)
try.hwnd = frmgeneral.hwnd
try.uID = num
try.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
try.uCallbackMessage = WM_MOUSEMOVE
try.hicon = hicon
mytitre = titre
try.szTip = title & vbNullChar
Call Shell_NotifyIcon(NIM_ADD, try)
Call Shell_NotifyIcon(NIM_MODIFY, try)
End Sub

For i = 1 To 3
Call m_icones(i).CreateIcon(Form1, "titre " & i, ImageList1.ListImages(i).Picture, i)
Next
0
Rejoignez-nous