vauzt
Messages postés1Date d'inscriptionmercredi 23 juillet 2014StatutMembreDernière intervention23 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és300Date d'inscriptionlundi 17 juillet 2006StatutMembreDernière intervention27 mai 20123 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és14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 25 févr. 2010 à 15:33
a voir ce que contient ce rapport (voir journal des evenements applicatifs)
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 25 févr. 2010 à 14:15
une histoire de subclassing, je pense, de fuite ? a voir...
Claiyah
Messages postés580Date d'inscriptionmercredi 20 août 2008StatutMembreDernière intervention20 avril 20103 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és14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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és580Date d'inscriptionmercredi 20 août 2008StatutMembreDernière intervention20 avril 20103 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és14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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és3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 3 août 2009 à 23:31
@violent_ken : Oui, c'est tout à fait ça ...
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 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és335Date d'inscriptionlundi 29 septembre 2008StatutMembreDernière intervention16 août 20231 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és615Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention 4 juillet 2012 27 juil. 2009 à 21:29
Encore une fois du bon travail
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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és14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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és3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 26 juil. 2009 à 11:33
J'avais oublié de noter : 10/10, évidemment.
cs_ghuysmans99
Messages postés3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 26 juil. 2009 à 11:31
Excellent ...
cs_pluplu
Messages postés615Date d'inscriptionmercredi 18 décembre 2002StatutMembreDerniè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és2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 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és13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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és129Date d'inscriptionmardi 20 juillet 2004StatutMembreDernière intervention 6 juin 2009 24 juil. 2009 à 11:17
Bravo !
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és98Date d'inscriptionjeudi 25 novembre 2004StatutMembreDernière intervention12 août 20101 24 juil. 2009 à 09:21
Très jolie !
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 23 juil. 2009 à 16:08
ok, au temps pour moi
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 23 juil. 2009 à 15:39
devrai résoudre le probleme exposé en commentaire de la source ^^
Flocreate
Messages postés300Date d'inscriptionlundi 17 juillet 2006StatutMembreDernière intervention27 mai 20123 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és14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 23 juil. 2009 à 13:37
23 juil. 2014 à 05:14
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 :)
12 mars 2010 à 12:36
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,
25 févr. 2010 à 16:01
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)
25 févr. 2010 à 15:33
25 févr. 2010 à 15:29
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...
25 févr. 2010 à 15:18
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)
25 févr. 2010 à 15:13
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.
25 févr. 2010 à 14:15
25 févr. 2010 à 13:19
oui je parle du projet présent ici et oui aussi c'est lors de la fermeture
25 févr. 2010 à 13:03
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.
25 févr. 2010 à 12:04
mais windows me renvoi des erreur de temps en temps je sais pas pourquoi : "erreur... envoyer / ne pas envoyer"
je suis sur xp sp3
3 août 2009 à 23:57
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.
3 août 2009 à 23:31
3 août 2009 à 21:55
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).
@+
31 juil. 2009 à 03:53
Sa en fait du code pour si peu de visuel qui reste impressionnant !
10/10 mais je sais pas le faire valider mon 10 !
27 juil. 2009 à 21:29
27 juil. 2009 à 15:29
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)
26 juil. 2009 à 20:51
Merci pour vos commentaires
26 juil. 2009 à 11:33
26 juil. 2009 à 11:31
26 juil. 2009 à 10:40
encore merci!
24 juil. 2009 à 14:34
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.
24 juil. 2009 à 13:55
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
24 juil. 2009 à 11:17
24 juil. 2009 à 09:29
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...
24 juil. 2009 à 09:21
23 juil. 2009 à 16:34
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.
23 juil. 2009 à 16:08
23 juil. 2009 à 16:05
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.
23 juil. 2009 à 15:39
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 ^^
23 juil. 2009 à 14:45
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 ^^
23 juil. 2009 à 13:37
http://www.vbfrance.com/codes/SUBCLASSING-SOUS-CLASSEZ-FACILEMENT-FENETRE-AVEC-USERCONTROL-OCX_47896.aspx