FRAME GRAPHIQUE A GRADIENTS DE COULEURS AVEC ICONE (+ EVENTS MOUSE, SUBCLASSING.

violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 - 5 mai 2007 à 23:39
cs_claudetom Messages postés 115 Date d'inscription jeudi 11 octobre 2001 Statut Membre Dernière intervention 15 octobre 2012 - 25 oct. 2011 à 11:39
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/42581-frame-graphique-a-gradients-de-couleurs-avec-icone-events-mouse-subclassing

cs_claudetom Messages postés 115 Date d'inscription jeudi 11 octobre 2001 Statut Membre Dernière intervention 15 octobre 2012
25 oct. 2011 à 11:39
Bonjour,
J'utilise ton composant frame dans un de mes programme mais j'ai un gros soucis,
en effet en mode débug via L'IDE le source plante et ferme par la même occasion l'interface de développement
se produit aussi lors de l’exécution ?
Par contre en mode compilé (EXE) y'a pas de soucis.
Le problème semblerait venir des copyMemory ou de ce qui se trouve dans
Private Sub UserControl_Initialize()

Aurais-tu une solution ?
Merci
strider73 Messages postés 1 Date d'inscription mardi 28 avril 2009 Statut Membre Dernière intervention 10 juillet 2009
10 juil. 2009 à 18:06
Bonjour violent_ken,

avant la question qui tue.. je voulais te féliciter pour la qualité de ton code et les composants que tu proposes.. c'est du tip top !!

J'ai une question cependant, disons que j'ai une Form avec juste ton controle dessus. sur cette Form, je recupere les evenements Mouseleave ou Mousehover de ton controle pour modifier une propriete de ce dernier. (borderwith, caption ..) et bien j'ai toutes les icones de mon bureau qui clignotent un coup ... j'ai essyé sur d'autres postes que le mien et ca fait pareil ...

J'ai essaye de voir les Messages qui etaient envoyés mais j'ai pas trouvé grand chose de probant .. As-tu une idée de ce qui se produit ? et comment l'eviter ?

D'avance Merci ...

Ps: au cas j'aurias pas ete clair, tu trouveras ci-dessous le code utilisé que tu reconnaitras je pense ...

Private Sub grdFrame1_MouseHover(Index As Integer)
Me.Caption = "Rentrée dans un de frames"
grdFrame1(Index).BorderWidth = 2
End Sub

Private Sub grdFrame1_MouseLeave(Index As Integer)
Me.Caption = "Sortie d'un des frames"
grdFrame1(Index).BorderWidth = 1
End Sub
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
17 mai 2007 à 17:22
Hop, je poste toute ma série de contrôles stylés XP :
http://www.vbfrance.com/code.aspx?ID=42726

@+
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
12 mai 2007 à 13:27
""Icone deplacée"... le texte est sous l'icone" ==> Oui c'est vrai, mais de toutes façons il ne faut utiliser les properties d'offset (X et Y) de l'icone que pour déplacer l'icone de quelques pixels (pas comme dans l'exemple, mais par exemple pour recentrer quand on a un énorme arrondi)

""transparence avec bordure" le coin haut gauche apparait." ==> En effet, c'est un (le) bug connu, je suis pas arrivé à le résoudre... je comprend pas trop pourquoi le coin est affiché puisque la zone ne le prend pas en compre (avec SetWnidowRgn) -__-

"avec CombineRgn, tu pourrais arrondir que les coins qui t'arrangent, ca rend pas mal..." ==> Bonne idée, je vais travailler du côté de cette API

Merci pour le commentaire ;)
@+
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
12 mai 2007 à 12:21
"Icone deplacée"... le texte est sous l'icone :/
"transparence avec bordure" le coin haut gauche apparait...

avec CombineRgn, tu pourrais arrondir que les coins qui t'arrangent, ca rend pas mal...

ton controle ressemble fort désormais a celui que j'avais fait au boulot ^^
ca rend vraiment pas mal, tu t'en sort bien
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
11 mai 2007 à 19:59
Salut, grosse MAJ :

-correction du bug précédent (merci Moustachu)
-ajout d'APIs pour les contours (merci Renfield)
-ajout de nombreuses propriétés
-ajout de la gestion d'une icone (qui se grise quand enabled=false)
-optimisations diverses
-ajout OleTranslateRGB
-bordure avec angle et épaisser réglable
-...

@+
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
11 mai 2007 à 09:06
Oui, les API sont nos amies ! Il faut apprendre à les connaître ^^
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
10 mai 2007 à 19:48
Tout à fait, je suis en plein tests de l'API, c'est vraiment pratique ! J'ai encore un peu de mal avec le passage des 6 coordonnées, mais çà marche déjà plutôt bien ^^

Merci encore pour tes précieux conseils.
@+
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 mai 2007 à 19:45
L'avantage de passer par les Apis que je t'ai indiqué, c'est que le rayon (Roundness) peut etre un des propriétés de ton controle.

deja testé dans un de mes controles, faits pour le boulot, ca rend vraiment pas mal.

je suis a ta disposition, si tu as besoin d'une maquette, conseil...
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
10 mai 2007 à 19:15
Bon, j'ai compris à quoi servait OleTranslateColor, je l'ai inclus dans le Usercontrol ;) Moi qui croyais que çà servait à convertir de Long à RGB...

Je vais essayer les APIs de Renfield, puis je rajouterais une option Picture (pour afficher une image 16x16) et j'étofferais les events.

Donc une MAJ dans quelques temps.
@+
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
10 mai 2007 à 13:13
Ok, merci Renfield pour la précision.

J'avais lu http://www.vbfrance.com/codes/RGB-MEILLEUR-TECHNIQUE-VB_40020.aspx un peu vite alors...

@+
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 mai 2007 à 07:05
c'est pas une question de gagner du temps, le OleTranslateRGB...

c'est, comme l'indique moustachu, pour pouvoir utiliser les couleurs système... (&h80xxxxxx )

ca permet de passer d'un vbButtonFace à la valeur RGB
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
9 mai 2007 à 19:06
Renfield ==> Merci pour les renseignements, je note ^^ Parce qu'à vrai dire je connais (très) peu les fonctions de la dll gdi32... donc c'est le bienvenu !


Moustachu ==> alors pour la classe de DarkSidious, je préfère ne pas l'utiliser (j'essaie de prendre le moins possible de code déjà fait et le refaire moi même, dans la mesure du possible).
Sinon pour la "bidouille", en effet, çà doit passer ^^ J'avais tenté un truc dans le genre déjà (d'ailleurs y doit rester deu fonctions GetMaxRGB et GetMinRGB ou un truc comme çà, c'était pour çà^^)
Et pour OleTranslateColor, effectivement je conaissais, je testerais pour voir si çà gagne du temps réellement.

Merci pour les commentaires, @+ (je ferais probablement une MAJ quand j'aurais du temps)
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
9 mai 2007 à 11:08
Re-bonjour,

N'oublie pas (comme moi dans beaucoup de sources) le OleTranslateColor pour pouvoir utiliser les couleurs système.

++
Moustachu
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
9 mai 2007 à 09:13
Bonjour,

Renfield a dégainé plus vite que moi ^^.

Donc, pour les région, c'est fait. Pour le dégradé tu peux :
- Utiliser la classe de gestion d'image de Darksidious
- Faire une petite bidouille du genre :
If CLng(RGB(LeftColor.R, LeftColor.G, LeftColor.B)) < CLng(RGB(RightColor.R, RightColor.G, RightColor.B)) Then
lsigne = 1
Else
lsigne = -1
End If

et ensuite :

.ForeColor = RGB(LeftColor.R + lsigne * x * rAverageColorPerSizeUnit, LeftColor.G + lsigne * x * _
gAverageColorPerSizeUnit, LeftColor.B + lsigne * x * bAverageColorPerSizeUnit)

Ca passe à peu près.

++
Moustachu
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
9 mai 2007 à 08:45
pour l'arrondis, dans un controle (pour le boulot) j'ai deja fait via APIs :

CreateRoundRectRgn
puis
SetWnidowRgn
et pour dessiner la bordure : FrameRgn
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
8 mai 2007 à 22:41
Ehé, tout à fait ;)
@+
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
8 mai 2007 à 22:36
Salut Violent_Ken,

Comme on dit : Chaque chose en son temps...

A+
Exploreur
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
8 mai 2007 à 22:33
Salut,
disons que çà a été plutôt rapide puisque c'était pas très difficile... mais j'ai d'autres source à mettre à jour en ce moment (ocx traduction par exemple) qui trainent un peu ! ;)


@+
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
8 mai 2007 à 22:19
Salut Violent_Ken,

J'admire ta rapidité de réponse...

A+
Exploreur
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
8 mai 2007 à 18:08
Voilà, j'ai trouvé 30 minutes pour la MAJ...;)
Il y a désormais une gestion des arrondis, avec une property qui permet de (dés)activer les arrondis.



Je me suis pas cassé la tête à changer la forme du UserControl, je me suis contenté de dessiner des points dans les coins de la même couleur que le MaskColor... (méthode de Renfield).

Ne doit pas y avoir de conflit avec les gradients (faudrait pas que le MaskColor apparaisse dans un gradient !) après quelques tests.

@+
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
7 mai 2007 à 21:40
Salut Violent_Ken,

Ah..oui...Cela serai bien ça...

A+
Exploreur
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
7 mai 2007 à 21:31
Après réflexion çà devrait être jouable ;)

@+
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
7 mai 2007 à 21:26
En effet, mais çà demande pas mal de modifications à apporter...

Je vais voir si c'est possible de faire un truc comme çà :
http://www.enregistrersous.com/images/32394159920070507212634.jpg
tout en restant simple (c'est aussi le but de la source) ^^

@+ et merci pour le conseil
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
7 mai 2007 à 21:17
Salut Violent_Ken,

Finalement juste un petit truc à dire niveau graphique....Cela cool avec les coins arrondis.

A+
Exploreur
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
7 mai 2007 à 21:08
Merci ;)
@+
cs_lard Messages postés 79 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 26 janvier 2009
7 mai 2007 à 12:48
Excellent !!!

A plus...

LARD
cs_jolicoeur79 Messages postés 62 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 1 avril 2018 1
6 mai 2007 à 01:28
bon travail
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
6 mai 2007 à 00:42
Content que ma source te plaise ;)

@+
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
6 mai 2007 à 00:40
Salut Violent_Ken,

Allez, moi j'adopte dessuite...Par contre pour les commentaires techniques...euh...comment dire...ce n'est pas moi qui pourra en dire...lol

A+
Exploreur
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
5 mai 2007 à 23:39
Note : surement possible de faire plus optimisé avec des APIs pour le traçage de gradient, mais j'ai voulu faire un code simple et commenté.

@+ et oubliez pas de noter et commenter ^^
Rejoignez-nous