Accueil > Forum > > > > récupérer le contenu d'un contrôle créé dynamiquement
récupérer le contenu d'un contrôle créé dynamiquement
jeudi 26 avril 2007 à 18:40:27 |
récupérer le contenu d'un contrôle créé dynamiquement

marvenjabloun
|
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
\\panel saisie n 'est pas creer dynamiquement for j := PanelSaisi.ComponentCount -1 downto 0 do PanelSaisi.Components[j].Free;
\\creation dynamique de panel2
Panel2 := TPanel.Create(PanelSaisi); with Panel2 do begin Parent := PanelSaisi; ParentColor := true; BevelOuter := bvNone; Align := AlTop; name := 'PanelBrique'; caption := ''; end;
\\creation dynamique de label
with TLabel.Create(Panel2) do begin Parent := Panel2; Align := alLeft; Font := PoliceTitre;
\\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
\\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}
\\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
|
|
jeudi 26 avril 2007 à 20:40:09 |
Re : recipérer le contenu d'un controle crée dynamiquement

moldov
|
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
|
|
jeudi 26 avril 2007 à 21:17:30 |
Re : recipérer le contenu d'un controle crée dynamiquement

jelume
|
exemple:
(FindComponent('Label1') as TLabel).Caption := 'toto';
|
|
vendredi 27 avril 2007 à 09:22:04 |
Re : recipérer le contenu d'un controle crée dynamiquement

Loda
|
Réponse acceptée !
salut,
d'abord, bravo. tu poses très bien ta question (et c'est assez rare pour le souligner). en plus, c'est évident que tu t'es poser la question avant de nous la poser.
alors t'as trois façon principale:
1. chercher le compo à chaque fois 2. garder une ref sur le compo dans une var/tableau 3. ne PAS "lire" l'affichage pour connaître un etat.
à mon avis, prend la numéro trois.
1. findchildcontrol et findcomposant prend en param le NOM. (.name) donc si tu ne l'as pas précisier lors de ton create dynamique...
with TLabel.Create(Panel2) do begin Parent := Panel2; name := 'MonLblVar' + inttostr(i); Align := alLeft;
Note que ce type de méthode ne sont pas des plus rapide. (mais ça vas) fait toujours un test "if assigned" avant de lire le caption!
2. lorsque tu crée ton compo, sauve le (ie: le pointeur) dans une var ou dans un tableau. Ensuite, pour relire le caption, bin t'as juste à faire MonPointeurSurLabel.Caption . attention à ne pas lire le compo après qu'il soit détruit !
MonLblTab[i] := TLabel.Create(Panel2); // tab de type TLabel with MonLblTab[i] do begin Parent := Panel2;
3. Relire l'affichage pour connaitre un valeur que tu connaissait avant... bin c'est pas une super méthode de prog. En plus, comme vas tu faire le jour ou tu traduit ton soft? ou change l'affichage (pour une image, text plus court, ...)
Pourquoi ne pas garder ton info dans une VAR (c'est fait pour ça non?) de type enum ? ou un set? au pire un string.
et si t'en as bcp, tu peux faire une class qui garde les options dans un tableau de bool ave des const. (ou n'import quel autre system qui convient à ton problème.)
Ou même une class qui garde les options en mémoire et gère l'affiche de ces options (garde un pointeur sur le compo qui l'affiche, descendant de TCustomPanel ou mieux de TFrame). comme ça tu peux mettre à jour ton affichage facilement (relire le fichier, changer les options, ...)
à toi de voir tes besoins. Ne perd pas 3 jours à faire une class pour tes options, si t'en à deux. mais ne perd pas une semaine à faire du code pour des recherche de compo si t'en a deux cents.
en esperant t'avoir aider.
bon code,
Loda
PS: je sais pas si ça t'aide, mais jet un oeil: http://www.delphifr.com/codes/GESTIONNAIRE-FICHIERS-CONFIGURATION_41171.aspx
Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
|
|
vendredi 27 avril 2007 à 14:41:14 |
Re : recipérer le contenu d'un controle crée dynamiquement

marvenjabloun
|
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 .
|
|
vendredi 27 avril 2007 à 15:03:05 |
Re : recipérer le contenu d'un controle crée dynamiquement

marvenjabloun
|
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 
|
|
samedi 28 avril 2007 à 13:24:23 |
Re : récupérer le contenu d'un contrôle créé dynamiquement
|
Cette discussion est classée dans : caption, xml, dynamiquement, panel2, labeltype
Répondre à ce message
Sujets en rapport avec ce message
Registre [ par Shadow ]
Salut, je veux que la caption de mon label sois dans le registre mais j arrive pas a lire dans le registre pour afficher la caption que je veux!!!!!!!
Créer puis retrouver dynamiquement un controle [ par Kassad ]
J'ai besoin dans mon programme de créer dynamiquement des boutons surtout à cause de leur nombre important.Je garde donc dans une liste chaînée toutes
envoie d'1 mail a partir d'un label.caption [ par dlstaq ]
Comment faire pour envoyer un mail en cliquant sur un label.caption sachant que l'adresse mail est toujours différente.Merci de vos réponses.
Problème concaténation [ par bassman64 ]
Alors voila ...J'ai un problème de concaténation :For i:=1 to 12 do begin Edit(i).caption := Button(i).text; end;avec le Edit(i).caption := Button(
recuperer le caption d'un items d'un popupmenu [ par apz ]
Salut,comment recuperer le caption d'un items d'un popupmenu en excution:table1.indexname:=popupmenu1.items.?Merci.
ToolBar [ par Jeankiki ]
J'utilise une toolbar, un TActionList et un TImageListe, par défaut il met l'image au-dessus du Caption dans le bouton, mais j'aimerai la mettre à gau
TMainMenu : modification caption in prog [ par Bruto ]
Salut, j'utilise un objet de type TMainMenu ( standard ) et je voudrais atteindre le caption d'un item du menu ( TMenuItem ) mais pas moyen . Pouvez-v
Enter dans Caption ou Text [ par Bruto ]
Salut,juste une petite questionDans certains composants Delphi, on retrouve des propriétés Caption et Text. Mon prob est que je ne sait pas comment in
XML && IXMLNode je vais criser !!! [ par damanix ]
Argh, je vais criser !!!----------------------------XML1 : ----------------------------XML2 : <HAPP
listbox:=probleme!! [ par lugdanum ]
bonjour tout le monde: voilà j'ai un boutton qui fait descendre (ou monter)l'élément séléctionner dans une listbox avec ce code: procedure TFormMain.B
Livres en rapport
|
Derniers Blogs
[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|