Page 1 sur 1

ColorRequester() & DLL

Publié : lun. 27/juil./2009 17:25
par Fortix
Salutation :D , juste une question,
le "colorrequester()" que nous fesons souvent appel via Pb est il le même que celui de "Paint" de Windows,

pour ma part je pense que oui, mais dans ce cas ce dernier provient bien d'une DLL spécifique!, que Windows & Pb utilisent, si c'est le cas alors quel est le nom de cette DLL si serviable?

:lol:

Publié : lun. 27/juil./2009 18:04
par jbernard13
oui c'est lemême , as tu regarder du coté des api?

bonne soirée Fortix

Publié : lun. 27/juil./2009 18:07
par Anonyme
comdlg32.dll "ChooseColorA"
Non ?

@+

Publié : lun. 27/juil./2009 18:37
par Fortix
:D merci pour vos réponses, je vais examiner de suite :D

Publié : lun. 27/juil./2009 19:00
par Fortix
j'ais procedé avec la méthode "OpenLibrary" ensuite "GetFunction" mais malheureusement je ne sais pas comment obtenir les noms exacts des fonctions par exemple(Hue,sat,lum,etc....),

en fait y a t il un moyen pour liste l'intégralitée des fonctions dispo dans tel ou tel libs?

Publié : lun. 27/juil./2009 19:25
par TazNormand
Toutes les APIs sont documentées sur le site de Microsoft MSDN.

Les APIS sont "consultables ici : MSDN API

par contre les exemples de MS sont souvent écrits en C#, VB .net et C++

Bonne recherche

Un exemple en VB d'utilisation de ChooseColorA

Publié : lun. 27/juil./2009 19:28
par Fortix
Super bien jouer, maintenant on va examiner tout ça :D ,merci beaucoup

Publié : mar. 28/juil./2009 12:02
par Fortix

Code : Tout sélectionner

If OpenLibrary(0, "comdlg32.dll") 
    *capAddress = GetFunction(0, "ChooseColorA")
            
    If  *capAddress
        hWndC = CallFunctionFast(*capAddress, "ChooseColorA"):Debug "Ok" 
    EndIf 
EndIf
bon après ji ni ci pas pour les paramètres :oops:

Publié : mar. 28/juil./2009 13:04
par Anonyme
avec gogole , on se débrouille :D
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
As long = integer <.i>
As String = string <.s> ou <$>

avec sa , tu fait une structure CHOOSECOLOR


tu transforme ca en constante :
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&
Ex :

Private Const CC_RGBINIT = &H1& deviens :
#CC_RGBINIT = &H1


dim dwCustClrs.i(15) ; les couleurs personnalisé


ensuite, tu créer une variable de type CHOOSECOLOR :
lpChoosecolor.CHOOSECOLOR

With lpChoosecolor
\lStructSize = sizeof(CHOOSECOLOR)
\hwndOwner = Handle de la fenetre mere
\rgbResult = Couleur par defaut
\lpCustColors = @dwCustClrs(0) ; les couleurs perso
\flags = #CC_ANYCOLOR | #CC_RGBINIT | #CC_FULLOPEN
EndWith

Tu passes cette variable a la fonction ChooseColorA


le prototype a l'air

ChooseColorA( *struct.CHOOSECOLOR )

je suis sous nux , donc peu pas t'aider plus.

@++

Publié : mar. 28/juil./2009 19:21
par Fortix
Merci beaucoup @Cpl.Bator :D

Publié : mer. 29/juil./2009 21:02
par Fortix

Code : Tout sélectionner

#CC_RGBINIT = 1
#CC_FULLOPEN = 2 
#CC_PREVENTFULLOPEN = 4 
#CC_SHOWHELP = 8
#CC_ENABLEHOOK ;= 10 
#CC_ENABLETEMPLATE; = 20 
#CC_ENABLETEMPLATEHANDLE; = 40
#CC_SOLIDCOLOR = 80
#CC_ANYCOLOR = 100

Dim dwCustClrs.i(15)

lpChoosecolor.CHOOSECOLOR 

With lpChoosecolor 
    \lStructSize = SizeOf(CHOOSECOLOR) 
    \hwndOwner = #PB_Ignore;ju;Handle de la fenetre mere 
    \rgbResult = #Gray ;couleur par default
    \lpCustColors = @dwCustClrs(0) ; les couleurs perso 
    \flags = #CC_ANYCOLOR | #CC_RGBINIT | #CC_FULLOPEN 
EndWith

Debug lpChoosecolor\lpCustColors



Prototype.l protohue(clrt)

If OpenLibrary(0, "comdlg32.dll")
    
    ChooseColorA.protohue=GetFunction(0, "ChooseColorA")
    
    Debug ChooseColorA( *struct.CHOOSECOLOR )
EndIf

 

; If OpenLibrary(0, "comdlg32.dll") 
;     *capAddress = GetFunction(0, "ChooseColorA")
;             
;     If  *capAddress
;         hWndC.f = CallFunctionFast(*capAddress, "ChooseColorA",@lpChoosecolor.CHOOSECOLOR):Debug "Ok" 
;         Debug hWndC
;     EndIf 
; EndIf
j'ais probablement fait une faute

Publié : mer. 29/juil./2009 21:34
par Anonyme
remplace
Debug ChooseColorA( *struct.CHOOSECOLOR )
par
Debug ChooseColorA( lpChoosecolor )
Si un windozien pouvais lui venir en aide pour les tests ^^

Publié : mer. 29/juil./2009 22:02
par Thyphoon
Je viens de faire des essais et sans réussite j'ai trouvé un code (hélas pas en pb)qui pourrait peut être aidé ... Moi je sais que les API et MSDN j'y vais a reculons ...tellement les choses son compliqué pour faire des choses simple ... Il y a peut être une raison a ça, mais je ne l'ai toujours pas trouvé ... :?

Code : Tout sélectionner

Option Compare Database
Dim RGB1 As Long 'Détail.backColor
 
 
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
 
Private Declare Function CHOOSECOLOR Lib "comdlg32.dll" Alias "ChooseColorA" _
(pChoosecolor As CHOOSECOLOR) As Long
 
Private Function ShowColor() As Long
    Dim CustomColors As Byte
    Dim CC As CHOOSECOLOR
    Dim Custcolor(16) As Long
    Dim lReturn As Long
    
    'set the structure size
    CC.lStructSize = Len(CC)
    'Set the owner
    CC.hWndOwner = Me.hwnd
    'set the application's instance
    CC.hInstance = Application.hWndAccessApp
    'set the custom colors (converted to Unicode)
    CC.lpCustColors = StrConv(CustomColors, vbUnicode)
    'no extra flags
    CC.flags = 0
    RGB1 = Section(acDétail).BackColor 'mise en mémoire arrière-plan courant
    
    'Show the 'Select Color'-dialog
     If CHOOSECOLOR(CC) <> 0 Then
        ShowColor = CC.rgbResult
            CustomColors = StrConv(CC.lpCustColors, vbFromUnicode)
                CustomColors = StrConv(CC.lpCustColors, vbUnicode)
                    Else
                      ShowColor = RGB1 'par défaut RGB1=128; RGB1=RGB1 Précédent (si annulation, sinon le fond est NOIR.
     End If
  'RGB1 = ShowColor
End Function
 
Private Sub Command0_Click()
'MsgBox ShowColor '(pour afficher le code RGB en  mode MsgBox)
Section(acDétail).BackColor = ShowColor
End Sub

Publié : mer. 29/juil./2009 22:21
par Fortix
merci pour votre aides
je sais, jsuis à plaindre :lol:

je vais de suite analyser le code visual basic de @Thyphoon

encore merci à vous :D