1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
'***************************************************************************************
'* DIALOGUE CHOIX DE COULEUR *
'***************************************************************************************
Option Explicit
' Comm Dialog Couleur
Private Declare Function ChooseColor Lib "comdlg32.dll" Alias "ChooseColorA" (pChoosecolor As ChooseColor) As Long
Public Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
' Type pour boîte dialogue couleurs
Private Type ChooseColor
lStructSize As Long
hWndOwner As Long
hInstance As Long
rgbResult As Long
lpCustColors As String
flags As Long
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
'---------------------------------------------------------------------------------------
' Boîte dialog pour choix couleur
'---------------------------------------------------------------------------------------
'Handle : Handle du parent de la boîte de dialogue
'
' Renvoie la couleur du control si on annule ou si aucune couleur n'est choisie
'---------------------------------------------------------------------------------------
Public Function choixColor(uf As Object, oldcouleur As Long) As Long
' Structure contenant les informations nécessaire à l'API
Dim lcc As ChooseColor
Dim handle As Long
'***************************************************************************************************************
' ici on determine le handle par la classe de frame en testant la version de l'application ( DE EXCEL97 A 2007)*
handle = FindWindow("Thunder" & IIf(Application.Version Like "8*", "0*", "D") & "Frame", uf.Caption) '*
' Tableau statique pour conserver les couleurs personnalisées
Static lCustomColors() As Byte
On Error GoTo gestion_erreurs
' Redimensionne le tableau sans supprimer son contenu
ReDim Preserve lCustomColors(0 To 16 * 4 - 1) As Byte
lcc.lpCustColors = StrConv(lCustomColors, vbUnicode) ' Couleurs personnalisées
lcc.lStructSize = Len(lcc) ' Taille de la structure
lcc.hWndOwner = handle ' Handle du parent
lcc.flags = 0 ' Pas de flags particuliers
If ChooseColor(lcc) <> 0 Then
' On a choisi une couleur
' Renvoie la couleur choisie
choixColor = lcc.rgbResult
' Stocke les couleurs personnalisées pour la prochaine exécution
lCustomColors = StrConv(lcc.lpCustColors, vbFromUnicode)
Else
' Aucune couleur choisie, on renvoie -1
choixColor = oldcouleur
End If
gestion_erreurs:
If Err.Number <> 0 Then Exit Function ' Renvoie -1 si erreur
End Function |
Partager