SYSTRAY + BALLOON EN UN SEUL CONTRÔLE UTILISATEUR

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 23 juil. 2009 à 13:37
vauzt Messages postés 1 Date d'inscription mercredi 23 juillet 2014 Statut Membre Dernière intervention 23 juillet 2014 - 23 juil. 2014 à 05:14
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50355-systray-balloon-en-un-seul-controle-utilisateur

vauzt Messages postés 1 Date d'inscription mercredi 23 juillet 2014 Statut Membre Dernière intervention 23 juillet 2014
23 juil. 2014 à 05:14
Bonjour à tous, je suis nouveau en VB, et d'essayer de voir le projet de mon ami. il se sert de ce systray.

J'ai un problème qui a besoin de votre orientation,

Mon code Entrez le "CallBackProc" et "CrashTimerProc()", et je vois que la valeur de lShellTrayHandle est 196644

de ce fait, après avoir terminé "CrashTimerProc()", "Follow" aura la valeur false, et mon code juste boucle encore et encore.

pouvez-vous me donner un guide comment résoudre ce problème?

Désolé pour mon mauvais français, je suis en utilisant Google translate :)
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
12 mars 2010 à 12:36
Bonjour,
en effet moi aussi j'ai été confronté au crash lors de la fermeture du programme contenant le Systray.
Le problème venait du fait que dans ma méthode quitter je faisait un gros "END" ^^

il faut faire un "Unload(Me)" et du coup on a plus le problème, le subclassing s'arrête proprement.

j'espère avoir résolue le problème de CLAIVAH

cordialement,
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
25 févr. 2010 à 16:01
lol PCPT, mes excuses (*)
Je ne voulais pas dire ça, disons plutôt "de compréhension difficile" ;-)

(*) PCPT est l'instigateur de cette technique dans cette source, ma solution initiale n'étant pas top (voir historiques)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
25 févr. 2010 à 15:33
a voir ce que contient ce rapport (voir journal des evenements applicatifs)
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
25 févr. 2010 à 15:29
truc tordu... beh merci ^^

pas non plus eu d'erreur quand j'avais testé, si çà passe sur tous les PC sauf 1, faut peut-être chercher la cause ailleurs...
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
25 févr. 2010 à 15:18
non, je ne pense pas.

gaffe au risque de DEP (Data Execution Protect) due a l'utilisation d'un tableau de Byte pour le subclassing, en lieu et place d'une zone avec droit d'acces en execution (merci Xp)
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
25 févr. 2010 à 15:13
Non, je n'ai rien constaté.
Je viens de recharger ce Zip, au cas où, puis lancé le VBP + Compilé, lancé et stoppé plusieurs fois sans aucun problème.
Il n'y a, dans ce projet, aucune référence / ActiveX particulière.
Il y a bien un appel à StopSubClassing dans le _Terminate du UserControl.
Le code de ce UserControl est strictement identique à celui que j'utilise dans mes programmes et avec lesquels je n'ai jamais eu de surprise.

Mince, d'où cela peut-il venir ?
Es-tu administrateur de ta session Windows ?
Because, l'utilisation de Mapping le nécessite peut-être - je vois pas trop pourquoi, mais c'est le seul 'truc' un peu tortueux qui a été couplé à cette gestion de SubClassing intégrée au UserControl.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
25 févr. 2010 à 14:15
une histoire de subclassing, je pense, de fuite ? a voir...
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
25 févr. 2010 à 13:19
salut
oui je parle du projet présent ici et oui aussi c'est lors de la fermeture
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
25 févr. 2010 à 13:03
Dans quelles circonstances ?
Lors de la fermeture du projet ?
Du projet présent ici ou de ton projet dans lequel tu as placé de UserControl ?
Moi aussi sous XP SP3, pas de souci.
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
25 févr. 2010 à 12:04
très bonne source
mais windows me renvoi des erreur de temps en temps je sais pas pourquoi : "erreur... envoyer / ne pas envoyer"
je suis sur xp sp3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
3 août 2009 à 23:57
Ok, je suis d'accord ... mais, si j'ai tout bien compris :
Enregister un message puis surveiller son apparition dans le SubClassing nécessite que le SubClassing fonctionne encore après le crash, ce qui n'est pas le cas dans cette utilisation puisque l'objet renvoyant les infos est la TaskBar et qu'elle est 'morte', donc le SubClassing qui va avec.
C'est pour cela que j'ai dû passer à cette méthode.
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
3 août 2009 à 23:31
@violent_ken : Oui, c'est tout à fait ça ...
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
3 août 2009 à 21:55
Salut,

pour le crash de l'explorer la meilleure solution est d'utiliser RegisterWindowMessage comme l'a dit PCPT.
D'ailleurs j'ai vu que sa déclaration est déjà présente dans le code ^^

Dim msgExplorerCrashed as long
msgExplorerCrashed = RegisterWindowMessage("TaskbarCreated")

puis on traite dans la winProc le message (si je me rappelle bien).

@+
Galactus13 Messages postés 335 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 16 août 2023 1
31 juil. 2009 à 03:53
En effet, un travail magnifique et de plus 100% compatible avec VB5 !
Sa en fait du code pour si peu de visuel qui reste impressionnant !
10/10 mais je sais pas le faire valider mon 10 !
cs_pluplu Messages postés 615 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 4 juillet 2012
27 juil. 2009 à 21:29
Encore une fois du bon travail
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
27 juil. 2009 à 15:29
cette dernière version semble bien plus stable

reste surtout un bug qui peut être corrigé : si l'explo plante et que les icônes sont animées, il n'y a plus d'animation lors de la re-création

beau boulot, encore bravo pour ta réactivité ;)
(je mets 9 :p)
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
26 juil. 2009 à 20:51
Voilà, une petite mise à jour pour corriger les trucs qui ne fonctionnaient pas correctement.
Merci pour vos commentaires
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
26 juil. 2009 à 11:33
J'avais oublié de noter : 10/10, évidemment.
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
26 juil. 2009 à 11:31
Excellent ...
cs_pluplu Messages postés 615 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 4 juillet 2012
26 juil. 2009 à 10:40
très bonne source Jack, j'approuve ton résonnement sur l'aspect plus transportable qu'un activex
encore merci!
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
24 juil. 2009 à 14:34
Merci Jack pour pour le lien mais j'avais moi même fait référence à EbArtSoft qui m'avait maché un bonne partie du travail ^^

Sinon ta source est une très bonne initiative, il en existe une ribambelle dans ce genre et si celle la arrive à marcher parfaitement, bravo. Je sais que j'ai *toujours* eu des problèmes avec les icones dans le systray, et j'ai testé beaucoup d'usercontrol différents.
Au passage je suis d'accord avec Renfield, un usercontrol, c'est pas toujours le mieux. Une DLL (ou module ou classe) sera peut être mieux.
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 juil. 2009 à 13:55
salut,

après un premier regard, très satisfaisant!
l'unicode à l'air de bien passer, commentaires abondants, les destructions propres
bien :p

quelques regrets :
*event ERREUR, le seul mot français, çà dépareille (bon c'est une broutille)

*le click sur la croix du tooltip provoque souvent un timeout au lieu d'un close, peut-être à cause du fonctionnement de BalloonTipClose, qui malheureusement est approprié). bug déjà vu sur plusieurs sources traitant des balloons

*il est possible de modifier le balloon, comme la personnalisation de la couleur de fond, image de fond, etc. pas évident à mettre en place mais çà pourrait être un plus ;)

*dans le subclass, sur WM_USER_TRAY, tu as bien pensé au menu seulement tu observes le handle de l'icône, il faut prendre le handle du usercontrol (sinon le menu ne se ferme pas en cliquant sur la barre des tâches par exemple)

*un systray peut réserver son emplacement sans avoir d'image. ton blink ne pourrait-il pas en tenir compte afin d'alterner avec cet espace vide? autrement dit ne pas forcer une 2e image de substitution

*toujours pour le blink, pourquoi utiliser une 2e timer alors que tu pourrais utiliser aussi celui du subclassing?

*si l'explorer crash, tu n'as pas d'erreur sur le blink ou le tooltip mais ce dernier n'apparaît plus et le systray n'est pas redessiné
2 solutions :
propre => RegisterWindowMessage
moins propre => timer, observer le handle de la barre des tâches, si 0 puis différent = a été recréée
reste dans les 2 cas à détruire puis relancer le tray

ce ne sont que des suggestions (je pensais pas mettre tant de regrets, désolé ^^), c'est une bonne source :p
BadoqueAlex Messages postés 129 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 6 juin 2009
24 juil. 2009 à 11:17
Bravo !
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 juil. 2009 à 09:29
j'aurais un reproche ^^
le fais que ce soit un usercontrol.

Encore récemment, j'ai fais un utilitaire sans aucune interface ; juste une icone en tray.
j'ai été obligé de mettre une form, bien que masquée...
Brosske Messages postés 98 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 12 août 2010 1
24 juil. 2009 à 09:21
Très jolie !
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 juil. 2009 à 16:34
@Flocreate : Libre à toi de le transformer en ActiveX, il n'y en a que pour 3 minutes.
Personnellement, je préfère intégrer les UserControl dans le projet, cela évite d'avoir à installer l'ActiveX au moment de l'installation + gérer les problèmes de compatibilité qui surgissent quand tu mets à jour un tel composant.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 juil. 2009 à 16:08
ok, au temps pour moi
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 juil. 2009 à 16:05
Salut Renfield
Non, non, cela ne change rien, Len et LenB renvoient la même valeur logique de 940.
C'est à mon avis l'API qui est en cause.
Il semble qu'avec le Shell version 6 de Vista, le problème disparaisse.
Beaucoup de sites parlent de cette anomalie, liée uniquement à l'utilisation des Balloons.
J'ai vu aussi des exemples de test de l'OS pour définir la taille de cette structure, mais dans le cas qui m'intéressait, je ne voyais pas l'utilité de surcharger le code.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 juil. 2009 à 15:39
.icoSize = Len(mIconData)

hum...

http://blogs.codes-sources.com/renfield/archive/2009/07/16/len-vs-lenb-copymemory-structures-perso-types-etc.aspx

devrai résoudre le probleme exposé en commentaire de la source ^^
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
23 juil. 2009 à 14:45
Bonjour,

J'addore mettre mes aplications dans le systray. Je trouve que cela désengorge la barre des taches des application qui tournent sans que l'utilisateur n'ai besoin d'agir.

J'ai bien travailler les API, mais le faire à chaque fois c'est lourd. Donc, chaque fois que je veux utiliser le systray, je me tourne vers un ActivX existant.

C'est, je trouve, le meilleur composant gratuit pret à l'emploie pour le systray. Et le plus complet aussi (de ceux que je connais).

Un grand bravo donc,

Cependant, je t'encourage à porter ton userContrôle en ActivX.
Là il serrait vraiment le must du must ^^
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 juil. 2009 à 13:37
J'ai oublié de remercier MadM@tt qui avait mâché tout le boulot (SubClassing -> UserControl)
http://www.vbfrance.com/codes/SUBCLASSING-SOUS-CLASSEZ-FACILEMENT-FENETRE-AVEC-USERCONTROL-OCX_47896.aspx
Rejoignez-nous