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 :

Voici comment integrer un ListBox dans une cellule d'un StringGrid


Sujet :

C++Builder

  1. #1
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut Voici comment integrer un ListBox dans une cellule d'un StringGrid
    Suite a ce post
    et a ce lien
    Voici le code complete pour gerer un ListBox dans une cellule d'un StringGrid
    Sur la Form un StringGrid un ListBox les Items completes et Visible a false
    Le 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
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
        StringGrid1->Cells[4][0] = "Nom";
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::StringGrid1Click(TObject *Sender)
    {
    if( StringGrid1->Col == 4 )
    {
    String d = StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row];
            for(int a = 0; a < ListBox1->Items->Count; a++)
            {
    if(d == ListBox1->Items->Strings[a])
    {
    ListBox1->ItemIndex = a;
    StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row] = ListBox1->Items->Strings[a];
    }
            }
            TRect Recto     = StringGrid1->CellRect(StringGrid1->Col, StringGrid1->Row);
            ListBox1->Top  = StringGrid1->Top;
            ListBox1->Left = StringGrid1->Left;
            ListBox1->Top  = ListBox1->Top + Recto.Top + StringGrid1->GridLineWidth;
            ListBox1->Left = ListBox1->Left + Recto.Left + StringGrid1->GridLineWidth + 1;
            ListBox1->Height = (Recto.Bottom - Recto.Top) + 1;
            ListBox1->Width  = Recto.Right - Recto.Left;
            ListBox1->Visible = True;
            ListBox1->BringToFront();
    }
        else
        {
        ListBox1->Visible = false;
        }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ListBox1Click(TObject *Sender)
    {
    StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row] = ListBox1->Items->Strings[ListBox1->ItemIndex];
    }
    //---------------------------------------------------------------------------
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 452
    Points : 24 863
    Points
    24 863
    Par défaut

    Merci Blondelle pour tes 5 sujets
    Voici comment integrer un CheckListBox dans une cellule d'un StringGrid
    Voici comment inserer un CheckBox dans une cellule d'un StringGrid
    Voici comment integrer un RadioGroup dans une cellule d'un Stringgrid
    Voici comment integrer un ListBox dans une cellule d'un StringGrid
    Voici comment integrer un Combobox dans une cellule d'un StringGrid

    Cela devrait amener une FAQ C++Builder
    En Delphi, la seule qui existe déjà c'est CheckBox pour DBGrid !

    Pour la CheckBox, c'est tout de même très vilain !
    Elle apparait et disparait, on peut faire la même chose avec DrawFrameControl et cela pour chaque ligne de la Grille, plus esthétique qu'un Oui\Non

    Pour la ListBox, il me semble qu'il existe une fonction ItemIndex qui pourrait remplacer la Boucle de recherche non ?

    Je n'ai pas testé, la ListBox occupe juste la cellule ? c'est petit non ?

    Tu devrais utiliser la Propriété Parent, cela éviterait le calcul de Positionnement, ou alors ClientToScreen et ScreenToClient

    Faudrait voir le InplaceEditor, qui est conçu pour cela mais nécessite un héritage du TStringGrid !

    Perso, je m'étais fait en Delphi, une petite classe qui permet d'ajouter quasiment n'importe quel TControlClass dans la cellule d'un TStringGrid en utilisant la Propriété Parent et SetBounds, le code est très vieux et archi vilain avec des tricheries spécifique à Delphi
    C'était pour le Fun, TMS Grids ou DevExpress font ça mieux !

    Je ne peux pas le traduire en C++Builder car il me manque comme je l'ai indiqué dans le sujet Pattern Strategy et Constructeurs Virtuels VCL, la méthode propre (j'en ai une toute pourrie utilisant un Code Delphi qui en plus diffère selon 2007 et XE) pour instancier un objet via un TClass comme je le ferais en Delphi
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre émérite
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Points : 2 677
    Points
    2 677
    Par défaut
    Cela devrait amener une FAQ C++Builder
    pour info la FAQ C++Builder existe déjà ...
    Vous postez du code ? Merci d'utiliser les balises
    Un message vous paraît pertinent ? Merci de le gratifier d'un vote positif
    Vous avez obtenu une réponse à votre question ? Merci d'utiliser le tag
    __________________
    Ingénieur R&D, diplômé en 2007 de l'ISIMA
    Docteur en informatique, diplômé en 2015 de l'EDSPI de Clermont-Ferrand

  4. #4
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut ShaiLeTroll
    Merci pour ton avis
    C'est vrai que les composants inseres dans les cellules d'une colonne apparaissent et disparaissent en fonction de la selection, je suis reste sur les exemples (liens de chaque sujet), c'est juste pour donner une methode qui peut etre adaptee suivant les besoins, il ne faut pas hesiter a poster une modification ou une autre facon de faire, le Post a ete ouvert pour cela, de mon cote je regarde tes propositions.
    Encore une fois Merci
    Ce n'est pas beau de se moquer TheGzD
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 452
    Points : 24 863
    Points
    24 863
    Par défaut
    Citation Envoyé par TheGzD Voir le message

    Citation Envoyé par ShaiLeTroll Voir le message
    Cela devrait amener une FAQ C++Builder
    pour info la FAQ C++Builder existe déjà ...
    Hein ?
    Tu as mal interprété ma phrase, il fallait comprendre

    Cela devrait amener de nouvelles Réponses dans la FAQ C++Builder
    Faut-il encore se moquer correctement !

    Je suis l'un des premiers à encourager la recherche sur le Doc Wiki Embarcadero et la FAQ tel que je l'avais fait lors de ma découverte de l'objet C++ en VCL dans le sujet Méthodes Virtuelles appelés depuis un Constructeur
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre à l'essai
    Homme Profil pro
    amateur
    Inscrit en
    Mai 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Mai 2018
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    J'ai arpenté la toile dans tous les sens pour trouver un exemple complet d'utilisation du TInplaceEditList avec un TStringGrid.
    Pour Delphi on trouve plein de trucs, pour C++Builder c'est rarissime alors je partage ce lien :

    https://tagosuck.cocolog-nifty.com/t...rawgrid-t.html

    Ça fonctionne parfaitement.

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/06/2011, 12h34
  2. Réponses: 0
    Dernier message: 28/06/2011, 12h28
  3. Réponses: 0
    Dernier message: 28/06/2011, 12h23
  4. Réponses: 0
    Dernier message: 28/06/2011, 12h12
  5. Comment créer un commentaire dans une cellule d'Excel ?
    Par WebPac dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 26/04/2005, 09h23

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