En faite, ce code est une classe que j’ai crée pour réaliser le menu de mon TPE (voir image) il a ete coder un peu sur mesure et a l’arrache donc il y aura surement des mise a jour pour ajouter des fonction et simplifier encore son utilisation.
On y apprend a cree un degrader a faire fusionner 2 images le tous en se servant des API.
API utiliser :
CreateCompatibleBitmap
CreateCompatibleDC
GetDC
DeleteDC
DeleteObject
AlphaBlend
RtlMoveMemory
GradientFill
SetPixel
StretchBlt
Pour mieux se rendre conte de se a quoi sert le code regarder l’image (le menu et la barre de titre sont cree grace a la classe)
Source / Exemple :
'Extrait : Fonction principale
Private Function Fusion(vObj As Object)
Dim BF As BLENDFUNCTION, lBF As Long
Dim i As Long
For i = 0 To vObj.ScaleWidth
BF.SourceConstantAlpha = 255 - Int(255 / vObj.ScaleWidth * i)
RtlMoveMemory lBF, BF, 4
AlphaBlend vObj.hdc, i, 0, 1, vObj.ScaleHeight, vDCDegrader, 0, 0, 1, vObj.ScaleHeight, lBF
Next i
End Function
Private Function Make_Degrader(vObj As Object, vColor1 As Long, vColor2 As Long) As Boolean
Dim R As Byte, G As Byte, B As Byte
Dim gRect As GRADIENT_RECT
Dim vVertex(1) As TRIVERTEX
'BMP degrader
vDCDegrader = CreateCompatibleDC(GetDC(0))
vBMPDegrader = CreateCompatibleBitmap(GetDC(0), 1, vObj.ScaleHeight)
Call SelectObject(vDCDegrader, vBMPDegrader)
gRect.UpperLeft = 0
gRect.LowerRight = 1
Call GetRGB(vColor1, R, G, B)
vVertex(0).X = 0
vVertex(0).Y = 0
vVertex(0).Red = "&H" & Hex(R / 16 * 256 * 16)
vVertex(0).Green = "&H" & Hex(G / 16 * 256 * 16)
vVertex(0).Blue = "&H" & Hex(B / 16 * 256 * 16)
vVertex(0).Alpha = 0
Call GetRGB(vColor2, R, G, B)
vVertex(1).X = 1
vVertex(1).Y = vObj.ScaleHeight
vVertex(1).Red = "&H" & Hex(R / 16 * 256 * 16)
vVertex(1).Green = "&H" & Hex(G / 16 * 256 * 16)
vVertex(1).Blue = "&H" & Hex(B / 16 * 256 * 16)
vVertex(1).Alpha = 0
Make_Degrader = GradientFill(vDCDegrader, vVertex(0), 2, gRect, 1, GRADIENT_FILL_RECT_V)
If vStyle = 1 Then
Call SetPixel(vDCDegrader, 0, 0, vStyleColor)
Call SetPixel(vDCDegrader, 0, vObj.ScaleHeight - 1, vStyleColor)
End If
End Function
Conclusion :
Il reste encore beaucoup a faire pour la rendre veritablement interessante, notament en remplacent la classe par un controleuser mais mon principale probablement est de recuperer l’image de fond de contrôle sur lequel est le contrôle est (ceux qui liron le code me comprendrons) donc si quelqu'un a une idee je suis ouvert (mes principale recherche pour la recuperer se sont tourner sur le DC mais du contrôle mais je n’est jamais reussi a recuperer l’image)
L’autre souci est qu’il est impossible de superposer plusieurs contrôle.
Voilà toute aide est la bien venu (remarque constructive et encouragement aussi :)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.