La première remarque, c'est que tu complique pour rien : Mettre des pointeur partout ç'est mal(oui:je suis le président de l'Association d'Extermination des Pointeurs de Pointeurs)
Rapel1 : un objet est un pointeur.
Rapel 2 : un pointeur est une variable de 4 octect contenant une adresse
La ligne "PTreeNode_Actuel:= @CNode;" toute seul est dèja tout un poème.
CNode est une variable contenant une adresse.
@CNode est l'adresse de la variable contenant une adresse
Apperemment, PTreeNode_Actuel est un pointeur pointant sur un TTreeNode
Donc, PTreeNode_Actuel est une variable destiné à contenir l'adresse d'une varible contenant une adresse
Du coup, la ligne est effectivement corecte, mais p'tet un poil trop compliqué, non?
Code sugeré :
var TreeNode_Actuel : TTreeNode;
MaVar : TMaVar;
(...)
CNode := treeviewCible.Items.AddChild(TreeNode_Actuel, requete.FieldByName('EMPLACEMENT').AsString); New(Ptr); Ptr^.test := requete.FieldByName('PROFONDEUR').AsInteger; Ptr^.monchemin := requete.FieldByName('POSITION_NODE').AsString; Ptr^.fichier := requete.FieldByName('CHEMIN_EMPLACEMENT').AsString; Pointer_List.Add(Ptr);
CNode.Data:= Ptr; //et non @Ptr. Par contre, si tu avais un Variable de type TMaVar, tu pourait metre CNode := @MaVar
TreeNode_Actuel:= CNode; |
Je sais pas si ça sufira (par exemple, j'espère que tu initialise TreeNode_Actuel avant d'entrer dans la boucle), mais au moin, ca simplifie le debugage
Note : Tu peut définitivement te débarasser des pointeur (du moin des pointeur explicite) en transformant ton record en un objet (les record sont pratique pour lire/ecrire dans des fichiers, mais si tu met des "String" dedant, ça vas pas bien marcher)
Message édité par el zozo le 07-04-2006 à 14:52:23