IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

[XE2][Win7] Surcharge de TTreeNode


Sujet :

Composants VCL Delphi

  1. #1
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 190
    Points : 83
    Points
    83
    Par défaut [XE2][Win7] Surcharge de TTreeNode
    Bonjour,

    Je souhaite obtenir une arborescence qui ne soit pas basée sur des TTreeNode, mais sur un TMyTreeNode directement dérivé par mes soins de la bonne vieille classe TTreeNode.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    m_pTreeNode := TMyTreeNode.Create(pTreeView.Items) ;
    pTreeView.Items.AddNode(m_pTreeNode,ObjectParent.TreeNode,'',nil,naAddChild);
    Lorsque j'execute la seconde ligne, j'obtiens l'inexplicable message d'erreur :

    EOutOfRessources with message 'Unable to insert an item'
    J'ai pas mal cherché dans l'aide et dans le code de la vcl, rien à faire.
    Même la discussion : Sucharger un TreeNode [Résolu] ne m'a pas aidé...

    Quelqu'un peut-il m'aider ?

    Par avance, merci
    Jbat.
    Pour mes développements, j'utilise :
    WinX-64bits, Delphi Tokyo 10.2.2
    Merci, merci, merci... moi aussi je vous aime, c'est trop d'émotions...
    Key user des blagues nulles

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 683
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 683
    Points : 13 092
    Points
    13 092
    Par défaut
    Tu ne peux pas ainsi. Le nouveau type doit être passé dans l'événement OnCreateNodeClass et le nœud doit être créé par l'intermédiaire du TreeView :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NewNode := TreeView1.Items.Add();
    Il faut ensuite transtyper le résultat pour le remplir puisque Add ne renvoit toujours qu'un TTreeNode

  3. #3
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 190
    Points : 83
    Points
    83
    Par défaut
    Merci beaucoup Andnotor pour ta solution. Ceci me semble une façon de faire beaucoup plus propre (et surtout plus fonctionnelle ).

    Toutefois, j'ai découvert un autre problème un peu plus loin...

    Après avoir changé dynamiquement le parent de mon TTreeView, j'ai un comportement étrange :

    - avant d'implémenter ta solution et après le changement de parent, mes TreeNode n'étaient plus instance de ma classe dérivée TMyTreeNode, mais étaient redevenus instance de la classe de base TTreeNode.

    - après implémentation de ta solution et changement de parent du treeview, mes TreeNode restent instance de ma classe dérivée TMyTreeNode, mais ne sont pas/plus initalisés.

    J'ai tenté d'implémenter la méthode Assign dans ma classe dérivée, mais nous n'y passons même pas. Pourtant, le changement de parent dynamique du treeview détruit tous mes noeuds et les recréé (maintenant) avec la bonne classe dérivée. Mais pourquoi leurs propriétés spécifiques ne sont pas restaurées ?

    NB : En fait, plus j'avance, plus je constate que la source de tous mes ennuis, c'est que mes TreeNode quels que soient leur classe (dérivée ou non de TTreeNode), sont backupés puis restaurés plus ou moins adroitement lorsque je change dynamiquement la propriété parent du treeview (ou la propriété parent de l'un des composants dans la chaine hiérarchique au dessus du treeview). Donc as-ton possibilité de modifier l'un des parents sans que ça mette son nez dans les treenodes que j'ai géré ?

    J'ai manqué quelque chose ?
    Pour mes développements, j'utilise :
    WinX-64bits, Delphi Tokyo 10.2.2
    Merci, merci, merci... moi aussi je vous aime, c'est trop d'émotions...
    Key user des blagues nulles

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 683
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 683
    Points : 13 092
    Points
    13 092
    Par défaut
    J'ai été ennuyé la même chose ! J'ai pour l'instant déplacé la création des nœuds dans OnShow plutôt que OnCreate. Voici d'ailleurs le commentaire que j'ai ajouté à mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //Ces initialisations devraient être dans OnCreate, mais le ManualDock corrompt la structure Nodes. Incompréhensible !!!
    ps: ManualDock égal changement de parent.

  5. #5
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 190
    Points : 83
    Points
    83
    Par défaut
    J'avais édité mon message au même moment où tu as répondu, donc pour être plus lisible dans ce fil, voici ce que je disais :

    En fait, plus j'avance, plus je constate que la source de tous mes ennuis, c'est que mes TreeNode quels que soient leur classe (dérivée ou non de TTreeNode), sont backupés puis restaurés plus ou moins adroitement lorsque je change dynamiquement la propriété parent du treeview (ou la propriété parent de l'un des composants dans la chaine hiérarchique au dessus du treeview). Donc as-ton possibilité de modifier l'un des parents sans que ça mette son nez dans les treenodes que j'ai géré ?

    J'ai bien peur que la réponse soit déjà donnée, mais je retente : Peut-on changer le parent ou l'aileul du TreeView sans qu'il touche aux treenodes ?
    Parce qu'afin d'avancer sur mon projet, je tente plusieurs approches du problème et une autre approche utilise finalement des TTreeNode non dérivés, mais malgré ça, changer le Parent pose toujours de gros problèmes dans l'organisation des node !...

    Ps : le manual docking est une contrainte que j'ai dans mon projet.
    Pour mes développements, j'utilise :
    WinX-64bits, Delphi Tokyo 10.2.2
    Merci, merci, merci... moi aussi je vous aime, c'est trop d'émotions...
    Key user des blagues nulles

Discussions similaires

  1. [Win7][XE2] Quantifier le temps perdu
    Par jbat dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 27/11/2013, 16h11
  2. Modifier l'icone d'un TTreeNode sur click
    Par ramseb dans le forum Composants VCL
    Réponses: 6
    Dernier message: 06/08/2003, 13h55
  3. Réponses: 5
    Dernier message: 24/04/2003, 11h47
  4. Surcharger le message d'erreur après un OnException
    Par Tirlibibi dans le forum XMLRAD
    Réponses: 2
    Dernier message: 24/04/2003, 11h42
  5. Réponses: 8
    Dernier message: 20/11/2002, 11h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo