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

Delphi Discussion :

Saturation treeview lors de copie de node


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Par défaut Saturation treeview lors de copie de node
    J'ai 2 treeview. La première récupère ses données dans une table, ensuite, on peut faire passer des données de la première vers la deuxième. J'utilise pour cela une boucle for pour copier les items.

    Voici un bout du 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
    21
    22
     
    nnode:=treecust.Items.AddChild(nil,treefields.Selected.text);
     
           for i := 0 to treefields.Selected.count - 1 do
           begin
           if(getindex(treefields.Selected.Item[i].text, nnode) < 0 ) then //
              treecust.Items.AddChild(nnode,treefields.Selected.Item[i].Text);
              application.ProcessMessages;
               progressbar1.StepBy(1);
           end;
     
    function TFORM1.getindex(str: string; inode : ttreenode) : integer;
      var
      i:integer;
      begin
      result:= -1;
          for i := 0 to inode.Count - 1 do
           begin
               if (Lowercase(inode.Item[i].Text)=lowercase(str)) then
               		result:=i
           end;
      end;
    Le soucis c'est que au delas d'une centaine d'enregistrement, le processeur est saturé, et cela mets beaucoup de temps à copier ... Quelqu'un aurait-il une autre méthode pour copier efficacement 2 nodes? Sachant que la node de destination n'est peut être pas vide, et ne dois pas avoir de doublons.

    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Salut,

    Avant la mise à jour des données, il faut que tu utilise BeginUpdate, et des que c'est fini, EndUpdate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    treecust.Items.BeginUpdate;
    for i := 0 to treefields.Selected.count - 1 do
           begin
           if(getindex(treefields.Selected.Item[i].text, nnode) < 0 ) then //
              treecust.Items.AddChild(nnode,treefields.Selected.Item[i].Text);
              application.ProcessMessages;
               progressbar1.StepBy(1);
           end;
    treecust.Items.EndUpdate;
    La différence sera flagrante....

    Ensuite, ton GetIndex, tu peux l'optimiser.

    Au lieu de parcourir tout les noeuds, tu arrête la boucle dès que tu as trouvé celui qui correspond (en plus si inode.Count est égal à zéro, ton machin plantera : for i:=0 to -1 do) :
    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
    function TFORM1.getindex(str: string; inode : ttreenode) : integer;
      var
      i:integer;
      trouve:boolean;
      begin
      result:= -1;
      trouve:=false;
      i:=0;
      while ((i<inode.Count) and (not trouve)) do
           begin
               trouve:=(Lowercase(inode.Item[i].Text)=lowercase(str));
               if trouve then result:=i;
               inc(i);
           end;
      end;
    Bon dev

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Par défaut
    Merci, je vais essayer ça tout de suite

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

Discussions similaires

  1. [Toutes versions] Problème de saturation mémoire lors d'une copie de contact
    Par langkif dans le forum VBA Outlook
    Réponses: 3
    Dernier message: 25/08/2010, 10h08
  2. [Excel] Supprimer des leins lors de copies d'onglet
    Par marsupilami34 dans le forum Excel
    Réponses: 9
    Dernier message: 26/07/2007, 10h36
  3. Probleme lors la copie de asp:table
    Par rabddoul dans le forum ASP.NET
    Réponses: 2
    Dernier message: 28/03/2007, 16h09
  4. erreur lors de copie de données
    Par vins111282 dans le forum Access
    Réponses: 2
    Dernier message: 15/01/2007, 13h25
  5. copy de nodes mais attribut en trop
    Par Triangle dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 15/06/2005, 18h30

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