retaks666
Messages postés286Date d'inscriptionjeudi 2 janvier 2003StatutMembreDernière intervention16 juillet 2007
-
28 sept. 2006 à 15:41
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 2022
-
30 sept. 2006 à 05:10
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:
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.
retaks666
Messages postés286Date d'inscriptionjeudi 2 janvier 2003StatutMembreDernière intervention16 juillet 2007 28 sept. 2006 à 19:01
Ben j'avais cherché dans l'aide, mais j'avais rien trouvé d'intéressant :s
Sinon oui je galère pas mal avec les treeviews ... Je comprends ton code, mais je crois pas que ça soit ce que je recherche... Mon but est de lister toutes les valeurs des différents champs d'une table, puis ensuite de pouvoir les regrouper dans le second treeview, en pouvant nommer ces regroupements, et en évitant les doublons, afin de pouvoir créer facilement des vues.
J'ai règlé mon problème autrement, en fait, vu que les données étaient chargée d'une base de données, j'ai recopié directement depuis la base de donnée, et non depuis l'autre treeview, et apparement ça marche plutôt bien... J'ai aussi supprimer le test pour savoir si chacun des élements existait, puisque c'était inutile...
Je te remercie quand même de m'avoir consacrer un peu de ton précieux temps ;)
Encore avec ton TreeView ?? Ben alors on luttte lol.
Après la séquence détente, la séquence dispute : Tu es prié de chercher avant de poster. La touche F1 sert à quoi ??????
procedure TForm1.Button1Click(Sender: TObject);
Var
i : integer;
ACnode : TTreeNode;
begin
For i:=0 to (TreeView1.items.count-1) do // On fait une ptite boucle
Begin
If TreeView1.Items[i].parent=nil then //si pas de parent
TreeView2.Items.add(nil,TreeView1.items[i].text) //alors on additionne
Else TreeView2.Items.addChild(TreeView2.items[i-1],TreeView1.items[i].text); //sinon on additionne comme enfant à partir du TreeNode précédent
end;
End;
C'est quand meme netement moins pourris que ton code : lol.
TU sais quoi ? ca m'a pris 5 min en cherchant avec le bouton F1.
procedure TForm1.Button1Click(Sender: TObject);
Var
i : integer;
ACnode : TTreeNode;
begin
TreeView2.Items.add(nil,TreeView1.items[0].text);
For i:=1 to (TreeView1.items.count-1) do
Begin
If not assigned(TreeView1.Items[i].parent) then TreeView2.Items.add(nil,TreeView1.items[i].text)
Else TreeView2.Items.addChild(TreeView2.items[i-1],TreeView1.items[i].text);
end;
End;
Heu mon code fonctionne : il copie intégralement les items de treeview1 dans le treeview2 et il n'y a pas de doublon (maintenant si dans le treeview1 tu as deux items qui ont le meme string, il en sera de même dans le treeview2 : c'est une copie parfaite ^^).
Le mieux est de tester : tu prends deux treeview et un bouton. Et hop le tour est joué
Vous n’avez pas trouvé la réponse que vous recherchez ?
retaks666
Messages postés286Date d'inscriptionjeudi 2 janvier 2003StatutMembreDernière intervention16 juillet 2007 28 sept. 2006 à 22:59
Justement je ne voulais pas faire une copie parfaite, mais pouvoir n'ajouter qu'une node du treeview1 dans le treeview2, et si cette node existe déja dans le 2, prendre uniquement les élements qui n'existent pas !
Enfin laisse tomber j'ai réeussi a me débrouiller :)
retaks666
Messages postés286Date d'inscriptionjeudi 2 janvier 2003StatutMembreDernière intervention16 juillet 2007 28 sept. 2006 à 23:18
Ps, je n'avais pas vu ton deuxième post, à quoi sert la fonction assigned? J'ai pas delphi sous les yeux la, j'irai voir demain dans l'help sinon. Merci.
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202237 30 sept. 2006 à 05:10
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);
if (i mod 2) <> 0 then begin
application.ProcessMessages;
progressbar1.StepBy(2);
end;
end;
function getindex(const str: string; inode : ttreenode) : integer;
var
lt: string;
i : integer;
begin
result := -1;
lt := LowerCase(Str);
for i := 0 to inode.Count - 1 do
if Lowercase(inode.Item[i].Text) = lt then begin
result := i
exit;
end;
end;