Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/08/2011, 23h03   #1
Membre habitué
 
Homme
Conseil - Consultant en systèmes d'information
Inscription : octobre 2008
Messages : 212
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : octobre 2008
Messages : 212
Points : 126
Points : 126
Par défaut Créer une interface utilisateur pour modifier des couleurs

Bonjour à tous et à toutes,

J'ai créé une application qui utilise, classiquement, des tables pour spécifier des caractéristiques.

Afin de rendre les formulaires et les états plus "parlants", je modifie la couleur de fond du contrôle en fonction de la valeur de la table. Jusque là je sais faire ...

Par contre, je voudrais créer un interface pour que l'utilisateur puisse affecter, lui même, les couleurs qu'il souhaite utiliser. En fait, je voudrais pouvoir utiliser le petit interface que l'on trouve dans les propriétés d'un contrôle : "Couleur fond" ... Autre couleur ...
Merci de vos pistes, de vos liens et de vos contributions.
Cordialement,
Triton972 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 00h10   #2
Membre habitué
 
Homme
Conseil - Consultant en systèmes d'information
Inscription : octobre 2008
Messages : 212
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : octobre 2008
Messages : 212
Points : 126
Points : 126
J'ai peut-être posté un peu tôt ...

J'ai trouvé la réponse ici :
http://access.developpez.com/sources...ndlg#ShowColor

Il me manque juste un petit réglage. Comment faire pour faire apparaitre dans la fenêtre de sélection la couleur précédemment choisie ...
Merci à vous.
Triton972 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 23h31   #3
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonsoir,

Essaie avec la fonction ainsi modifiée (ajout deuxième argument pour la couleur initiale) :
Code :
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
Private Declare Function CHOOSECOLOR Lib "comdlg32.dll" Alias _
        "ChooseColorA" (pChoosecolor As CHOOSECOLOR) As Long
 
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
 
Public Function ShowColor(Handle As Long, Optional lgCouleurInit As Long = -1) As Long
    Dim cc As CHOOSECOLOR
    Dim CustomColors(16) As Long
    Dim lReturn As Long
 
    'set the structure size
    cc.lStructSize = Len(cc)
    'Set the owner
    cc.hwndOwner = Handle
    'set the custom colors
    cc.lpCustColors = VarPtr(CustomColors(0))
    'no extra flags
    cc.flags = 0
    ' Si Couleur initiale
    If lgCouleurInit <> -1 Then
       cc.flags = cc.flags Or 1&
       cc.rgbResult = lgCouleurInit
    End If
    'Show the 'Select Color'-dialog
    If CHOOSECOLOR(cc) <> 0 Then
        ShowColor = cc.rgbResult
    Else
        ShowColor = -1
    End If
End Function
A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/08/2011, 14h55   #4
Membre habitué
 
Homme
Conseil - Consultant en systèmes d'information
Inscription : octobre 2008
Messages : 212
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : octobre 2008
Messages : 212
Points : 126
Points : 126
Bonjour LepZepII,

Ta modif est pile poil ce que je charchais. Merci !

Seul petit problème que j'ai réglé, mon application ne reconnait pas
Code :
    cc.lpCustColors = VarPtr(CustomColors(0))
j'ai donc laissé la ligne que j'avais
Code :
    cc.lpCustColors = StrConv(CustomColors, vbUnicode)
. "VarPtr" sert à quoi pour ma gouverne ?

@+
Triton972 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 18h43   #5
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

C'est étonnant, chez moi c'est l'inverse.
VarPtr renvoie l'adresse mémoire (pointeur) d'une variable VB.

lpCustColors est un pointeur sur un tableau d'entiers 32 bits.
En réalité dans mon code, lpCustColors est déclaré en type Long, et non String.
Code :
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
Private Declare Function CHOOSECOLOR Lib "comdlg32.dll" Alias _
        "ChooseColorA" (pChoosecolor As CHOOSECOLOR) As Long
 
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
 
Public Function ShowColor(Handle As Long, Optional lgCouleurInit As Long = -1) As Long
    Dim cc As CHOOSECOLOR
    Dim CustomColors(16) As Long
    Dim lReturn As Long
 
    'set the structure size
    cc.lStructSize = Len(cc)
    'Set the owner
    cc.hwndOwner = Handle
    'set the custom colors
    CustomColors(0) = 144
    CustomColors(1) = 160
    CustomColors(2) = 176
    CustomColors(3) = 192
    CustomColors(4) = 208
    CustomColors(5) = 224
    CustomColors(6) = 240
    CustomColors(7) = 255
    CustomColors(8) = 144& * 256
    CustomColors(9) = 160& * 256
    CustomColors(10) = 176& * 256
    CustomColors(11) = 192& * 256
    CustomColors(12) = 208& * 256
    CustomColors(13) = 224& * 256
    CustomColors(14) = 240& * 256
    CustomColors(15) = 255& * 256
    cc.lpCustColors = VarPtr(CustomColors(0))
 
    'no extra flags
    cc.flags = 0
    ' Si Couleur initiale
    If lgCouleurInit <> -1 Then
       cc.flags = cc.flags Or 1&
       cc.rgbResult = lgCouleurInit
    End If
    'Show the 'Select Color'-dialog
    If CHOOSECOLOR(cc) <> 0 Then
        ShowColor = cc.rgbResult
    Else
        ShowColor = -1
    End If
End Function
A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 10h21   #6
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 939
Points : 7 939
bjr,

effectivement lpCustColors est un pointeur
par contre attention à la déclaration des tableaux, par défaut ça commence à zéro
donc :
Code :
Dim CustomColors(16) As Long
définit un tableau de 17 valeurs avec des indices de 0 à 16

personnellement je préfère mettre la borne inférieure de manière explicite :
Code :
Dim CustomColors(0 To 15) As Long
cela ne change pas grand chose mais c'est plus clair et on n'a pas besoin d'aller voir s'il y a un "option base n" en haut du module
au moins je suis sûr que mon tableau commence à l'indice 0 mais c'est un avis personnel

concernant ce tableau justement, il est possible de le conserver d'un appel sur l'autre en le rendant statique
Code :
Static CustomColors(0 To 15) As Long
(et donc on ne le remplit pas par le code évidemment)
comme ça il est réutilisé à chaque appel et si l'utilisateur choisi des couleurs personnalisées, il les retrouve à chaque appel (tant que l'appli n'est pas fermée)
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 20h36   #7
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Salut Thierry,

Entièrement d'accord avec toi.

Généralement j'évite le codage implicite.
Là, j'ai fauté

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h13.


 
 
 
 
Partenaires

Hébergement Web