dederfred
Messages postés19Date d'inscriptionsamedi 4 novembre 2000StatutMembreDernière intervention23 novembre 2006
-
26 oct. 2006 à 20:23
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 2009
-
2 nov. 2006 à 09:00
Bonjour,
voila l'interface de mon application.
En gros :
je vous explique ce que je veux faire et ce que j'arrive a faire :
Je dois sauvegarder la hierarchie d emon application (les onglets et objet interne) dans un fichier xml pour pouvoir la recréer après.
Donc j'enregistre hiérarchiquement tout dans mon fichier xml .
Je suis partie de la logique je prend mon premier onglet (de Tnb_principal),et je récupère son nom (le nom de l'étage).Puis Chaque onglet a en enfant un autre TabbedNotebook qui figure dans mon tableau TNB_principal1: Array Of TabbedNotebook celui la me sert a représenter une pièce, je récupère donc le nom de la première pièce, et finalement je bloque , je voudrai récupérer le combobox enfant a cette pièce mais c'est la que tout ce complique. J’ai essayer de faire un lenomdemontabpage.findComponent mais il ne trouve rien je ne comprend pas ...
Le CODE :
Configuration_immeuble := XMLDoc.DocumentElement.AddChild('Configuration_immeuble');
if assigned(TNB_principal) then
begin
For lecture_page:= 0 to TNB_principal.Pages.Count-1 do
Begin
TabPageetage := TTabPage(TNB_principal.Pages.Objects[lecture_page]);
if assigned(TabPage) then
begin
etage := Configuration_immeuble.AddChild('etage') ;
nometage := etage.AddChild('nom') ;
nometage.Text := TabPageetage.Caption ;
For num_onglet:= 0 to TNB_principal1[lecture_page].Pages.Count-1 do
Begin
TabPagepiece := TTabPage(TNB_principal1[lecture_page].Pages.Objects[num_onglet]);
piece := etage.AddChild('piece') ;
nompiece := piece.AddChild('nom') ;
nompiece.Text := TabPagepiece.Caption ;
For NumTableau:= 0 to Length(CB_Mur)-1 do
Begin
Mur_CB_test := TComboBox(TabPagepiece.FindComponent(CB_Mur[NumTableau].Name));
if assigned(Mur_CB_test) then
begin
showmessage('ok');
break;
end
else
begin
showmessage('non');
end;
end;
end;
end;
end;
end;
Le problème s'est qu'il faut absolument que je trouve le combobox enfant de la page. Donc je me demandé si il y avais une possibilité d'affiché la hiérarchie d'un composant (les objets qu'il contient) car si cela est possible il y a sûrement un moyen pour que je le sélectionne dans cette liste.
Si cela n'est pas très clair n'aillait pas peur de m'en faire part.
Merci d’avance
( j'ai posté aussi sur un autre forum )
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 20093 30 oct. 2006 à 09:42
salut,
As.tu essayer de remplacer le code comme je te l'ai suggerer? ça marche?
pour trouver le "bon composant" j'ai deux pistes a te donner:
1. Tu loop sur CB_Mur et tu test "CB_Mur[i].parent = TabPagepiece" pour trouver ceux donc le parent est bien cette page.
2. une autre solution (plus lourd et plus compliquée) consite a sauver les info dont t'a besoin dans un record associé a chaque element qui te pose problème. (je dois pas être clair la alors je fait un exemple)
TExtraInfo = record
ListMur = array[] of TComboxBox;
Etage = TpageControl;
end;
PExtraInfo = ^TExtraInfo;
...
Le problème serra les dispose et comment/quand créer ces info.
--------
Sinon, ton problème c'est de modéliser des élément architecturaux de maison pour faire des choix genre type de plancher, etc. Puis de permettre une sauvegrade/restauration des choix. j'ai juste?
As-tu penser au TTreeView? Comme tu peux associer au node un pointeur (même idée que 2.) et que tu as une hiérachie. Aussi Tree.SaveToFile peut t'aider.
Tu pourrais faire une interface genre a gauche un tree view et a droite une série de TPanel (un par niveau de hiérachie) avec les proriété de ce niveau. (nb de pièce, type de mur, ....). Et tu cache/charge les valeurs des panels lorsque la selection change dans le tree view.
je sais pas trop quoi te coneiller sans avoir plsu d'info sur ce que tu veux faire. (le but, pas le moyen)
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 20093 27 oct. 2006 à 13:36
salut,
dans l'EDI t'as la fenetre "structure" qui te permet de voir la hierachie des composant (le champs "parent", pas le champs "owner" regarde l'aide si tu ne connait pas la différence)
ton problem vient peut etre de la.
findcomponent rechercher avec le champ owner et non le parent.
donc remplace
Mur_CB_test := TComboBox(TabPagepiece.FindComponent(CB_Mur[NumTableau].Name));
dederfred
Messages postés19Date d'inscriptionsamedi 4 novembre 2000StatutMembreDernière intervention23 novembre 2006 27 oct. 2006 à 16:19
le probleme c'est qu'il faut que je trouve le composant CB_Mur[NumTableau] qui se trouve dans la decendance de TabPagepiece
et pas les autres mais je ne c'est pas exactement le quel si trouve c'est pour cela que je fais ma boucle pour trouver le bon . peut etre il y a un autre moyen pour y arriver .. ?
dederfred
Messages postés19Date d'inscriptionsamedi 4 novembre 2000StatutMembreDernière intervention23 novembre 2006 1 nov. 2006 à 17:06
Encore merci la premiere solution de ton dernier post fonctionne . J'y avais pas pencé du tout ...
je cherchais peu etre trop dur .
merci pour tout je vais pouvoir continer
Vous n’avez pas trouvé la réponse que vous recherchez ?