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 :

Problème de fonction récursive avec un TcxDBTreeList


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 98
    Points : 69
    Points
    69
    Par défaut Problème de fonction récursive avec un TcxDBTreeList
    Bonjour,

    J'ai un problème avec une fonction récursive pour cocher/décocher en cascade les cases à cocher d'un composant TcxDBTreeList.

    Quand on coche une case, toutes les cases descendantes sont cochées sauf la dernière je ne comprends pas pourquoi (dernier noeud fils), voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
      procedure CheckTreeNode(Checked: integer; Col: TcxTreeListColumn; Node: TcxTreeListNode);
      var
        i: Integer;
        v: Boolean;
      begin
        v := False;
        Col.EditValue := Checked;
        for i := 0 to Node.Count - 1
        do begin
             { Obligatoire pour accéder aux items "non visibles" de l'arbre (branche non dépliée de l'arbre)... }
             v := Node.Items[i].IsVisible;
             if not v then Node.Expand(False);
             { ...Obligatoire pour accéder aux items "non visibles" de l'arbre (branche non dépliée de l'arbre) }
             Col.TreeList.FocusedNode := Node.Items[i];
             CheckTreeNode(Checked, Col, Node.Items[i]);
           end;
        { Obligatoire pour accéder aux items "non visibles" de l'arbre (branche non dépliée de l'arbre) }
        if not v then Node.Collapse(False);
      end;
    et l'appel à cette procédure dans la procédure "EditValueChanged" du composant TcxDBTreeList :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
      if UpdatingTreeCheckBoxes then Exit;
      UpdatingTreeCheckBoxes := True;
      try
        AColumn.TreeList.BeginUpdate;
        { Mémorisation de l'élément sélectionné }
        MemNode := AColumn.TreeList.FocusedNode;
        try
          CheckTreeNode(AColumn.EditValue xor 1, AColumn, AColumn.TreeList.FocusedNode);
        finally
          { Récupération de l'élément sélectionné par l'utilisateur }
          AColumn.TreeList.FocusedNode := MemNode;
          AColumn.TreeList.EndUpdate;
          { Les modifications n'ont pas encore été "sauvées" dans la base de données tant que ApplyUpdates()
            n'a pas été exécuté (=> on peut gérer l'annulation des modifications dans l'arbre) }
        end;
      finally
        UpdatingTreeCheckBoxes := False;
      end;
    Si quelqu'un a une idée, merci beaucoup, ou bien une solution alternative pour pouvoir cocher mes cases comme je le souhaite... merci beaucoup.

    Isa
    Isachat

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 98
    Points : 69
    Points
    69
    Par défaut
    En fait il semblerait que le pb soit lié à une particularité du composant TcxDBTreeList.
    J'ai juste rajouté une mémorisation du noeud d'entrée et restitution en sortie et - je n'ai pas compris le fond du pourquoi mais - cela a résolu mon problème.

    Isa
    Isachat

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction récursive avec objet en argument
    Par mkrzemin dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/11/2010, 18h18
  2. Problème sur fonction récursive simple
    Par zarohn dans le forum Débuter avec Java
    Réponses: 14
    Dernier message: 18/03/2010, 11h41
  3. Problème de fonction C avec PDA
    Par bilel benhalima dans le forum C++
    Réponses: 0
    Dernier message: 31/03/2008, 10h38
  4. Problème de fonction "const" avec une std::map
    Par Clad3 dans le forum SL & STL
    Réponses: 3
    Dernier message: 02/01/2007, 12h38
  5. [PHP-JS] Problème exécution fonction php avec js
    Par cokilulu dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 15/03/2006, 21h34

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