Récupérer le contenu d'un contrôle créé dynamiquement

[Résolu]
Signaler
Messages postés
7
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
3 juin 2007
-
Messages postés
1725
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
11 avril 2021
-
Bonjour,
je suis etudiant debutant en delphi et je fait une application dans le cadre d'un projet avec       delphi 7et je trouve un problemepour utiliser des composantes crées dynamiquement car elles ne sont pas reconnu lors de  l'execution j espere que je trouverai de l aide sur votre site merci .

en effet voila un petit bout de code
ou je veux recuperer le caption d'une label creer dynamiquement et dont la valeur est prise à partir d'un fichier XML 

l'affichage et l'extraction a partir de fichier xml se fait sans probleme

[file://\\panel \\panel] saisie n 'est pas creer dynamiquement
 for j := PanelSaisi.ComponentCount -1 downto 0 do
    PanelSaisi.Components[j].Free;


 [file://\\creation \\creation] dynamique de panel2

   Panel2 := TPanel.Create(PanelSaisi);
      with Panel2 do
      begin
        Parent := PanelSaisi;
        ParentColor := true;
        BevelOuter := bvNone;
         Align := AlTop;
        name := 'PanelBrique';     
       caption := '';
      end;

[file://\\creation \\creation] dynamique de label


      with TLabel.Create(Panel2) do
      begin
        Parent := Panel2;
        Align := alLeft;
        Font := PoliceTitre;

[file://\\exraction \\exraction] des données a partir de fichier XML 

        IdType := XMLProfil.DocumentElement.ChildNodes.
          Nodes[ScrollBoxBrique.Tag].Attributes[_type];
        Caption := FFOnctionsUtiles.GetChildNodeByNameAndAttr(
          XMLModele.DocumentElement, _type, 'id', IdType).AttributeNodes.
          Nodes['nom'].Text;
      end;

une fois j 'ecrit ce code je voulais recuperer la valeur de caption créé au dessus et ça j ai pas pu le faire

j ai ecrit ce code qui a generer une erreur d'exception  violation d'acces

[file://\\panel2 \\panel2] et labelType sont declarer comme etant tpanel et tlabel

 panel2:=(panelsaisie.FindChildControl('PanelBrique') as TPanel);
labeltype:=(panel2.FindChildControl('labeltype') as Tlabel);
{je suis presque certain que le probleme vient de ces deux lignes au dessus}

   [file://\\je \\je] colorerai un paneldecoration selon la valeur de label  prise dans le fichiers XML     
 if labeltype.caption = 'Composantes' then      
Paneldecoration.Color := clpurple;       
  if labeltype.caption = 'Graphe' then
Paneldecoration.Color := clyellow;
.....................................

j atend des propositions car je commence a me demoraliser

5 réponses

Messages postés
165
Date d'inscription
mercredi 8 octobre 2003
Statut
Membre
Dernière intervention
10 novembre 2008

Salut,

Voici la méthode que j'utilise, alors c'est peut être pas la plus optimisé mais elle fonctionne:

for iIndice := ComponentCount-1 downto 0 do
   if Component[iIndice] is TPanel then
      if TPanel(Component[iIndice]).Name = 'PanelBrique' then
          TPanel(Component[iIndice]).Color := clPurple;

Voila alors je sais que j'ai déjà fait avec FindComponent, mais je sais plus trop comment j'avais fait et je suis pas chez moi pour regarder mes sources.

Bonne Prog   
Messages postés
120
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
15 novembre 2007
1
exemple:

 (FindComponent('Label1') as TLabel).Caption := 'toto';
Messages postés
7
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
3 juin 2007

Merci beaucoup à tous ceux qui mon proposer des solutions ça m 'a été tres utile .

cher Loda j ai utiliser la solution 2(c la plus comprehensible pour moi ) que tu m a proposé et ça fonctionne bien merci .
Messages postés
7
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
3 juin 2007

pour ceux qui rencontreront le meme probleme que moi voila comment j ai fait graçe a votre aide Loda :

 with TLabel.Create(Panel2) do
      begin
        Parent := Panel2;
        Align := alLeft;
        Font := PoliceTitre;
        IdType := XMLProfil.DocumentElement.ChildNodes.
          Nodes[ScrollBoxBrique.Tag].Attributes[_type];
        Caption := FFOnctionsUtiles.GetChildNodeByNameAndAttr(
          XMLModele.DocumentElement, _type, 'id', IdType).AttributeNodes.
          Nodes['nom'].Text;
          name := 'labelType';


\\ tablabeltype doit etre declaré comme un tableau de string   
       for k:=0 to 49 do
      tablabeltype[k]:=FFOnctionsUtiles.GetChildNodeByNameAndAttr(
          XMLModele.DocumentElement, _type, 'id', IdType).AttributeNodes.
          Nodes['nom'].Text;


          end;

 for k:=0 to 49 do


       if tablabelType[k] = 'Graphe' then


Paneldecoration.Color := clyellow
else


          if tablabelType[k] = 'Composantes' then
       
Paneldecoration.Color := clpurple;
       
   .................

ça fonctionne
Messages postés
1725
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
11 avril 2021
8
marvenjabloun > Pense à valider les réponses qui te conviennent (bouton "réponse acceptée").