IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

[Source] Afficher une icone dans la zone de notification (systray)


Sujet :

Contribuez

  1. #41
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Tes déclarations n'étaient pas correctes, ça ne faisait pas tout le boulot et ne passait peut être pas là où ça plante maintenant.

    Dans le Form_Open, il faudrait commenter tous les appels :
    Form_FrmSysTray.HideAccessWindow
    Form_FrmSysTray.PutIconFromFile
    Form_FrmSysTray.ShowFormInTaskBar
    Form_FrmSysTray.SysTrayTipText
    Form_FrmSysTray.DisplayBallon

    Voir si ça plante toujours.
    Si non, les réactiver un à un pour voir lequel fait planter.
    Si oui, essayer en commentant la ligne .uCallbackMessage = WM_MOUSEMOVE dans la fonction DisplaySysTray pour voir s'il n'y a pas un problème avec l'appel du callback.
    Si ça plante malgré tout, ajouter un MsgBox dans la fonction GetDllVersion :
    MsgBox GetDllVersion juste avant le On Error GoTo 0.
    Cela me permettra de voir qu'elle est la version du shell32.dll car le comportement est différent entre les différentes versions de cette librairie.

    Si tu peux m'envoyer la base allégée de ses données, je peux sans doute regarder ce soir sur mon PC (win 10, office 2013 64bits, ce n'est pas très loin de ta config).

    Je ne pense pas qu'il manque grand chose, mais c'est difficile à déboguer.

  2. #42
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 970
    Points : 1 162
    Points
    1 162
    Par défaut Afficher une icone dans la zone de notification (systray)
    Finalement, en mettant des "Stop" successifs dans mon code et en particulier ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    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
        Stop
        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
    J'ai fini par intuiter que la méthode d'appel de "Shell_NotifyIcon" me semblait être la coupable:

    Si je mets la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'Call Shell_NotifyIcon(NIM_MODIFY, gNID)
    en REM, pas de plantage, mais, bien sûr pas de systray actif.

    Se pourrait-il que le remplissage de la structure gNID contienne des données invalides?

  3. #43
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Je ne vois pas vraiment où serait l'erreur.

    Est-ce que l'exemple joint plante chez toi ?
    Fichiers attachés Fichiers attachés

  4. #44
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 970
    Points : 1 162
    Points
    1 162
    Par défaut Afficher une icone dans la zone de notification (systray)
    Etonnant: ton appli systray.mdb a l'air de fonctionner chez moi:

    Le ballon s'affiche, le systray aussi, clic sur le ballon donne un msgbox("test ballon"), clic droit dans le systray sur l'icone ne donne rien mais c'est normal.

    J'ai cependant eu une fois ou deux la boîte de dialogue "dépassement de capacité" en cliquant sur le chevron pour faire apparaître le systray, mais c'est pas systématique .

    Nom : error2.png
Affichages : 253
Taille : 119,0 Ko

    Est-ce que les valeurs de lMsg sont en cause dans le MouseMove sous W10/64-Acc2016 (&H200) ?

  5. #45
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Tu peux essayer d'ajouter X et Y dans le MsgBox d'erreur du mousemove :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox "Error " & Err.Number & " (" & Err.Description & ") : X = " & X & " : Y= " & Y & " dans la procédure Détail_MouseMove du module Form_FrmSysTray"
    En fait le SysTray envoie un numéro de message modifié par Access, que je remodifie à mon tour pour retrouver le message d'origine.
    Possible que le dépassement de capacité viennent de là si Access 2016 fonctionne différemment.
    Le click gauche fonctionne ? Il devrait juste afficher une MsgBox.

  6. #46
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 970
    Points : 1 162
    Points
    1 162
    Par défaut Afficher une icone dans la zone de notification (systray)
    Alors pour le message, çà donne avec systray.mdb en plein écran:
    Nom : error3.png
Affichages : 228
Taille : 2,9 Ko

    Après avoir réduit la fenêtre access, çà donne:

    Nom : error4.png
Affichages : 262
Taille : 343,1 Ko

    Je précise que je bosse sur deux écrans et qu'access est affiché ici dans l'écran de droite déclaré comme "affichage principal".

    La valeur négative et exponentielle de Y me paraît suspecte.

    Note: le message intervient lorsque je clique gauche pour faire apparaître le systray. Une fois qu'il est apparu le clic droit fonctionne ainsi que le gauche
    Nom : error5.png
Affichages : 251
Taille : 18,1 Ko

  7. #47
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Ce message de dépassement de capacité ne semble pas le plus gros problème dans la mesure où les événements attendus sont bien détecté.
    Il suffira de capturer et ignorer l'erreur pour les cas où on reçoit un message "inattendu" (ou non compris )

    Ce qui est plus embêtant c'est le plantage mais, avec les informations que j'ai, je sèche...

  8. #48
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 970
    Points : 1 162
    Points
    1 162
    Par défaut Afficher une icone dans la zone de notification (systray)
    Bin, en fait avec ta dernière modif, je n'ai plus le plantage (je crois): il ne reste que le message systray... après ... "capturer et ignorer l'erreur" , je ne vois pas trop comment.

    Cela dit je suis loin d'être un spécialiste des API et encore moins versé dans les constantes déclarées. Je crois que la déclaration conditionnelle semble la solution avec des valeurs Hexa en accord avec le système. Me trompe-je ?

    Je viens de me rendre compte que j'avais loupé un de tes messages où tu me demandais une version expurgée de l'appli, chose que je ne peux pas faire dans la mesure où j'interviens moi-même pour le compte d'un développeur qui distribue sa propre appli. Il s'agit d'un intégré de gestion complexe avec plein de modules interdépendants qui a 18 ans d'âge et qui a "évolué" avec le temps: aujourd'hui, je suis en charge de lui apporter un coup de jeune (graphique + compatibilité 64 bits) et je suis un peu soulagé puisqu'il me dit que le systray n'est pas si portant après tout.

    De mon côté je sens qu'on n'est pas loin du but et puis je ne suis pas du genre à baisser les bras trop vite. Et après tout, j'aimerais vraiment trouver cette solution que je sens à portée.

    En tous cas, merci encore, Thierry, de ton intérêt et de tes conseils judicieux.

  9. #49
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Citation Envoyé par Ric500 Voir le message
    Cela dit je suis loin d'être un spécialiste des API et encore moins versé dans les constantes déclarées. Je crois que la déclaration conditionnelle semble la solution avec des valeurs Hexa en accord avec le système. Me trompe-je ?
    Oui je pense que tu te trompes.

    En fait le principe du callback est le suivant :
    A la création de l'icône dans le systray, on lui dit qu'on souhaite recevoir les événements sur le formulaire et sur l'événement souris déplacée (WM_MOUSEMOVE).
    J'ai choisi cet événement parce qu'on n'a pas trop le choix de toute façon…
    Donc quand le systray envoie un événement, il l'envoie sur le formulaire en passant en argument le code de l'événement.
    Mais comme Access croit recevoir un mouvement de souris, il fait une conversion de ce qu'il reçoit en coordonnées sur le formulaire dans l'unité d'Access ; c'est ce qu'il passe en argument X.
    C'est pour ça que je fais un calcul de conversion de twips en pixel, et que je retire la coordonnée gauche de la section ; c'est pour retrouver le message d'origine.
    Access 2016 se comporte peut-être différemment, ou alors le Windows n'est pas tout à fait le même.

    En tout ca je ne vois pas bien d'où vient le dépassement de capacité avec les valeurs que tu donnes.

    En remplaçant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        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
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        On Error Resume Next
        ' Conversion de points/twips vers pixels pour retrouver le numéro du message d'origine
        lMsg = ConvertTwipsToPixels(X + Me.CurrentSectionLeft) - 1
        On Error GoTo Gestion_Erreurs
    On ignore l'erreur pour les cas qui ne fonctionnent pas (si ça vient bien de là).
    Ce n'est pas terrible mais je n'ai pas mieux sans cibler plus l'erreur.

  10. #50
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 970
    Points : 1 162
    Points
    1 162
    Par défaut Afficher une icone dans la zone de notification (systray)
    Je travaille dans une VM VirtualBox, penses-tu que çà pourrait avoir une influence? (tout est clean rien de pompé, licences ok etc)

    Jusqu'ici et dans toutes mes VM, je n'avais pas constaté de différence avec un système hôte.

    Si j'osais je te proposerais bien de prendre le contrôle de ma machine à distance (TeamViewer, si çà te va). A ce stade je ne sais pas si tu es comme moi, mais je ressens le besoin de savoir.

    Maintenant je comprendrais parfaitement que tu aies autre chose à faire.

    Je veux bien retranscrire le code de systray.mdb dans mon appli, mais dans la mesure où systray.mdb présente déjà l'erreur...

  11. #51
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Non la VM ne doit pas avoir d'impact.

    Pour le contrôle à distance je n'aurai sans doute pas le temps ce WE. Aujourd'hui j'avais un peu de temps mais ça ne va pas durer forcément…
    Peut-être lundi ou mardi matin… à voir.

    Mais oui j'aimerais bien comprendre pour fiabiliser ce code.

    Sinon si tu peux faire les actions que je citais dans ce message ça pourrait m'aider (peut-être) :
    https://www.developpez.net/forums/d5.../#post11289833

  12. #52
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 970
    Points : 1 162
    Points
    1 162
    Par défaut Afficher une icone dans la zone de notification (systray)
    Dans le Form_Open, il faudrait commenter tous les appels :
    Form_FrmSysTray.HideAccessWindow
    Form_FrmSysTray.PutIconFromFile
    Form_FrmSysTray.ShowFormInTaskBar
    Form_FrmSysTray.SysTrayTipText
    Form_FrmSysTray.DisplayBallon
    C'est ce que j'ai fait ligne par ligne jusquà DisplayBallon dans laquelle j'ai continué jusqu'à "Shell_NotifyIcon (NIM_MODIFY, gNID)" c'est pour çà que je t'ai parlé des paramètres passés notamment la structure gNID.

    Peut-être lundi ou mardi matin… à voir.
    C'est plus que je n'espérais, merci encore, tu peux me PM à l'heure qui te conviendra, je bosse de chez moi.


    Si oui, essayer en commentant la ligne .uCallbackMessage = WM_MOUSEMOVE dans la fonction DisplaySysTray pour voir s'il n'y a pas un problème avec l'appel du callback.
    Si ça plante malgré tout, ajouter un MsgBox dans la fonction GetDllVersion :
    MsgBox GetDllVersion juste avant le On Error GoTo 0.
    Je ferai çà dès demain matin (après le passage du plombier: çà fuit chez moi ) et te ferai un retour dans la foulée.

    Bon Weekend

  13. #53
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Citation Envoyé par Ric500 Voir le message
    C'est ce que j'ai fait ligne par ligne jusquà DisplayBallon dans laquelle j'ai continué jusqu'à "Shell_NotifyIcon (NIM_MODIFY, gNID)" c'est pour çà que je t'ai parlé des paramètres passés notamment la structure gNID.
    OK, donc si je comprends bien, sans le tooltip, pas de plantage, mais le systray fonctionne bien ?
    Pourtant le tooltip de ma version s'affiche bien ?

    Citation Envoyé par Ric500 Voir le message
    Je ferai çà dès demain matin (après le passage du plombier: çà fuit chez moi ) et te ferai un retour dans la foulée.
    Moi aussi mais j'ai mis une gamelle sous la fuite.

  14. #54
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 970
    Points : 1 162
    Points
    1 162
    Par défaut Afficher une icone dans la zone de notification (systray)




    Bonne soirée.

  15. #55
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 970
    Points : 1 162
    Points
    1 162
    Par défaut Afficher une icone dans la zone de notification (systray)
    Bonjour Thierry,

    Comme je te l'ai dit hier j'ai appliqué les tests que tu m'as recommandés:

    essayer en commentant la ligne .uCallbackMessage = WM_MOUSEMOVE dans la fonction DisplaySysTray pour voir s'il n'y a pas un problème avec l'appel du callback
    -> pas de plantage, l'infobulle s'affiche bien, l'icone est bien placée dans le systray, mais, bien sûr, elle ne répond à aucun événement (si ce n'est qu'elle se sélectionne sur survol)

    Avec le:

    MsgBox GetDllVersion juste avant le On Error GoTo 0
    J'obtiens la valeur 10.
    ______________________________________________________________________________________________________________________________________________

    Après j'ai pensé également que, dans les déclarations (et comme çà porte sur Shell32.dll), j'avais ajouté celle de ShellExecute comme ceci, peut-être l'erreur vient-elle de là?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
            (ByVal hwnd As LongPtr, ByVal lpOperation As String, ByVal lpFile As String, _
            ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPtr
    (Comme c'est un menu, je m'en sers pour lancer les applis de l'intégré de gestion)

    Sur ce, je te souhaite un bon weekend, et à lundi ou mardi, comme çà t'arrange.

  16. #56
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Je suis en version 6 de shell32. Connais pas la version 10.
    Alors on pourrait essayer de forcer le comportement version 200 (qui est celui attendu par ma procédure de réception des événements) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    '---------------------------------------------------------------------------------------
    ' 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
            ' Version
            .uTimeoutAnduVersion = &H3
        End With
        ' Ajout l'icone
        DisplaySysTray = (Shell_NotifyIcon(NIM_ADD, gNID) <> 0)
        ' Définit la Version de shell32 à utiliser pour les messages notamment (cf. uTimeoutAnduVersion)
        Call Shell_NotifyIcon(&H4, nID)
        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

  17. #57
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 970
    Points : 1 162
    Points
    1 162
    Par défaut Afficher une icone dans la zone de notification (systray)
    Bonjour Thierry,

    J'ai essayé d'insérer la nouvelle procédure DisplaySysTray ce matin.

    Il subsiste un petit souci de compilation:

    Nom : error6.png
Affichages : 254
Taille : 35,2 Ko

    Je pense pas que ce soit la mer à boire, mais comme mes souvenirs en hexa remontent à trente ans en arrière...

  18. #58
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    C'est gNID au lieu de nID

  19. #59
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 970
    Points : 1 162
    Points
    1 162
    Par défaut Afficher une icone dans la zone de notification (systray)
    Je ne comprends pas cette erreur qui persiste:

    Je lance FrmSysTray depuis la procédure Open de mon formulaire de départ (F_Menu):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        '''Masquage de la fenêtre access
        DoCmd.OpenForm "FrmSystray", , , , , acHidden
        Form_FrmSysTray.HideAccessWindow
    Quelques lignes plus loin, je m'occupe du SysTray:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        ' Place l'icone du menu dans le systray
        Form_FrmSysTray.PutIconFromFile CurrentProject.Path & "\BT.ico"
        Form_FrmSysTray.ShowFormInTaskBar Forms("F_Menu")
        Form_FrmSysTray.SysTrayTipText = "Afficher le menu BT SYSTEM"
        Form_FrmSysTray.DisplayBallon "Afficher le menu BT SYSTEM", "BT SYSTEM", 10, SystrayError Or SystrayNoSound
        RestaurerFenetre (Me.hwnd)
    Jusque là, pas d'erreur ou de plantage en pas à pas (sur lancement normal, çà s'affiche normalement (menu et systray), puis quelques secondes après tout disparaît.

    Toujours en mode pas à pas ma procédure Form_Open se termine normalement , c'est lorsque je survole l'icone du systray que j'ai le message "dépassement de capacité". Ne serait-il pas possible de l'intercepter dans le MouseMove ?

  20. #60
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 970
    Points : 1 162
    Points
    1 162
    Par défaut Afficher une icone dans la zone de notification (systray)
    A tout hasard, j'ai essayé d'augmenter la capacité de X, Y dans le mouseMove en les passant en double: évidemment, çà compile pas

    Ensuite, je me suis penché sur l'expression:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lMsg = ConvertTwipsToPixels(X + Me.CurrentSectionLeft) - 1
    J'ai mis un debug.print comme çà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        ' Conversion de points/twips vers pixels pour retrouver le numéro du message d'origine
        Debug.Print ConvertTwipsToPixels(X + Me.CurrentSectionLeft) - 1
        lMsg = ConvertTwipsToPixels(X + Me.CurrentSectionLeft) - 1

    Et j'obtiens dans la fenêtre d'exécution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     512 
     512 
     512 
     512 
     516 
     512 
     512 
     517 
     123 
     512
    Le plus drôle: c'est que là le systray est OPERATIONNEL !!!

    Les valeurs 516 et 517 sont-elles attendues/normales?

    NOTE: Par contre, si je lance l'appli en conservant ce debug.print par double-clic sur l'accdb, je retrouve le plantage (et le dépassement de capacité?)

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/10/2010, 21h00
  2. Afficher une icone dans l'onglet
    Par TaleMaker dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 21/09/2009, 13h39
  3. afficher une icon dans jtextpan
    Par tarekphp dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 06/05/2008, 12h33
  4. Icone dans la zone de notification
    Par LesLemmings dans le forum Visual C++
    Réponses: 16
    Dernier message: 17/04/2007, 16h10
  5. Afficher une icone dans DBgrid
    Par boyerf dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/02/2004, 15h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo