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 :

modifier une label dynamique


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 179
    Points : 65
    Points
    65
    Par défaut modifier une label dynamique
    salut:
    j'ai crée des labels d'une manière dynamique par le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonLabel := Tlabel.Create(self);
    pendant l'exécution de mon application je cré plusieur label,
    le probleme se pose quand je veux modifiée ou suprimer une label,
    je ne peux modifier que la derniere label car tous les label ont le meme nom (MonLabel). es qu'il y a une solution pour cette probleme.
    merci[/b]

  2. #2
    DMO
    DMO est déconnecté
    Membre averti
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Points : 343
    Points
    343
    Par défaut
    Tu confonds le nom d'un composant et la référence sur un composant.

    MonLabel est une référence sur un de tes TLabel créés dyamiquement.
    Si tu utilises toujours la même référence lors de tes créations, il est parfaitement normal qu'elle ne pointe que sur le dernier TLabel créé.

    Cherche un peu il y a divers moyens d'arriver à tes fins.
    Tu en trouveras dans la FAQ Delphi et ailleurs. Tu peux garder une référence (différente!) sur chaque label créé (un peu comme Delphi en conception), ou n'utiliser aucune référence et retrouver tes instances avec FindComponent ( http://delphi.developpez.com/faq/?pa...#findcomponent ).

    Bon dev'
    « La simplicité est la sophistication suprême » (Léonard de Vinci)

  3. #3
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut
    Bonjour,
    Voici un extrait d'un tutoriel sur la création dynamiqu de composants. Je pense qu'il répond exactement à ce que tu recherches:
    Citation Envoyé par [url=http://llb.developpez.com/compo_dyn/?page=sommaire
    Laurent Le Brun[/url]]
    II. Gérer des composants créés dynamiquement
    Créer des composants dynamiquement, c'est bien ; savoir s'en servir, c'est mieux !
    C'est pour répondre à cette problématique que j'ai écrit cette 2e page. En effet, nous venons de voir comment créer des composants dynamiquement, mais ils ne sont pas vraiment fonctionnels. Car, avec la méthode que je vous ai donnée, on est confronté à plusieurs problèmes : tous les boutons ont les mêmes propriétés ; ces propriétés ne peuvent plus être changées par la suite ; c'est le même événement qui est exécuté pour chaque bouton.

    II-A. Première méthode : enregistrer chaque bouton
    Quand j'ai débuté, la première solution a laquelle j'ai pensé, c'est d'utiliser une variable globale (de type TButton). On peut modifier les propriétés de cette variable, ce qui modifiera l'aspect du bouton. Le problème, c'est quand on a créé plusieurs composants : on n'a le pouvoir que sur le dernier. On peut contourner cette limite en créant une variable de type : array of TButton. Ce tableau doit être dynamique (lui aussi !), car on ne sait pas à l'avance le nombre de boutons que l'on créera. Voici un exemple de cette technique :

    var
    ListeBoutons: array of TButton;
    Nombre: integer = 0;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    inc(Nombre);
    SetLength(ListeBoutons, Nombre+1);
    ListeBoutons[Nombre] := TButton.Create(self);
    with ListeBoutons[Nombre] do
    begin
    Parent := Self;
    Left := Nombre*20;
    Width := 20;
    Caption := IntToStr(Nombre);
    end;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    var
    i: Integer;
    begin
    for i := 1 to Nombre do
    ListeBoutons[i].Top := ListeBoutons[i].Top + 10;
    end;
    Quand l'utilisateur appuie sur Button1, on agrandit le tableau d'un élément (qui servira pour le bouton). Puis, on crée simplement le bouton et on modifie ses propriétés. Ainsi chaque bouton est enregistré dans le tableau. Button2 montre comment modifier les propriétés ultérieurement. Il suffit donc de connaître le numéro du bouton pour pouvoir le contrôler.
    Cordialement,
    Hauwke

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 179
    Points : 65
    Points
    65
    Par défaut
    salut;
    merci DMO et Hauwke pour vos réponces .
    probleme résolu.
    merci

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

Discussions similaires

  1. [Framework] modifier une entry dynamiquement dans application_context
    Par pcouas dans le forum Spring
    Réponses: 1
    Dernier message: 01/02/2011, 20h20
  2. modifier une arborescence dynamique
    Par discusaigon dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 23/02/2009, 08h40
  3. Réponses: 13
    Dernier message: 25/01/2007, 17h20
  4. Modifier une image dynamiquement en fonction d'une liste
    Par metatron dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/11/2006, 17h33
  5. Modifier une image dynamiquement
    Par SebV dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/01/2006, 23h08

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