Afficher les objets enfant d'un tabpage

Résolu
Signaler
Messages postés
19
Date d'inscription
samedi 4 novembre 2000
Statut
Membre
Dernière intervention
23 novembre 2006
-
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
-
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 )

5 réponses

Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
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;
...

New(aPExrtaInfo);
aPExtraInfo^.Etage := Xxx;
Piece_TabControl.Tag := aPExtrInfo;

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)

bon code,
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
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));

par

Mur_CB_test := TComboBox(FORM1.FindComponent(CB_Mur[NumTableau].Name));

pourrait marcher...

bon code
Messages postés
19
Date d'inscription
samedi 4 novembre 2000
Statut
Membre
Dernière intervention
23 novembre 2006

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 .. ?
Messages postés
19
Date d'inscription
samedi 4 novembre 2000
Statut
Membre
Dernière intervention
23 novembre 2006

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 
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
content de t'avoir rendu service. et content de savoir que ça fonctionne. :)