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 :

Listbox et index


Sujet :

C++Builder

  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Par défaut Listbox et index
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
     
    //---------------------------------------------------------------------------
     
      #include <windows.h>
    #include <vcl.h>
    #pragma hdrstop
     
    #define __WIN__
    #include "include/mysql.h"
     
    #include <registry.hpp>
     
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::test_serveurClick(TObject *Sender)
    {
     
     
    ListBox->Clear();
    ListBox1->Clear();
    ListBox2->Clear();
    ListBox3->Clear();
     
     
     
    MYSQL *mySQL;
    mySQL = mysql_init(NULL);
     
    if (!mysql_real_connect(mySQL, "127.0.0.1", "cedced", "12345678" ,"articles", 3306, NULL, 0))
    {
      Panel1->Color=clRed;
      Panel1->Caption="Echec";
         // la connection a échoué
     
    }
     else
     {
     
      Panel1->Caption="Ok";
          // la connection a réussi
     
     
     
     
     
     
     
       // liste données d une table
     
    MYSQL_RES *myRES2;
    MYSQL_ROW myROW2;
    AnsiString aStr2;
     
    TListItem *ListItem;
    TListColumn *pColumn;
     
    if (!mysql_query(mySQL, "select * from articles order by ref"))
     
      { myRES2 = mysql_store_result(mySQL);
            if (myRES2)
            {
                for(unsigned int i = 0; i < 10; i++)
                {
                    myROW2 = mysql_fetch_row(myRES2);
     
     
     
                    for(unsigned int j = 0; j < mysql_num_fields(myRES2); j++)
                    {
    ///////////////////  debut boucle ajout dans listbox souhaitée
    if ( j==0 ) { aStr.sprintf("%s", myROW2[j]);  ListBox1->Items->Add(aStr);  }
    if ( j==1 ) { aStr.sprintf("%s", myROW2[j]);  ListBox2->Items->Add(aStr);  }
    if ( j==2 ) { aStr.sprintf("%s", myROW2[j]);  ListBox3->Items->Add(aStr);  }
    ///////////////////  fin boucle ajout dans listbox souhaitée
                     }
                }
     
           }
         mysql_free_result(myRES2);
      }
     
     
     
     
     
    //////////////////
     
     
              mysql_close(mySQL);
    }
    }
     
    /////////////////////////////////////////////
    ///////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////
     
    void __fastcall TForm1::ListBox1DrawItem(TWinControl *Control, int Index,
          TRect &Rect, TOwnerDrawState State)
    {
       // on récupère le TListBox qui a lancé l'évènement, et son TCanvas
    TListBox * pListBox = ((TListBox *)Control);
    TCanvas * pCanvas = pListBox->Canvas;
     
    // on met les lignes paires en fond jaune
    if ((Index % 2)==0)
    {
       pCanvas->Brush->Color = clYellow;
    }
     
    // on met les lignes sélectionnées en jaune sur fond rouge
    if(State.Contains(odSelected))
    {
         ListBox1->Canvas->Brush->Color = clRed;
       ListBox1->Canvas->Font->Color = clYellow;
    } 
     
     
    // on dessine le fond de la cellule
    pCanvas->FillRect(Rect);
     
    // on dessine le texte de la cellule
    AnsiString Data = pListBox->Items->Strings[Index];
    Rect.left += 2;
    pCanvas->TextOut(Rect.Left,Rect.Top,Data);
     
     
     
    }
    //---------------------------------------------------------------------------


    Salut

    J ai un petit souci , comme vous pouvez le voir lorsque je clique sur un item , celui s affiche autrement alors voilà ma question en fait je voudrais recuperer l index de l item selectionné dans la listbox1 et ainsi pouvoir colorier les items correspondants sur les listbox 2 et 3

    Comment faire ?
    Je pense d abord ne plus appliquer la fonction listbox1drawitem sur les listbox 2 et 3 , çà c est facile mais apres ?

    En fait pour resumer je voudrais ( sachant que les listbox sont alignées horizontalement ) marquer une "ligne" , si qq1 a le temps , je le remercie .

    Bone journée

  2. #2
    say
    say est déconnecté
    Membre Expert
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Par défaut
    quelques pistes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    lb->Items->Strings[Index]
    gérer toi-même le onDrawItem ne mettant le style de ta listBox en lbOwnerDrawFixed

    un exemple de code pour coloration :
    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
     TListBox * lb = dynamic_cast<TListBox *>(Control);
        if ( lb != NULL )
        {
            TFont * LBFont = new TFont;
            LBFont->Name  = lb->Font->Name;
            LBFont->Size  = lb->Font->Size;
     
            AnsiString specific = lb->Items->Strings[Index].SubString( lb->Items->Strings[Index].Length() - 1, 2);
            if ( specific == "DD" )
                LBFont->Color = clFuchsia;
            else if ( specific == "TV" )
                LBFont->Color = clBlue;
            else if ( specific == "OT" )
                LBFont->Color = clRed;
            else
            {
                if ( State.Contains(odSelected) )
                    LBFont->Color = clWhite;
                else
                    LBFont->Color = clBlack;
            }
     
            lb->Canvas->FillRect(Rect);
            lb->Canvas->Font->Assign(LBFont);
            lb->Canvas->TextOut(Rect.Left+2,Rect.Top,lb->Items->Strings[Index]);
     
            delete LBFont;

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Par défaut
    J ai opté pour la solution de facilité moins joli certes mais efficace

    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
     
     
    void __fastcall TForm1::ListBox1DrawItem(TWinControl *Control, int Index,
          TRect &Rect, TOwnerDrawState State)
    {
     
    TListBox * pListBox = ((TListBox *)Control);
    TCanvas * pCanvas = pListBox->Canvas;
     
    if(State.Contains(odSelected))
    {
    int lb1select ;
    lb1select = ListBox1-> ItemIndex    ;
    ListBox2->ItemIndex=lb1select;
    ListBox3->ItemIndex=lb1select;
    }
    /////////////////////////////////////////////////////
    // on dessine le fond de la cellule
    pCanvas->FillRect(Rect);
    /////////////////////////////////////////////////////
    // on dessine le texte de la cellule
    AnsiString Data = pListBox->Items->Strings[Index];
    Rect.left += 2;
    pCanvas->TextOut(Rect.Left,Rect.Top,Data);
     }

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

Discussions similaires

  1. [XL-2007] listbox et index
    Par grisan29 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 15/11/2011, 19h34
  2. Réponses: 3
    Dernier message: 17/05/2006, 16h50
  3. Problème avec les Z-index et les listbox
    Par volivi dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/05/2006, 12h30
  4. listbox et index
    Par gIch dans le forum Access
    Réponses: 5
    Dernier message: 27/02/2006, 11h23
  5. Réponses: 5
    Dernier message: 18/01/2004, 16h25

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