TreeNode adresse change au runtime

Messages postés
900
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
- - Dernière réponse : cs_Loda
Messages postés
900
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.
Afficher la suite 

5 réponses

Messages postés
1270
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
0
Merci
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
Commenter la réponse de WhiteHippo
Messages postés
900
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
0
Merci
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.
Commenter la réponse de cs_Loda
Messages postés
1270
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
0
Merci
Salut Loda,

Juste par curiosité , ça fonctionne ou pas ?

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
Commenter la réponse de WhiteHippo
Messages postés
900
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
0
Merci
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.
Commenter la réponse de cs_Loda
Messages postés
900
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
0
Merci
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.
Commenter la réponse de cs_Loda