1/ La boîte de dialogue ne s'ouvre pas au milieu de l'écran mais en haut à
gauche
Mouais,
Je n'avais pas bien cherché, j'ai trouvé 172 articles dans Google, mais je
n'y comprends pas grand-chose, vous avez toujours le
droit de m'aider :-))))
J-Pierre
1/ La boîte de dialogue ne s'ouvre pas au milieu de l'écran mais en haut à
gauche
Mouais,
Je n'avais pas bien cherché, j'ai trouvé 172 articles dans Google, mais je
n'y comprends pas grand-chose, vous avez toujours le
droit de m'aider :-))))
J-Pierre
1/ La boîte de dialogue ne s'ouvre pas au milieu de l'écran mais en haut à
gauche
Mouais,
Je n'avais pas bien cherché, j'ai trouvé 172 articles dans Google, mais je
n'y comprends pas grand-chose, vous avez toujours le
droit de m'aider :-))))
J-Pierre
Finalement, je me suis relevé, maintenant, j'arrive à passer la couleur à
l'API et à initialiser les couleurs personnalisées à
blanc. En plus, d'un appel à l'autre, les couleurs personnalisées choisies
sont conservées...... Qui disait que la nuit porte
conseil ????????
Voilà les deux codes complets modifiés:
------------------------------------------------------------------
module boiteCouleur
------------------------------------------------------------------
Private Type CHOOSECOLOR
lStructSize As Long
hwndOwner As Long
hInstance As Long
rgbResult As Long
lpCustColors As Long
Flags As Long
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
' Constantes utilisées par ChooseColor
Private Const CC_RGBINIT = &H1&
Private Const CC_FULLOPEN = &H2&
Private Const CC_PREVENTFULLOPEN = &H4&
Private Const CC_SHOWHELP = &H8&
Private Const CC_ENABLEHOOK = &H10&
Private Const CC_ENABLETEMPLATE = &H20&
Private Const CC_ENABLETEMPLATEHANDLE = &H40&
Private Const CC_SOLIDCOLOR = &H80&
Private Const CC_ANYCOLOR = &H100&
Private dwCustClrs(0 To 15) As Long ' Tableau statique contenant les
couleurs personnalisées
Dim initFlag As Boolean
Private Declare Function ShowColour Lib "comdlg32.dll" Alias
"ChooseColorA" _
(pChoosecolor As CHOOSECOLOR) As Long
Public Function ShowDialogColorBox(Optional initCouleur As Long 16777215) As Variant
Dim tChooseColour As CHOOSECOLOR
Dim cnt As Integer
Dim r As Variant
If initFlag = False Then
initFlag = True
For cnt = 0 To 15
dwCustClrs(cnt) = RGB(255, 255, 255)
Next
End If
Dim Thread As Long
Thread = GetCurrentThreadId()
hHook = SetWindowsHookEx(WH_CBT, AddressOf WinProc, 0, Thread)
With tChooseColour
.lStructSize = Len(tChooseColour)
.hwndOwner = hWndAccessApp
.lpCustColors = VarPtr(dwCustClrs(0))
.Flags = CC_ANYCOLOR Or CC_RGBINIT Or CC_FULLOPEN
.rgbResult = initCouleur ' default color will put cursor on this
Color
End With
r = ShowColour(tChooseColour)
If r = 0 Then
ShowDialogColorBox = ""
Else
ShowDialogColorBox = tChooseColour.rgbResult
End If
End Function
-------------------------------------------------------------
formulaire frmBoiteCouleur
------------------------------------------------------------
avec une zone de texte "maCouleur" et un bouton "Commande0"
Le code VBA:
Private Sub Commande0_Click()
Dim codeCouleur As String
codeCouleur = ShowDialogColorBox(Me.maCouleur.BackColor)
If codeCouleur <> "" Then
Me.maCouleur.BackColor = codeCouleur
Me.maCouleur = codeCouleur
End If
End Sub
Private Sub Form_Load()
Me.maCouleur = Me.maCouleur.BackColor
End Sub
----------------------------------------------------------------------
Bonne nuit
J-Pierre
Finalement, je me suis relevé, maintenant, j'arrive à passer la couleur à
l'API et à initialiser les couleurs personnalisées à
blanc. En plus, d'un appel à l'autre, les couleurs personnalisées choisies
sont conservées...... Qui disait que la nuit porte
conseil ????????
Voilà les deux codes complets modifiés:
------------------------------------------------------------------
module boiteCouleur
------------------------------------------------------------------
Private Type CHOOSECOLOR
lStructSize As Long
hwndOwner As Long
hInstance As Long
rgbResult As Long
lpCustColors As Long
Flags As Long
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
' Constantes utilisées par ChooseColor
Private Const CC_RGBINIT = &H1&
Private Const CC_FULLOPEN = &H2&
Private Const CC_PREVENTFULLOPEN = &H4&
Private Const CC_SHOWHELP = &H8&
Private Const CC_ENABLEHOOK = &H10&
Private Const CC_ENABLETEMPLATE = &H20&
Private Const CC_ENABLETEMPLATEHANDLE = &H40&
Private Const CC_SOLIDCOLOR = &H80&
Private Const CC_ANYCOLOR = &H100&
Private dwCustClrs(0 To 15) As Long ' Tableau statique contenant les
couleurs personnalisées
Dim initFlag As Boolean
Private Declare Function ShowColour Lib "comdlg32.dll" Alias
"ChooseColorA" _
(pChoosecolor As CHOOSECOLOR) As Long
Public Function ShowDialogColorBox(Optional initCouleur As Long 16777215) As Variant
Dim tChooseColour As CHOOSECOLOR
Dim cnt As Integer
Dim r As Variant
If initFlag = False Then
initFlag = True
For cnt = 0 To 15
dwCustClrs(cnt) = RGB(255, 255, 255)
Next
End If
Dim Thread As Long
Thread = GetCurrentThreadId()
hHook = SetWindowsHookEx(WH_CBT, AddressOf WinProc, 0, Thread)
With tChooseColour
.lStructSize = Len(tChooseColour)
.hwndOwner = hWndAccessApp
.lpCustColors = VarPtr(dwCustClrs(0))
.Flags = CC_ANYCOLOR Or CC_RGBINIT Or CC_FULLOPEN
.rgbResult = initCouleur ' default color will put cursor on this
Color
End With
r = ShowColour(tChooseColour)
If r = 0 Then
ShowDialogColorBox = ""
Else
ShowDialogColorBox = tChooseColour.rgbResult
End If
End Function
-------------------------------------------------------------
formulaire frmBoiteCouleur
------------------------------------------------------------
avec une zone de texte "maCouleur" et un bouton "Commande0"
Le code VBA:
Private Sub Commande0_Click()
Dim codeCouleur As String
codeCouleur = ShowDialogColorBox(Me.maCouleur.BackColor)
If codeCouleur <> "" Then
Me.maCouleur.BackColor = codeCouleur
Me.maCouleur = codeCouleur
End If
End Sub
Private Sub Form_Load()
Me.maCouleur = Me.maCouleur.BackColor
End Sub
----------------------------------------------------------------------
Bonne nuit
J-Pierre
Finalement, je me suis relevé, maintenant, j'arrive à passer la couleur à
l'API et à initialiser les couleurs personnalisées à
blanc. En plus, d'un appel à l'autre, les couleurs personnalisées choisies
sont conservées...... Qui disait que la nuit porte
conseil ????????
Voilà les deux codes complets modifiés:
------------------------------------------------------------------
module boiteCouleur
------------------------------------------------------------------
Private Type CHOOSECOLOR
lStructSize As Long
hwndOwner As Long
hInstance As Long
rgbResult As Long
lpCustColors As Long
Flags As Long
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
' Constantes utilisées par ChooseColor
Private Const CC_RGBINIT = &H1&
Private Const CC_FULLOPEN = &H2&
Private Const CC_PREVENTFULLOPEN = &H4&
Private Const CC_SHOWHELP = &H8&
Private Const CC_ENABLEHOOK = &H10&
Private Const CC_ENABLETEMPLATE = &H20&
Private Const CC_ENABLETEMPLATEHANDLE = &H40&
Private Const CC_SOLIDCOLOR = &H80&
Private Const CC_ANYCOLOR = &H100&
Private dwCustClrs(0 To 15) As Long ' Tableau statique contenant les
couleurs personnalisées
Dim initFlag As Boolean
Private Declare Function ShowColour Lib "comdlg32.dll" Alias
"ChooseColorA" _
(pChoosecolor As CHOOSECOLOR) As Long
Public Function ShowDialogColorBox(Optional initCouleur As Long 16777215) As Variant
Dim tChooseColour As CHOOSECOLOR
Dim cnt As Integer
Dim r As Variant
If initFlag = False Then
initFlag = True
For cnt = 0 To 15
dwCustClrs(cnt) = RGB(255, 255, 255)
Next
End If
Dim Thread As Long
Thread = GetCurrentThreadId()
hHook = SetWindowsHookEx(WH_CBT, AddressOf WinProc, 0, Thread)
With tChooseColour
.lStructSize = Len(tChooseColour)
.hwndOwner = hWndAccessApp
.lpCustColors = VarPtr(dwCustClrs(0))
.Flags = CC_ANYCOLOR Or CC_RGBINIT Or CC_FULLOPEN
.rgbResult = initCouleur ' default color will put cursor on this
Color
End With
r = ShowColour(tChooseColour)
If r = 0 Then
ShowDialogColorBox = ""
Else
ShowDialogColorBox = tChooseColour.rgbResult
End If
End Function
-------------------------------------------------------------
formulaire frmBoiteCouleur
------------------------------------------------------------
avec une zone de texte "maCouleur" et un bouton "Commande0"
Le code VBA:
Private Sub Commande0_Click()
Dim codeCouleur As String
codeCouleur = ShowDialogColorBox(Me.maCouleur.BackColor)
If codeCouleur <> "" Then
Me.maCouleur.BackColor = codeCouleur
Me.maCouleur = codeCouleur
End If
End Sub
Private Sub Form_Load()
Me.maCouleur = Me.maCouleur.BackColor
End Sub
----------------------------------------------------------------------
Bonne nuit
J-Pierre