EFFET GLASS DE WINDOWS VISTA TRANSPARENCE SUPERBE

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 2 juil. 2007 à 06:22
djgab21 Messages postés 66 Date d'inscription vendredi 15 juin 2007 Statut Membre Dernière intervention 19 mai 2011 - 4 avril 2008 à 16:16
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/43310-effet-glass-de-windows-vista-transparence-superbe

djgab21 Messages postés 66 Date d'inscription vendredi 15 juin 2007 Statut Membre Dernière intervention 19 mai 2011
4 avril 2008 à 16:16
Pas mal 8/10
BERGOUGNOUX Messages postés 40 Date d'inscription mercredi 14 septembre 2005 Statut Membre Dernière intervention 16 mars 2008
7 août 2007 à 10:03
C'est pas mal mais un peu lent... tu devrais réaliser ton prog en utilisant les APIs. Je mets 9/10 pour l'encouragement xD...!
XelectroX Messages postés 209 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 6 novembre 2009
6 juil. 2007 à 23:25
Juste un petit détail, je pense qu'une source comme celle-ci serait mieux avec une capture ;). lol

@++
neamar Messages postés 26 Date d'inscription vendredi 9 septembre 2005 Statut Membre Dernière intervention 12 avril 2009
4 juil. 2007 à 22:32
Oui, c'est vrai PCPT..j'ai juste utilisé cette source dans une appli et je l'ai copié collée ici..
Dans ce cas, il vaudrait mieux remplacer :
Me.Line (X1, Y1)-(X1 + X2, Y1 + Y2), RGB(192, 192, 192), B
par :
bord_X=x1+x2
bord_Y=y1+y2
couleur=RGB(192,192,192)
for x=x1 to bord_X
SetPixel Me_DC,x,Y1,Couleur
SetPixe Me_DC,X,Bord_Y,Couleur
next
for y=y1 to Bord_Y
SetPixel Me_DC,X1,Y,Couleur
SetPixe Me_DC,Bord_X,Y,Couleur
next

Voili voilou, c'est plus rapide qu'un object.line...et ca fonctionne avec tout les contrôles ayant un hwnd.
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
4 juil. 2007 à 22:18
bien plus rapide oui ;)
nb neamar -> hdc en param long ok mais avec un me.line à la fin çà colle plus trop...
l'objet en param est le plus approprié

++
neamar Messages postés 26 Date d'inscription vendredi 9 septembre 2005 Statut Membre Dernière intervention 12 avril 2009
4 juil. 2007 à 21:56
J'oubliais, voilà le code de la fonction Min : (pas forcément optimisé, mais on s'en fiche :)

'Renvoie le minimum entre deux nombres...
Public Function Min(nb1 As Long, nb2 As Long) As Long
If nb1 < nb2 Then
Min = nb1
Else
Min = nb2
End If
End Function
neamar Messages postés 26 Date d'inscription vendredi 9 septembre 2005 Statut Membre Dernière intervention 12 avril 2009
4 juil. 2007 à 21:55
Dans le but d'améliorer cette source, voici quelques points :
-Utilise GetPixel (http://docvb.free.fr/apidetail.php?idapi=150 )
-Utilise SetPixel (http://docvb.free.fr/apidetail.php?idapi=149)
-Crée une fonction Min, et tu n'as pas besoin de tester V<0 puisque c'est impossible avec les opérations que tu effectues.
-Au lieu de faire 4 line, fais en une seule avec l'argument B (cf aide de line sur VB)


Voilà le résultat : plus rapide, plus concis, plus clair...et plus agréable !

Private Sub Glass(X1 As Long, Y1 As Long, X2 As Long, Y2 As Long, Optional Me_DC As Long)
Dim X As Long, Y As Long, P As Byte, NV As Byte, V As Long, T As Long
Dim iRGB As vRGB
If Me_DC 0 Then Me_DC Me.hDC

For Y = 0 To 10
For X = X1 To X1 + X2
'Haut
V = GetPixel(Me_DC, X, Y1 + Y)
CopyMemory iRGB, V, LenB(iRGB)

iRGB.R = Int(Min(iRGB.R + (15 - Y) * (10 - Y / 2), 255))
iRGB.G = Int(Min(iRGB.G + (15 - Y) * (10 - Y / 2), 255))
iRGB.B = Int(Min(iRGB.B + (15 - Y) * (10 - Y / 2), 255))
SetPixel Me_DC, X, Y1 + Y, RGB(iRGB.R, iRGB.G, iRGB.B)
Next
Next

For Y = 11 To Y2 - 5
For X = X1 To X1 + X2
V = GetPixel(Me_DC, X, Y1 + Y)
CopyMemory iRGB, V, LenB(iRGB)

iRGB.R = Int(Min(iRGB.R + 20, 255))
iRGB.G = Int(Min(iRGB.G + 20, 255))
iRGB.B = Int(Min(iRGB.B + 20, 255))
SetPixel Me_DC, X, Y1 + Y, RGB(iRGB.R, iRGB.G, iRGB.B)
Next
Next

T = 2
For Y = Y2 - 5 To Y2
T = T + 2
For X = X1 To X1 + X2
V = GetPixel(Me_DC, X, Y1 + Y)
CopyMemory iRGB, V, LenB(iRGB)

iRGB.R = Int(Min(iRGB.R + (T + 2) * (T / 2), 255))
iRGB.G = Int(Min(iRGB.G + (T + 2) * (T / 2), 255))
iRGB.B = Int(Min(iRGB.B + (T + 2) * (T / 2), 255))
V = iRGB.G + (T + 2) * (T / 2)
SetPixel Me_DC, X, Y1 + Y, RGB(iRGB.R, iRGB.G, iRGB.B)
Next
Next
Me.Line (X1, Y1)-(X1 + X2, Y1 + Y2), RGB(192, 192, 192), B
End Sub

Sinon, l'effet est très sympa..je l'ai déjà réutilisé !
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
3 juil. 2007 à 20:16
eheh, merci pour ta promo ;)
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
3 juil. 2007 à 20:11
Salut PCPT,
Ca veux juste réussir que pendant que je préparai ma réponse tu poste également. Hi
A+
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
3 juil. 2007 à 20:08
Bonjour,
Si tu veux quelque idées avec API, voir l'excellente source de PCPT qui (entre-autre) traite de l'opacité de la forme et d'un texte. Beaucoup d'autre idées sont aussi très bien exposées.
Suivre ce lien..
http://www.vbfrance.com/codes/ALERTER-UTILISATEUR-SANS-PASSER-HORRIBLE-MSGBOX-ERRORPROVIDER-OCX_42822.aspx
A+
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
3 juil. 2007 à 19:50
le résultat rend vraiment pas mal ;)
dommage que çà soit si long même compilé
cf précédents comms

tu prévois de mettre ce code à jour?
++
wtor Messages postés 59 Date d'inscription dimanche 23 novembre 2003 Statut Membre Dernière intervention 18 mars 2011
3 juil. 2007 à 18:20
merci pour vos remarques
et merci VBGenesis pour le 8 points
VBGenesis Messages postés 292 Date d'inscription samedi 25 février 2006 Statut Membre Dernière intervention 22 février 2009
3 juil. 2007 à 15:13
C'est assez sympa comme effet mais c'est vrai que c'est un peu lent... je met 8/10 et t'encourage à faire ça en API comme l'a dit Renfield. Sinon pour une appli aussi graphique une petite capture serait la bienvenue!
VBGenesis
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
2 juil. 2007 à 06:22
utilises les APIs pour faire ça, ce sera instantanné...

.Point et .Pset sont a n'utiliser que si tu n'as qu'un seul pixel a traiter, deux ou trois, tout au plus
Rejoignez-nous