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 :

Problème avec ComboBox dans un StringGrid !


Sujet :

C++Builder

Vue hybride

petitclem Problème avec ComboBox dans... 09/04/2010, 09h34
henderson Salut ! Si on suppose que... 09/04/2010, 11h46
petitclem Merci henderson, mais je... 09/04/2010, 11h53
henderson Salut ! Pourtant, je pense... 09/04/2010, 13h42
petitclem Merci henderson, cette... 09/04/2010, 14h20
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut Problème avec ComboBox dans un StringGrid !
    Bonjour à tous,

    Dans mon application, j'ai un StrinGrid et j'ai créé des ComboBox sur la colonne 3 de mon StrinGrid, quand je clic sur ma combobox pour changer l'item, ça change les valeurs affichées sur la cellule d'à coté colonne 4.
    Mon soucis est que ceci est pris en compte que si j'ai sélectionné (ou cliqué) sur une autre case de la même ligne de mon StrinGrid alors je pensai simuler un clic de souris ou autre chose comme ça pour que lorsque l'utilisateur veut sélectionner un item dans la ComboBox c'est comme si il cliquait sur la cellule de StrinGrid qui se trouve en dessous.

    Merci d'avance pour votre aide, à bientôt !

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Si on suppose que j'ai tout compris, tu pourrais éventuellement affecter la valeur de la ligne au Tag de chaque combobox
    Pour faire dans une événementielle commune à toutes les combobox (par exemple la OnChange) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TComboBox *CB = (TComboBox*)Sender;
    StringGrid1->Cells[ 4 ][ CB->Tag ] = CB->Items-Strings[ CB->ItemIndex ];
    Autrement ... peut-être avec OnDrawItem et Objects ... (toute cellule de la colonne 4 dessinant le contenu de la combobox qui lui est associée via objects)... ... ça devrait être également possible ... !

    A plus !

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut
    Merci henderson,

    mais je n'ai pas très bien saisi ce que tu veux dire !

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Pourtant, je pense avoir été clair dans ce que je suis supposé avoir compris !

    Si ces combobox sont créées dynamiquement... je suppose qu'elle le sont dans une boucle et que par conséquent tu as du faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    TComboBox *CB;
    for(int ligne = première ligne; ligne <= dernière ligne; ligne++)
        {
        CB = new TComboBox(this);
        CB->Parent ... ; // je ne me souviens plus ici ...
        CB->SetBounds(...);
        // donc mémoriser sa ligne dans son Tag :
        CB->Tag = ligne;
        // elles se partagent la même OnChange
        CB->OnChange = ComboBoxChange; 
        }
    Tu déclares dans la classe de la form une méthode OnChange :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public :
    void __fastcall ComboBoxChange(TObject *Sender);
    Que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void __fastcal TForm1::OnChange(TObject *Sender)
    {
    // La comboBox Cible est :
    TComboBox *CB = (TComboBox*)Sender;
    // Donc
    StringGrid1->Cells[4][CB->Tag] = ...
     
    }
    Et c'est fini !

    L'autre solution ferait qu'on attache une combobox à une cellule de la grille (via Objects):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CB = new TComboBox(this);
    // bla bla ...
    // le truc du Tag est remplacé par celui des Objects 
    StringGrid1->Objects[ 4 ][ ligne ] = CB;
    Donc dans la OnDrawCell (j'avais évoqué OnDrawItem ... ce qui était une erreur de ma part) de la StringGrid on ferait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    AnsiString N;
    TComboBox *CB = (TComboBox*)StringGrid1->Objects[ Col ][ Row ];
    if(CB != NULL) N = CB->Items->Strings[ CB->ItemIndex ];
    else N = StringGrid1->Cells[ Col ][ Row ]; 
    //.. bla bla ...
    StringGrid1->Canvas->TextOut(..., ...,  N);
    Dans leur OnChange on ferait juste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    StringGrid1->Repaint();
    Par contre ... je ne sais pas ce que tu fais exactement donc ici ... je me contente de traiter les chaînes.

    A plus !

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut
    Merci henderson,

    cette fois ci j'ai bien compris (je suis un peu long à la détente) !

    J'ai opté pour la première solution mais à la place j'utilise la méthode OnSelect de la ComboBox.

    A bientôt !

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

Discussions similaires

  1. [Debutant]Problème Insertion Requête dans un StringGrid
    Par ghan77 dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/12/2005, 14h25
  2. Problème avec Between dans un code
    Par Sendo dans le forum Access
    Réponses: 4
    Dernier message: 02/10/2005, 18h44
  3. problème avec graphique dans état access
    Par petitmic dans le forum Access
    Réponses: 5
    Dernier message: 07/09/2005, 14h55
  4. Comment dessiner un ComboBox dans un StringGrid ?
    Par gilles641 dans le forum Composants VCL
    Réponses: 8
    Dernier message: 30/07/2005, 15h19
  5. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19

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