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

C++Builder Discussion :

Sélection dans une ListBox [FAQ]


Sujet :

C++Builder

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 115
    Points : 68
    Points
    68
    Par défaut Sélection dans une ListBox
    Bonjour,

    Alors j'ai une ListBox à laquelle j'ai mis la propriété Style à lbOwnerDrawFixed pour pouvoir mettre une ligne sur 2 d'une autre couleur.

    Sauf que maintenant j'aimerais bien, si on sélectionne un élément de cette ListBox, le mettre en surbrillance bleu comme ceci est le cas si on laisse la propriété Style à lbOwnerDrawVariable

    Il faur gérer ceci dans l'évènement : OnClick ou onDrawItem ?? ou autre


    MERCI DE VOTRE AIDE

  2. #2
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonjour,
    Moi je dirais toujours dans le OnDrawItem...Je te livres ici un peu de code -ca vaut ce que ca vaut, vous avez le droit de me corriger d'ailleurs - ou seule une partie t'interessera vraimment par rapport a ta question; il s'agit de la partie testée avec :
    if(State.Contains(odSelected))
    qui teste si l'item est selectionné...
    Ci joint petit bout de code :
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    void __fastcall TFVierge::NListBoxDrawItem(TWinControl *Control, int Index,
          const TRect &Rect, TOwnerDrawState State)
    {
          TCanvas *pCanvas = ((TListBox *)Control)->Canvas;
          if ((Index%2)==0) pCanvas->Brush->Color = clSilver;
                           TField *pField;
                           switch (FVierge->ModeFiche[0])
                           {
                           case 'R':
                           pField = FVierge->NTable->Fields->Fields[3];
                           break;
                           case 'C':
                           pField = FVierge->NTable->Fields->Fields[4];
                           break;
                           case 'L':
                                    switch (FVierge->ModeFiche[1])
                                    {
                                    case 'M':
                                    pField = FVierge->NTable->Fields->Fields[7];
                                    break;
                                    case 'S':
                                    pField = FVierge->NTable->Fields->Fields[8];
                                    break;
                                    }
                           break;
                           case 'T':
                                    switch (FVierge->ModeFiche[1])
                                    {
                                    case 'M':
                                    pField = FVierge->NTable->Fields->Fields[26];
                                    break;
                                    case 'S':
                                    pField = FVierge->NTable->Fields->Fields[27];
                                    break;
                                    }
                           break;
                           case 'A':
                           pField = FVierge->NTable->Fields->Fields[54];
                           break;
                           }
          if (pField->AsString.operator ==(((TListBox *)Control)->Items->Strings[Index]))
                           {
                            pCanvas->Brush->Color = clCream;
                            pCanvas->FrameRect(Rect);
                            pCanvas->Font->Color = clRed;
                           }
                           else
                           {
          if(State.Contains(odSelected))
                           {
                            pCanvas->Brush->Color = clCream;
                            pCanvas->FillRect(Rect);
                            pCanvas->Font->Color = clMaroon;
                           }
          else
                           {
                            pCanvas->FillRect(Rect);
                           }
                           }
          if (pField->AsString.operator ==(((TListBox *)Control)->Items->Strings[Index]))
                           {
                           int LTexte = pCanvas->TextWidth(((TListBox *)Control)->Items->Strings[Index]);
                           int DTexte = (Rect.Width() - LTexte)/2;
          pCanvas->TextOut(DTexte,Rect.Top+1, ((TListBox *)Control)->Items->Strings[Index]);
                           }
          else
                           {
          pCanvas->TextOut(Rect.Left+5,Rect.Top+1, ((TListBox *)Control)->Items->Strings[Index]);
                           }
    }
    Voila, a plus tard...
    Vinc.

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 115
    Points : 68
    Points
    68
    Par défaut
    NIKEL CROME

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      if(State.Contains(odSelected))
      {
        ListBoxToDraw->Canvas->Brush->Color = clBlue;
        ListBoxToDraw->Canvas->Font->Color = clWhite;
      }
    Cela fonctionne tres bien et exactement comme je veux.

    JE TE REMERCIE BCP, c'est tres sympa

    A UNE PROCHAINE

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

Discussions similaires

  1. [Toutes versions] Perte de sélection dans une listbox
    Par alex311278 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 24/04/2015, 13h55
  2. Sélection dans une listbox
    Par philippef dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 17/03/2010, 18h52
  3. Sélection dans une Listbox
    Par lesultan2007 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 09/07/2008, 12h43
  4. lister répertoire selon sélection dans une listbox
    Par gorgoroth dans le forum Langage
    Réponses: 12
    Dernier message: 03/06/2008, 17h06
  5. Problème de sélection dans une listbox
    Par cacahuèèète dans le forum Access
    Réponses: 3
    Dernier message: 29/06/2006, 15h03

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