IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

Créer une interface utilisateur pour modifier des couleurs [AC-2007]


Sujet :

IHM

  1. #1
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Octobre 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 330
    Points : 207
    Points
    207
    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,

  2. #2
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Octobre 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 330
    Points : 207
    Points
    207
    Par défaut
    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.

  3. #3
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    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 : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    Essaie avec la fonction ainsi modifiée (ajout deuxième argument pour la couleur initiale) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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+

  4. #4
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Octobre 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 330
    Points : 207
    Points
    207
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
        cc.lpCustColors = VarPtr(CustomColors(0))
    j'ai donc laissé la ligne que j'avais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        cc.lpCustColors = StrConv(CustomColors, vbUnicode)
    . "VarPtr" sert à quoi pour ma gouverne ?

    @+

  5. #5
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    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 : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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+

  6. #6
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    bjr,

    effectivement lpCustColors est un pointeur
    par contre attention à la déclaration des tableaux, par défaut ça commence à zéro
    donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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)

  7. #7
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    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 : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Salut Thierry,

    Entièrement d'accord avec toi.

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

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer une interface JAVA pour un programme non JAVA
    Par alieonor dans le forum Débuter
    Réponses: 8
    Dernier message: 11/09/2008, 15h34
  2. Réponses: 1
    Dernier message: 25/06/2008, 10h19
  3. créer une interface utilisateur console pour requetes sur mysql
    Par begonia dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 23/03/2007, 15h16
  4. [AJAX] Créer une interface web pour un programme Java
    Par Wookai dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 30/03/2006, 10h10
  5. Réponses: 10
    Dernier message: 02/11/2005, 11h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo