CONTROLES XP S'ADAPTANT AU CHANGEMENT DU THEME DE WINXP

cs_Stephane Messages postés 550 Date d'inscription vendredi 5 janvier 2001 Statut Membre Dernière intervention 23 septembre 2006 - 2 janv. 2005 à 20:25
cs_MasterHack Messages postés 586 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 13 février 2008 - 7 janv. 2006 à 17:50
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/28567-controles-xp-s-adaptant-au-changement-du-theme-de-winxp

cs_MasterHack Messages postés 586 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 13 février 2008 2
7 janv. 2006 à 17:50
Salut , Merci pour la remarque, je vai essayer de regler ce probleme,qui est le suisvant :
If Objet.Name <> Ambient.DisplayName Then Objet.Value = False
donc la il y a une confrontation de nom.
je vai regler sa dés que j'aurai le temps.
Encore merci.
m2rtech Messages postés 239 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 20 février 2012
4 janv. 2006 à 15:08
salut,
j'ai remarqué que lorsque les Options Buttons étaient placés dans un frame et qu'ils étaient regroupés par index ex:
opt_toto(0)
opt_toto(1)
etc.
ceux-ci perdaient bizarrement leur aspect graphique
état selectionné (petit point vert dedant).
l'auteur confirme ou infirmer ce bug ?
Dans le cas ou ces dernier ne sont affublés d'un index, ça marche impec.
Si quelqu'un à une suggestion à apporter sur ce bug, et éventuellement une solution, je suis preneur car en effet ces controles n'ont pas le bug des options buttons standard (XPéisé par le fichier manifest) qui deviennent eux totalement noir (sauf dans un controle picturebox.

salutations
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
28 avril 2005 à 19:21
D'accord D'accord ;)
merchi pour vos réponses :D
cs_MasterHack Messages postés 586 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 13 février 2008 2
28 avril 2005 à 16:01
enfin moi j'ai utilse la petite astuce ;) avec StyleXP. chuuut !
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
28 avril 2005 à 14:11
Tu peux très facilement trouver une dll gratuite pour appliquer les style xp : recherche sur google pour changer uxtheme.

Sinon, si ta question était comment faire pour récupèrer les images des thèmes, il te suffit d'utiliser quelques API, voir pour cela ma source portant sur l'ajout d'un bouton dans la barre de titre pour réduire dans le systray par exemple.

StyleXP n'est pas gratuit !

DarK Sidious
cs_Chewba Messages postés 90 Date d'inscription jeudi 16 mai 2002 Statut Membre Dernière intervention 10 septembre 2006
28 avril 2005 à 14:10
MadM@tt > c'est à moi que tu posais la question ?
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
28 avril 2005 à 14:04
Dis une question à 2 balles, tu utilise quoi pour avoir ces styles XP ?
Le logiciel StyleXP c'est ça ? (et au passage c'est gratuit ;) ?)
cs_MasterHack Messages postés 586 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 13 février 2008 2
28 avril 2005 à 13:53
Chewba> imagines la taille de ton app avec a nombre important de picturebox.
mais ça reste une solution aussi. :)
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
27 avril 2005 à 20:50
Chewba >> Oui ça marche, et cest un petit bricolage très utile a mon gout pour les petites appli, mais dès qu'il s'agit d'un programme de plusieurs milliers de lignes et de plein d'objets, le petit bricolage peut devenir très long a mettre en place et surtout très peu pratique
cs_Chewba Messages postés 90 Date d'inscription jeudi 16 mai 2002 Statut Membre Dernière intervention 10 septembre 2006
26 avril 2005 à 20:18
Pour résoudre ce problème:

"le manifest a un grand defaut celui qui se produit si on met par exp un optionButton ds une frame ça devient noire."

tu mets tes contrôles par exemple un optionbutton dans une picturebox en mettant border à NONE et backcolor à la couleur de ta form et tu verras alors tes contrôles normalement.
cs_MasterHack Messages postés 586 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 13 février 2008 2
10 janv. 2005 à 16:24
moustachu>moauis ton code sera tres util,je vai faire une mise a jour Apres l'examen
cs_MasterHack Messages postés 586 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 13 février 2008 2
9 janv. 2005 à 19:56
OK vai y aller,Merci bien
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
9 janv. 2005 à 19:42
Va voir l'exemple qu'à posté MD sur ProgOtoP API Viewer pour un exemple simple d'utilisation de ce principe.

DarK Sidious
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
9 janv. 2005 à 19:40
Ca gèle l'application ? Est-ce que tu libères les événements souris au bon moment ? Il faut faire le releaseCapture lorsque la souris quitte ton contrôle car sinon, forcément, les événements souris seront redirigés vers ton contrôle et non vers l'application !

DarK Sidious
cs_MasterHack Messages postés 586 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 13 février 2008 2
9 janv. 2005 à 19:31
Merci,
Avec setcapture et releasecapture ça gel toute l'application :(
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
7 janv. 2005 à 13:23
Je rentre un peu tard dans la conversation, désolé. MasterHack, tu as un exemple de MouseIn, MouveOut avec les méthodes préconisées par DarkSidious sur cette source : http://www.vbfrance.com/code.aspx?ID=28210)

Ca rendra ton controle plus souple qu"avec un timer.

++
Moustachu
cs_MasterHack Messages postés 586 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 13 février 2008 2
6 janv. 2005 à 14:30
ça a l'aire plus propre,je vais le tester pour voir.Merci
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
5 janv. 2005 à 20:03
Le SetCapture ? Non beaucoup moins que le Timer vu qu'il ne s'agit que d'une redirection des événements souris vers la fenêtre voulu.

Donc si aucun message liés à la souris n'interviennent (si l'utilisateur ne bouge pas la souris), le programme ne prend aucune ressources !

DarK Sidious
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
5 janv. 2005 à 19:31
ah ouais j'ai capté =) merci de mavoir expliqué :D
au fait ça bouffe bcp en cpu ça ?
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
5 janv. 2005 à 18:07
Ben non justement : dès que l'événement MouseOver est déclenché, ca veut dire que la souris passe au dessus du contrôle => On capture ses événements avec SetCapture.

Ensuite, dès que la souris bouge (même si elle ne se trouve plus sur le contrôle), le MouseMove est déclenché, donc on teste si la souris se trouve toujours dessus ou pas, et si ce n'est pas le cas, on libère les événements souris avec ReleaseCapture. C'est aussi simple que cà.

mousehook ? Oui si on veux, sauf que là on redirige juste les événements vers une fenêtre, on ne les traite pas explicitement !

DarK Sidious
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
5 janv. 2005 à 17:54
mais ça nécessite quand meme l'utilisation d'un timer ça non ?

au fait c'est ça le ... mousehook c'est ça ?
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
5 janv. 2005 à 15:49
Tu capture les événements souris dans ton handle de usercontrol, et ensuite, dans le MouseMove, tu teste si ta souris se trouve toujours dessus ou non selon les coordonnées.

N'oublie pas de restaurer les événements souris dès que celle-ci n'est plus sur le contrôle !

DarK Sidious
cs_MasterHack Messages postés 586 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 13 février 2008 2
5 janv. 2005 à 15:26
mais l'utilisee dans quel evenement.un evenement qui se repete le plus souvent !?
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
5 janv. 2005 à 15:10
Utilise la fonction GetCapture pour capturer les événements souris dès que ta souris passe sur ton contrôle, ainsi, plus besoin de timer !

DarK Sidious
cs_MasterHack Messages postés 586 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 13 février 2008 2
5 janv. 2005 à 15:00
ah pour les timers :
1:ils servent a detecter si le pointeur de la souris est sur le controls.c'est un evenement mouseOver et moseout au contraire de mousemove qui ne sert pas a grande chose.
2:pour verifer les valeur pour les option button car un seul optionbutton doit etre sur value true.
enfin ça,je sais que c'est une maniere pas trop economique mais je vais devoir trouver une autre soluce.
Merci
retaks666 Messages postés 286 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 16 juillet 2007
4 janv. 2005 à 20:34
Je peux pas trop te dire, je l'ai pas trop essayé, mais en tous cas ça peut m'être utilé dans l'avenir ;) Sinon, pourquoi as tu besoin d'un timer?
cs_MasterHack Messages postés 586 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 13 février 2008 2
4 janv. 2005 à 19:07
retaks666>Merci
plus de commentaire et de suggestion svp
cs_MasterHack Messages postés 586 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 13 février 2008 2
4 janv. 2005 à 19:07
retaks666>Merci
plus de commentaire et de suggestion svp
retaks666 Messages postés 286 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 16 juillet 2007
4 janv. 2005 à 18:58
Bien tout ça :)
Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 7
3 janv. 2005 à 14:13
Ok pour le Manifest... Mais pour ceux qui sont en Win2000 cela ne sert à rien ! Ces contrôles sont donc les bienvenus même s'ils sont perfectibles.
cs_MasterHack Messages postés 586 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 13 février 2008 2
3 janv. 2005 à 11:33
MrAssoL>le manifest a un grand defaut celui qui se produit si on met par exp un optionButton ds une frame ça devient noire.
Merci
cs_MasterHack Messages postés 586 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 13 février 2008 2
3 janv. 2005 à 11:25
Merci
Stephane>oui c'est vrai mais je vais trouver un moyen de regle ça ds les prochaine mise a jour (apres les examen biensur),Merci
MrAssoL Messages postés 30 Date d'inscription vendredi 17 mai 2002 Statut Membre Dernière intervention 14 octobre 2009
3 janv. 2005 à 11:24
Ca a l'air pas mal mais un peu lourd, il existe une methode qui marche a 100% et avec tout les OS Windows et qui permet d'avoir ses applis a la sauce xp ou du theme choisi : cette methode c'est le fichier ".manifest" ... garantie 100% - de plus cela marche aussi avec les applis non VB c'est juste un fichier a ajouter dans le meme dossier que l'appli ....
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
3 janv. 2005 à 08:14
Vraiment très bien, bravo masterhack ;)

DarK Sidious
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
2 janv. 2005 à 20:55
Ah oui c'est donc ça !
excellent vraiment, juste ce petit détail qu'a énoncé Stephane
cs_Stephane Messages postés 550 Date d'inscription vendredi 5 janvier 2001 Statut Membre Dernière intervention 23 septembre 2006
2 janv. 2005 à 20:25
c'est bien mais y a un ENORME inconvenient, les timers dans les controls.

imagine si il te fau 10 check dans une form, tu a 10 timer qui tournent en permanence !

A eviter, utilise plutot usercontrol_paint pour dessiner

a+