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

Composants VCL Delphi Discussion :

[D2010] Ajout dynamique de composant dans un TGridPanel


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 41
    Par défaut [D2010] Ajout dynamique de composant dans un TGridPanel
    Bonjour,

    C'est la première fois que j'utilise un TGridPanel et les aides sur ce composant est rare et celle d'embarcado plus qu'incomplète.

    Comme dit dans le titre. Je cherche à ajouter dynamiquement un objet à un TGridPanel en lui indiquant dans qu'elle cellule je veut la mettre.

    Quand on fait ca en direct sur une fiche, on ajoute un composant sur le TGridPanel, et Column et Row se rajoutent automatiquement à la liste des propriété, où l'on peut indiquer ou l'on veut placer le composant.

    Mais comment le faire en dynamique???

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 086
    Par défaut
    Le GridPanel, je l'ai aussi découvert, il y a à peine 3 jours ... cela fait penser au Layout du Java avec un placement automatique des controls, cela peut être utile, cela évite des calculs (j'ai fait plein d'écran généré à la volée, c'est vrai que cela réduit nettement le code)

    Tant que tu renseigne Parent du Control que tu veux insérer avec le GridPanel, cela va l'ajouter automatiquement (c'est vrai pas toujours terrible)
    avec RowCollection et ColumCollection, je te conseille de mettre tous les SizeStyle en Auto !
    Normalement c'est Auto par défaut, c'est les premières Column et Row déjà crééés qui sont en pourcentage !

    Ensuite tu peux parcourir "ControlsCollection.ControlItems[x, y]" qui te fournis un TControlItem tu peux pouvoir modifier l'ordre des composants comme bon te semble !

    EDIT : Désolé, je code en C++ en ce moment ! Je dois maintenir un Projet en C++, et j'oublie que je suis dans le forum Delphi ! !

    Code c++ : 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 TMainForm::GridPanel1Click(TObject *Sender)
    {
      TButton *Btn = new TButton(this);
      Btn->Parent = GridPanel1;
      Btn->Caption = IntToStr(GridPanel1->ControlCount) + " - " + FormatDateTime("NN:SS:ZZZ", Now());
      int i = GridPanel1->ControlCollection->IndexOf(Btn);
      TControlItem *CI = GridPanel1->ControlCollection->Items[i];
      TControlItem *CIBis = GridPanel1->ControlCollection->ControlItems[CI->Column][CI->Row];
      assert(CI == CIBis); // Juste pour montrer différent chemin d'accès au MÊME objets !
      TControl *BtnBis = GridPanel1->ControlCollection->Controls[CI->Column][CI->Row];
      assert(Btn == BtnBis);
     
      if (CIBis->Column < GridPanel1->ColumnCollection->Count)
      {
        CIBis->Column = CIBis->Column + 1; // On peut modifier l'Existant !
      }
     
      TButton *BtnTer = new TButton(this);
      BtnTer->Width = BtnTer->Width + 10;
      BtnTer->Parent = GridPanel1;
      BtnTer->Caption = IntToStr(GridPanel1->ControlCount) + " - " + FormatDateTime("NN:SS:ZZZ", Now()) + " T";
      GridPanel1->ControlCollection->AddControl(BtnTer);
     
      GridPanel1->Height = BtnTer->Height * GridPanel1->RowCollection->Count; // J'ai pas trouvé l'équivalent d'un AutoSize
    }
    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 averti
    Inscrit en
    Juillet 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 41
    Par défaut
    Merci de ta réponse t'es tout pardonné.

    Par contre en utilisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TonGridPanel.ControlCollection.AddControl(TonObjet,indexCol,indexRow);
    Tu peux placer directement ton objet ou tu veux

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/04/2015, 13h25
  2. Réponses: 6
    Dernier message: 04/01/2011, 10h07
  3. Ajouter dynamiquement un composant dans un panel ou une popup
    Par ludogoal dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 21/04/2008, 16h08
  4. ajouter dynamiquement des items dans un popup menu
    Par Malone dans le forum Composants VCL
    Réponses: 7
    Dernier message: 23/08/2005, 16h08
  5. [C#] Ajouter son propre composant dans Design de VS.Net
    Par yannick_sch dans le forum Windows Forms
    Réponses: 2
    Dernier message: 26/08/2004, 11h14

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