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

Delphi Discussion :

Creation dynamique de composants


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 478
    Par défaut Creation dynamique de composants
    Bonjour,
    Je crée des composants dynamiquement via:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var
    B: TAdvGlassButton;
    begin
    //...
    B:= TAdvglassButton.Create(self);
    B.Caption:= arbre.Cells[col,ligne];
    B.Parent:=self;
    Ceci fonctionne bien, mais je n'arrive pas à accéder à ces composants
    ... par exemple pour en changer la couleur.
    J'attribue un nom au composant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       B.Name:=  'c'+inttostr(col)+'l'+inttostr(ligne);
    if B.Caption='CD38' then label6.caption:=B.Name;
    et le nom est bien renvoyé...
    Mais ensuite je n'arrive pas à accéder au composant
    Coment faire???
    Merci d'avance,
    PhilLu

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    alors donner un nom unique au composant permet de le retrouver avec la méthode FindComponent()

    mais il est tellement plus simple de stocker celui-ci dans un tableau ou une liste !

    au choix:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var buttons: array of TAdvglassButton;
    var buttons: TArray<TAdvglassButton>;
    var buttons: TList;
    var buttons: TObjectList;
    var buttons: TObjectList<TAdvglassButton>;
    si tu connais à l'avance le nombre de bouton, un array peu faire l'affaire, sinon une liste
    NB: le but n'est pas de détruire les objets mais juste de les référencer, donc attention à OwnsObjects de TObjectList qu'il faut mettre à False !
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre Expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Par défaut
    Au pire il est toujours possible de parcourir la liste des composants par rapport à leur propriétaire (propriétés Components et ComponentsCount) ou de leur parents (Controls/ControlsCount en VCL, Children/ChildrenCount en FMX).

    Donner un nom ne sert à rien si on n'utilise pas FindComponents() pour le récupérer. On peut aussi utiliser les propriétés Tag, TagString, ... lorsqu'elles sont disponibles pour stocker ce qu'on veut au niveau de chaque composant.

  4. #4
    Membre éclairé
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 478
    Par défaut
    Super, merci.
    Je nomme les boutons, et puis???
    Comment attribuer une nouelle couleur au bouton nommé C1l2 par exemple?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C1l2.BackColor:=clWhite;
    ne fonctionne pas, alors que j'arrive à afficher le nom du composant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    label5.Caption:=B.Name;
    J'ai du oublier qq chose...

    Merci pour vos réponses,

  5. #5
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Delphi est un langage compilé, on ne peut pas nommer une variable pendant l'execution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (FindComponent('C1l2') as TAdvglassButton).BackColor:=clWhite;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Membre éclairé
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 478
    Par défaut
    Bonjour,
    le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memo1.Lines.Append(B.Name+' '+B.Caption);
    me renvoie bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    c0l2 CD20
    c0l4 CD5
    c0l6 CD23
    c0l8 CD18
    c0l10 CD95
    mais ensuite le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (FindComponent('c0l4') as TAdvglassButton).BackColor:=clblue;
    (par exemple)
    ne modifie pas la couleur du composant.
    J'ai tenté de modifier le caption du composant, idem...

    ... comprends pas
    merci pour votre aide

Discussions similaires

  1. Creation dynamique de composants
    Par elecpic dans le forum Débuter
    Réponses: 3
    Dernier message: 28/10/2010, 06h51
  2. Creation d'un composant de manière dynamique
    Par stanislas dans le forum Langage
    Réponses: 6
    Dernier message: 03/02/2009, 15h47
  3. Réponses: 3
    Dernier message: 28/11/2008, 18h18
  4. [Classe][Creation dynamique composant]
    Par daheda dans le forum C++Builder
    Réponses: 2
    Dernier message: 29/04/2007, 16h38
  5. [ActiveX] Creation d'un composant dynamique
    Par xv-mnt dans le forum MFC
    Réponses: 5
    Dernier message: 28/01/2006, 18h22

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