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 :

Gestion dynamique de composant


Sujet :

Composants VCL Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 17
    Points : 19
    Points
    19
    Par défaut Gestion dynamique de composant
    Bonjour à tous,

    Voila je me demandais si il était possible de gerer des composants de façon dynamique.

    En fait je voudrais remplacer ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if lmdcheckbox1.Checked then
    begin
    Canvas.TextOut(200,inc,lmdcheckbox1.Caption);
    inc:=inc+100;
    end;
    if lmdcheckbox2.Checked then
    begin
    Canvas.TextOut(200,inc,lmdcheckbox2.Caption);
    inc:=inc+100;
    end;
    .
    .
    .

    par ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    For i:=1 to xx do
       if lmdcheckbox[xx].Checked then
         begin
           Canvas.TextOut(200,inc,lmdcheckbox[xx].Caption);
           inc:=inc+100;
         end;
    Est-ce possible?
    J'ai regardé dans la FAQ, la création dynamique semble ne pas convenir!!!

    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Tu peux aussi mettre un onclick commun à tous tes checkbox

    Dans le OnClick tu mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    if Sender is TCheckBox then
      if TCheckBox(Sender).Checked then
      begin
         Canvas.TextOut(200,inc,TCheckBox(Sender).Caption);
         inc:=inc+100;
      end;
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Citation Envoyé par bob1980
    J'ai regardé dans la FAQ, la création dynamique semble ne pas convenir!!!

    Merci d'avance pour votre aide.
    Tu as mal regardé

    http://delphi.developpez.com/faq/?pa...#findcomponent

    Bloon
    A lire : Les règles du club
    Delphi : La FAQ - Articles

  4. #4
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Oui, c'est possible :
    Souhaites tu les créer de façon dynamique ou non ?

    Si non (le plus simple) :
    - Celà signifie que tu les a placé à la main sur ta fiche.
    - voici le "truc" :

    1) tu déclares un tableau de TCheckBox (si c'est bien le type de classe que tu utilises) :
    Soit en variable globale de ton unité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var TabCheckBox:array of TCheckBox;
    Soit dans la classe de ta fiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    type
      TForm1 = class(TForm)
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
        TabCheckBox:array of TCheckBox;
      end;
    2) tu initialises ton tableau quelque part (dans le OnCreate de ta fiche par exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    var NbredeChekBox:integer;
    ...
    NbredeChekBox:=5;
    //notre tableau va être indicé de 0 à n-1 ==> n'oublie jamais qu'en Delphi, 
    //il est rare de travailler avec des indices de 1 à n (voir ton code))
    SetLength(TabCheckBox,NbredeChekBox);
    TabCheckBox[0]:=lmdcheckbox1;
    TabCheckBox[1]:=lmdcheckbox2;
    ...
    TabCheckBox[4]:=lmdcheckbox5;
    ,
    ou bien si tu en as vraiment beaucoup ,et qu'ils s'appellent tous lmdcheckboxxx :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm1.FormCreate(Sender: TObject);
    var i:Integer;
         NbredeChekBox:integer;
    begin
      NbredeChekBox:=100; //si tu en as 100 bien sur...
      //On dimensionne notre tableau dynamique
      SetLength(TabCheckBox,NbredeChekBox);
      for i:=0 to NbredeChekBox-1 do
        TabCheckBox[i]:=Form1.FindComponent('lmdcheckbox'+IntToStr(i+1));
    end;
    On peu très bien pu utiliser un tableau statique aussi (pas besoin de faire SetLength) :
    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
     
      ...
      public
        { Déclarations publiques }
        TabCheckBox:array[0..99] of TCheckBox;
      end;
    ...
    procedure TForm1.FormCreate(Sender: TObject);
     var i:Integer;
          NbredeChekBox:integer;
     begin
      //on initialise notre tableau
       for i:=0 to 99 do
         TabCheckBox[i]:=Form1.FindComponent('lmdcheckbox'+IntToStr(i+1));
     end;
    Si tu veux vraiment un tableau de 1 à n :
    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
     
       ...
       public
        { Déclarations publiques }
         TabCheckBox:array[1..100] of TCheckBox;
      end;
     ...
     procedure TForm1.FormCreate(Sender: TObject);
      var i:Integer;
           NbredeChekBox:integer;
      begin
       //on initialise notre tableau
        for i:=1 to 100 do
          TabCheckBox[i]:=Form1.FindComponent('lmdcheckbox'+IntToStr(i));
      end;
    3) utilisation (n'utilises pas inc comme variable, c'est une fonction Delphi, d'ailleurs, on va l'utiliser) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure Form1.Affichage;
    var posy:integer;
    begin
      posy:=0;
      For i:=0 to xx-1 do
         if lmdcheckbox[i].Checked then
        begin
                  Canvas.TextOut(200,posy,lmdcheckbox[i].Caption);
                  inc(posy,100); //c'est kif-kif avec : posy:=posy+100;
       end;
    end;
    Voilà.

    Sinon, si tu veux les créer dynamiquement, tu le dis.
    Bidouilleuse Delphi

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 17
    Points : 19
    Points
    19
    Par défaut
    Salut à tous, c'est bon cela fonctionne.

    J'ai fini par utiliser la methode utilisée dans la FAQ (merci Bloon, je n'avais identifié correctement le nom de cette méthode)

    Merci également à Malatar et Waskol.

    Ca va m'éviter de coder bien des lignes. C'est sympa

    A+

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

Discussions similaires

  1. gestion dynamique des composants
    Par tchpaz dans le forum Débuter
    Réponses: 1
    Dernier message: 19/10/2008, 21h19
  2. Déplacement dynamique de composants à l'exécution
    Par tekilx dans le forum Composants VCL
    Réponses: 8
    Dernier message: 05/07/2005, 10h46
  3. Gestion séparée de composants créés dynamiquement
    Par anarpunk dans le forum Composants VCL
    Réponses: 8
    Dernier message: 15/06/2005, 10h57
  4. [FLASH MX] Gestion dynamique de liens
    Par guy2004 dans le forum Flash
    Réponses: 18
    Dernier message: 20/01/2005, 08h21
  5. Création dynamique de composants et destruction
    Par cpdump dans le forum Composants VCL
    Réponses: 4
    Dernier message: 19/01/2005, 17h57

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