-
[Pointer]Treeview.Data
Salut,
Je dispose d'un tree view que je remplis avec la méthode addObject... Je dispose donc sur chaque node d'un objet associé.
Lors d'un double click je veux récupérer cet objet pour l'envoyer à une fonction avec la propriété TreeView.Selected.Data pour l'associer à un Dataset (L'objet associé est un dataset si,si)... Et là le message fatal tombe 'erreur de lecture à l'adresse....' je ne continue pas, vous le connaissez tous... Une partie du code :
Code:
1 2 3 4 5 6 7 8
| FDetail1.CreateFields(TVTable.Selected.Data);
//puis :
procedure TFDetail.CreateFields(DataSet: Pointer);
begin
DSTb.DataSet := DataSet;
GridTable.DataSource := DSTb;
end; |
Bon là je sais vous allez me dire ça va pas marcher (et je suis d'accord) cependant j'ai essayé plein de solutions de transtypage et compagnie mais ça ne marche pas... :arf: ...
Une idée serait (avant mon décès prématuré par injection léthale de caféïne) d'une grande utilitée...
Merci d'avance
-
le data d'un noeud est juste un pointeur il faut que tu précise vers quel type il pointe
ca donne:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
//defini un type pointeur vers ce que tu veux
type
tmonpointeur=^tdataset; //avec un pointeur vers tdataset par ex
//ensuite dans ton code tu mets
FDetail1.CreateFields(tmonpointeur(TVTable.Selected.Data)^)
//tu precise que data est 1 pointeur de type 'tmonpointeur'
//et on sait que 'tmonpointeur' pointe vers un dataset
//oubli pas a la fin du prog de faire un dispose
dispose(tvtable.Selected.Data); |
le '^' est là pour préciser que ce que tu donne en parametre n'est pas le pointeur (cad une adresse) mais ce vers koi pointe le pointeur (cad le dataset)
Sinon pour ajouter ton noeud!
Code:
1 2 3 4 5 6 7 8 9
|
//declare la variable de type tmonpointeur
var monpointeur : tmonpointeur;
//ensuite tu fé un new
new(monpointeur);
//et tu l'affectes
noeudfils:=tvtable.Items.AddChildObject(noeudpere,'le text',monpointeur); |
si tu as besoin d'autres choses sur les treeview hésite pas à me demander...
:bebe:
-
je vois pas pourquoi il faudrait créer un type de pointeur, si il passe directement le dataset c'est bon aussi puisque tout objet est un pointeur en Delphi...
-
Merci, je vais essayer ...
Priez pour nous
-
C'est pas faux ça antp...
-
ouai exact...
alors tu peux essayer :
Code:
1 2
|
DSTb.DataSet :=Tdataset(DataSet); |
a moins que tu l'ai deja fé....
:bebe:
-
Déja fé mais c'est résolu... J'ai pris en compte que les objets étaient des pointeurs et je me suis arrangé pour attacher un objet différent à treeview,j'ai pu l'affecter directement par transtypage... Mais ta solution doit être valable, c'est comme ça qu'ils expliquent dans l'aide...
-
[Composant+Package]: [DBTreeview, Treeview]