TreeNode adresse change au runtime

cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 - 6 mars 2007 à 13:30
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 - 4 avril 2007 à 13:26
Salut tout le monde,

Mon contexte:

J'utilise un TTreeView pour afficher de valeurs (code, description : string) classé par dossier (node).
L'utilisateur peut créer un dossier favoris et y ajouter des valeurs.

J'utilise une list d'object pour gérer les dossiers favoris (Tobjectlist of TuserFolder).
Pour l'ajout dans un dossier favoris, je récupère le TreeNode du dossier (sauver lors du chargement de l'arbre) dans le champs de mon instance TUserFolder. et je fait un addchildobjectfirst.

J'utilise les librairie de Dock de Jedi et il m'arrive de changer le formstyle au runtime (je sais : c'est pas bien).

Mon problème:

Lors que je dock ma form ou change le form style, toute les adresses des TreeNodes de mon treeview changent! Donc mon TreeNode sauvé dans mon TUserFolder ne point plus sur le bon node ( -> AV / invalide cast).

J'ai essayer d'utiliser le ItemID (handle sur une struct de l'API de win) au lieu de l'adresse du node (ie: copy de la valeur de retour de AddChild), même problème.

Problème bis: le docking de ma form (seulement celle avec le treeview) est très lent. Je suppose donc que l'arbre est recrée lors du docking.

Ma question:

comment garder une référence sur un TreeNode qui ne change pas lors que je dock ma form?

Connaissez vous un compo de type treeview qui ne soit PAS basé sur la lib de MS?

Savez-vous prévenir la recréation (?) de l'arbre lors du docking?

PS:
- absolute index n'est pas une solution, parceque le user peut effacer des élements de l'arbre.
- l'arbre étant assez conséquent, je souhaite éviter de parcourir le treeview.item.
- j’ai rien trouver parlant de ce problème sur le net (google group, borland quality central), aussi il y a tellement de question sur .data que…
- l'aide de Delphi indique que l'index peut changer, mais pas les adresses ou le ItemID.

Toute idée est la bienvenue.

merci d'avance,

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.

5 réponses

WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
10 mars 2007 à 10:24
Bonjour

Une idée en passant. Avant le dock ou le changement de style tu mémorises le parent de ton treeview et tu le mets à NIL. Une fois le docking fini tu restaures le parent de ton treeview. Normallement le treeview ne defrait plus être affecté par les modifications de ta form.



var
  TVParent : TWinControl ;



  // Avant le docking
  TVParent := TonTreeView.Parent ;
  TonTreeView.Parent :=NIL ;

  // Après le docking
  TonTreeView.Parent:=TVParent ;


P.S. Evidemment, tout cela n'est que pure supposition...(J'ai rien testé ;)

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
10 mars 2007 à 16:41
salut,

hum. idée intéressant. Je vais essayer.

merci whiteHippo,

A+

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
22 mars 2007 à 20:16
Salut Loda,

Juste par curiosité , ça fonctionne ou pas ?

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
23 mars 2007 à 10:22
salut WhiteHippo,

J'ai du changé mes priorités. (C'est un projet que j'ai au boulot)

je boss sur un autre projet pour le moment. Mais j'ai pas oublié et je posterais une réponse lorsque cela serra résolue.

A+

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
4 avril 2007 à 13:26
salut,

après quelques temps à faire de la DB et HTML, j'ai put refaire quelques test.

J'arrive pas à trouver un event OnDock qui functionne! (j'utilise la lib de JEDI pour le docking)

mais j'ai fait des test avec un button (comme tu as suggerer), et ce qui prend du temps c'est de changer le parent. que cela soit en le dockant ou à la main.

donc, je vais devoir creuser plus.... Au pif, je dirais qu'il recree tout les handle lors le parent change et comme j'ai pas mal d'element....

:'-(

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0
Rejoignez-nous