ColorRequester() & DLL

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

ColorRequester() & DLL

Message 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:
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Message par jbernard13 »

oui c'est lemême , as tu regarder du coté des api?

bonne soirée Fortix
Anonyme

Message par Anonyme »

comdlg32.dll "ChooseColorA"
Non ?

@+
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Message par Fortix »

:D merci pour vos réponses, je vais examiner de suite :D
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Message 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?
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Message 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
Image
Image
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Message par Fortix »

Super bien jouer, maintenant on va examiner tout ça :D ,merci beaucoup
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Message 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:
Anonyme

Message 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.

@++
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Message par Fortix »

Merci beaucoup @Cpl.Bator :D
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Message 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
Anonyme

Message par Anonyme »

remplace
Debug ChooseColorA( *struct.CHOOSECOLOR )
par
Debug ChooseColorA( lpChoosecolor )
Si un windozien pouvais lui venir en aide pour les tests ^^
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message 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
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Message 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
Répondre