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 :

Pouvoir gérer la couleur de fond de la partie détail d'un formulaire [AC-2007]


Sujet :

IHM

  1. #21
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 028
    Points : 24 579
    Points
    24 579
    Par défaut
    La fonction RBG() renvoi toujours une valeur de type Long (C'EST LE RESULTAT de la fonction), c'est cette valeur qui est affichée dans les propriétés qui gèrent les couleurs. Et ces propriétés n'acceptent QUE des valeurs de type Long.

    Si tu attribue à une propriété de couleur une chaine de caractère, comme tu le fait dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    detail.backcolor = "rgb(...)"
    cela ne peut que provoquer des erreurs.

    C'est pour cela qu'il vaut mieux stocker directement les valeurs résultats (LE RESULTAT DE LA FONCTION) et pas la fonction elle-même.

    Remarque que tu stockes ce que tu veux dans tes tables, mais il faut savoir en payer le prix, et dans ce cas le prix c'est de faire des EVAL(). Pas très propre tout ça.

    Cordialement,

  2. #22
    Membre averti Avatar de Oliv'83
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Mars 2008
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2008
    Messages : 421
    Points : 309
    Points
    309
    Par défaut
    Ma question n'était pas bien formulée :

    Citation Envoyé par loufab Voir le message
    La fonction RBG() renvoi toujours une valeur de type Long (C'EST LE RESULTAT de la fonction), c'est cette valeur qui est affichée dans les propriétés qui gèrent les couleurs.
    A mon faible niveau, une couleur se définie par un mélange de trois couleurs Red/Blue/Green et donc se définit par trois données Ex: un Orange : RGB(255, 128, 0).

    Comment fais tu pour afficher les propriétés dont tu parles et qui doivent si je comprends bien me donner une valeur de type Long (sans doute 33023 si j'utilise correctement le formulaire de Simplifi)?

    Oliv'

  3. #23
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 028
    Points : 24 579
    Points
    24 579
    Par défaut
    Pour afficher les propriétés il faut être en mode Création sur le formulaire (ou l'état) et faire un clic droit puis Propriétés.

  4. #24
    Membre averti Avatar de Oliv'83
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Mars 2008
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2008
    Messages : 421
    Points : 309
    Points
    309
    Par défaut
    OK et où trouves-tu dans ces propriétés la valeur de la couleur en format long?

    Moi je ne trouve qu'un format du type #FF8000 qui n'est pas, sauf erreur de ma part, au format Long.

    Oliv'

  5. #25
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 028
    Points : 24 579
    Points
    24 579
    Par défaut
    C'est de l'hexa (d'ou le # avant, 2 digit par couleur 00 = 0, FF=255) si tu y met un long ça marche aussi.

    Une petite conversion Hexa -> Décimal s'impose.

  6. #26
    Membre averti Avatar de Oliv'83
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Mars 2008
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2008
    Messages : 421
    Points : 309
    Points
    309
    Par défaut
    N'ayant jamais été confronté à de l'hexadécimal dans mes (courtes) études je suis allé sur un site de conversion et FF8000 donne 16744448 (où comment transformer de l'orange en bleu, (c'est pas l'idée d'un dessin animé de Tintin par hasard ???)).

    Ou si je prends le chiffres 2 par 2 on a FF = 255, 80 = 128 et 00=00 donc on retrouve le RGB ce qui me fait dire que c'est ce que tu me disais mais je n'ai toujours pas de valeur en format Long...

    Comment y arrives-tu ?

    Oliv'

  7. #27
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 028
    Points : 24 579
    Points
    24 579
    Par défaut
    J'utilise cette petite fonction pour faire mes conversions Hexa en Long :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function ConvHex2Long(ByVal strHex As String) As Long
     
    ConvHex2Long = rgb(Val("&H" & Mid(strHex, 2, 2)), Val("&H" & Mid(strHex, 4, 2)), Val("&H" & Mid(strHex, 6, 2)))
     
    End Function

  8. #28
    Membre averti Avatar de Oliv'83
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Mars 2008
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2008
    Messages : 421
    Points : 309
    Points
    309
    Par défaut
    En effet avec ta fonction mon Orange devient... Orange

    Merci beaucoup loufab pour le temps que tu m'as consacré.

    Maintenant je reviens vers Simplifi,

    Ton code marche du tonnerre, j'ai réussi à construire le formulaire qui va avec et j'obtiens les valeurs Long dont j'ai besoin.

    Merci beaucoup .

    Je vais essayer de faire un post récaputilatif de l'ensemble des actions entreprises pour avoir mon résultat, afin de simplifier la lecture de personnes pouvant être interessées par cette discussion


    Oliv'

  9. #29
    Membre averti Avatar de Oliv'83
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Mars 2008
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2008
    Messages : 421
    Points : 309
    Points
    309
    Par défaut Solution
    Bonjour à tous,

    J'ai résolu mon problème grâce à plusieurs d'entre vous que je remercie. Je fais dans ce post un résumé de la solution pour centraliser l'ensemble des infos qui m'ont été nécessaires (Je précise que je suis un "bon débutant" sur Access et que par conséquent je ne dois pas utiliser les dénominations exactes et que les parties de code que j'ai écrit tout seul doivent être perfectibles) :

    Mon problème :

    J'ai créé un formulaire et je veux pouvoir gérer la couleur de fond de la zone Détail en fonction de son contenu ou d'une variable qui détermine cette couleur.

    Les bases de départ :

    Ce formulaire est en mode Formulaires Continus et est alimenté par une requête. La couleur de fond doit donc pouvoir varier pour chaque enregistrement. Cette requête contient un champ Code_Couleur qui doit définir la couleur voulue.

    La résolution :

    Le plus simple est de définir ce champ dans un format numérique afin d'avoir une valeur au format Long, format nécessaire pour utiliser le code ci-dessous.

    Dans un deuxième temps je vous expliquerai comment obtenir un code au format Long selon plusieurs méthodes.

    Pour définir la couleur de fond de la zone détail il faut se servir de l'évènement Sur le dessin de l'objet détail du formulaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Détail_Paint()
     
    Me.Détail.BackColor = Nz(Me.Code_Couleur, 255)
     
    End Sub
    J'ai utilisé le Nz afin d'éviter toute valeur Null de la variable Code_Couleur, si par malheur c'était le cas j'ai mis la couleur rouge (dont la valeur en Long est 255) par défaut pour attirer l'attention.

    Voilà c'était aussi simple que ça...

    Mais un autre problème est survenu, Comment trouver la valeur au format Long d'une couleur?

    Je vous propose deux méthodes complémentaires. Pour chacunes d'entre elles j'ai créé un formulaire qui facilite la visualisation.

    Premièrement la méthode, selon Simplifi:

    Création d'une table dans laquelle seront stockées les résultats des recherches précédentes afin de retrouver plus rapidement les couleurs utilisées précédement :
    Dans cette tables (tbl_Couleur) je définis 3 champs :
    N° / NuméroAuto
    Nom_Couleur / Text
    Couleur / Numérique

    A partir de cette table je créé un Formulaire double affichage.

    Sur la partie haute je rajoute un bouton et sur l'événement Sur clic je mets le code suivant :

    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
    Private Sub cmdColor_Click()
    Dim couleur_mémo As String
        ' ===== récupération de la couleur =====
        If Couleur > 0 Then couleur_mémo = Couleur
        Couleur = ShowColor(Me.Hwnd)
        If Couleur <= 0 Then Couleur = couleur_mémo
        Nom_Couleur.BackColor = Couleur
        DoCmd.RunCommand acCmdSaveRecord
        Me.Refresh
    End Sub
     
    Private Sub Détail_Paint()
    On Error Resume Next
     Nom_Couleur.BackColor = Couleur
    End Sub
    Dans un module que j'ai crée je mets le code suivant que j'ai récupéré précédemment dans l'article de Jeannot45 traitant de "Création et manipulation d'un planning" ( http://jeannot45.developpez.com/arti...stionplanning/)

    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
    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) As Long
        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 = Handle
        'set the custom colors (converted to Unicode)
        cc.lpCustColors = StrConv(CustomColors, vbUnicode)
        'no extra flags
        cc.flags = 0
     
        'Show the 'Select Color'-dialog
        If CHOOSECOLOR(cc) <> 0 Then
            ShowColor = cc.rgbResult
            CustomColors = StrConv(cc.lpCustColors, vbFromUnicode)
        Else
            ShowColor = -1
        End If
    End Function
    Normalement, si je n'ai rien oublié, lorsque vous cliquez sur le bouton une palette s'ouvre, vous choisissez une couleur et automatiquement la valeur Long s'affiche dans la case Couleur et la case Nom_Couleur prend comme couleur de fond la couleur choisit.

    Deuxième méthode, selon loufab,

    Il est possible de récupérer la valeur hexadécimale d'une couleur (#XXXXXX où les X sont soit des numéros soit des lettres de A à F) notamment dans la propriété Couleur fond de l'onglet Format d'une Zone de texte par exemple.

    Une fois cette valeur connue, sur un formulaire vierge, je créé deux Zones de texte (txt_Val_Hexa et txt_Val_Long). Sur l'événement Après MAJ de txt_Val_Hexa je mets le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub txt_Val_Hexa_AfterUpdate()
     
    Me.txt_Val_Long = ConvHex2Long(Me.txt_Val_Hexa)
     
    txt_Val_Long.BackColor = Me.txt_Val_Long
     
    End Sub
     
    Public Function ConvHex2Long(ByVal strHex As String) As Long
     
    ConvHex2Long = RGB(Val("&H" & Mid(strHex, 2, 2)), Val("&H" & Mid(strHex, 4, 2)), Val("&H" & Mid(strHex, 6, 2)))
     
    End Function
    Ainsi quand je rentre le code Hexadécimale de ma couleur cela me donne le code Long et cela colorie le fond de la Zone texte de la couleur souhaitée.



    J'espère avoir été clair et que ce post pourra servir à de nombreux visiteurs du site.

    Merci à micniv, miamou, Philippe JOCHMANS, Simplifi et loufab de votre aide pour venir à bout de ce problème.

    A bientôt sur ce merveilleux forum

    Oliv'

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 14
    Dernier message: 24/05/2013, 10h43
  2. TDBGRID - Couleur de fond d'une seule cellule
    Par cgo dans le forum Bases de données
    Réponses: 5
    Dernier message: 11/09/2009, 10h16
  3. Réponses: 4
    Dernier message: 23/06/2004, 14h30
  4. debutant : couleur de fond d'une application direct3D
    Par ptidrone dans le forum DirectX
    Réponses: 2
    Dernier message: 12/06/2004, 17h08
  5. Changer la couleur de fond de l'écran
    Par tnk dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 19/01/2003, 01h37

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