FRAME GRAPHIQUE A GRADIENTS DE COULEURS AVEC ICONE (+ EVENTS MOUSE, SUBCLASSING.
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 2010
-
5 mai 2007 à 23:39
cs_claudetom
Messages postés115Date d'inscriptionjeudi 11 octobre 2001StatutMembreDernière intervention15 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.
cs_claudetom
Messages postés115Date d'inscriptionjeudi 11 octobre 2001StatutMembreDernière intervention15 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és1Date d'inscriptionmardi 28 avril 2009StatutMembreDernière intervention10 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és1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 17 mai 2007 à 17:22
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 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és1079Date d'inscriptionjeudi 14 novembre 2002StatutMembreDerniè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és1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 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és1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 10 mai 2007 à 13:13
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 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és1079Date d'inscriptionjeudi 14 novembre 2002StatutMembreDerniè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és1079Date d'inscriptionjeudi 14 novembre 2002StatutMembreDerniè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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 8 mai 2007 à 22:41
Ehé, tout à fait ;)
@+
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 8 mai 2007 à 22:36
Salut Violent_Ken,
Comme on dit : Chaque chose en son temps...
A+
Exploreur
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 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és4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 8 mai 2007 à 22:19
Salut Violent_Ken,
J'admire ta rapidité de réponse...
A+
Exploreur
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 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és4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 7 mai 2007 à 21:40
Salut Violent_Ken,
Ah..oui...Cela serai bien ça...
A+
Exploreur
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 7 mai 2007 à 21:31
Après réflexion çà devrait être jouable ;)
@+
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 7 mai 2007 à 21:26
En effet, mais çà demande pas mal de modifications à apporter...
25 oct. 2011 à 11:39
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
10 juil. 2009 à 18:06
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
17 mai 2007 à 17:22
http://www.vbfrance.com/code.aspx?ID=42726
@+
12 mai 2007 à 13:27
""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 ;)
@+
12 mai 2007 à 12:21
"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
11 mai 2007 à 19:59
-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
-...
@+
11 mai 2007 à 09:06
10 mai 2007 à 19:48
Merci encore pour tes précieux conseils.
@+
10 mai 2007 à 19:45
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...
10 mai 2007 à 19:15
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.
@+
10 mai 2007 à 13:13
J'avais lu http://www.vbfrance.com/codes/RGB-MEILLEUR-TECHNIQUE-VB_40020.aspx un peu vite alors...
@+
10 mai 2007 à 07:05
c'est, comme l'indique moustachu, pour pouvoir utiliser les couleurs système... (&h80xxxxxx )
ca permet de passer d'un vbButtonFace à la valeur RGB
9 mai 2007 à 19:06
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)
9 mai 2007 à 11:08
N'oublie pas (comme moi dans beaucoup de sources) le OleTranslateColor pour pouvoir utiliser les couleurs système.
++
Moustachu
9 mai 2007 à 09:13
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
9 mai 2007 à 08:45
CreateRoundRectRgn
puis
SetWnidowRgn
et pour dessiner la bordure : FrameRgn
8 mai 2007 à 22:41
@+
8 mai 2007 à 22:36
Comme on dit : Chaque chose en son temps...
A+
Exploreur
8 mai 2007 à 22:33
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 ! ;)
@+
8 mai 2007 à 22:19
J'admire ta rapidité de réponse...
A+
Exploreur
8 mai 2007 à 18:08
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.
@+
7 mai 2007 à 21:40
Ah..oui...Cela serai bien ça...
A+
Exploreur
7 mai 2007 à 21:31
@+
7 mai 2007 à 21:26
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
7 mai 2007 à 21:17
Finalement juste un petit truc à dire niveau graphique....Cela cool avec les coins arrondis.
A+
Exploreur
7 mai 2007 à 21:08
@+
7 mai 2007 à 12:48
A plus...
LARD
6 mai 2007 à 01:28
6 mai 2007 à 00:42
@+
6 mai 2007 à 00:40
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
5 mai 2007 à 23:39
@+ et oubliez pas de noter et commenter ^^