Ver Mensaje Individual
  #3  
Antiguo 09-04-2008
Jorge Rojas M. Jorge Rojas M. is offline
Miembro
 
Registrado: mar 2008
Posts: 12
Reputación: 0
Jorge Rojas M. Va por buen camino
Gracias por tu sugerencia de hecho ya pude realizar lo que quería.

Sólo tengo una duda:
Tengo el objeto TreeView creado con los punteros correspondientes a cada nodo, cuando yo cierro/destruyo el formulario que contiene el treeview, también se libera la memoria de todos los pointer que han sido creados.
Y de nuevo muchas gracias...

//el formulario 12 permite al usuario editar la descripción de una cuenta contable y sugiere el número de cuenta a crear.

procedure Tform11.crearrnodopadre;
//es prácticamente el mismo para el nodo hijo sólo que con AddChild

if form12.showmodalcuenta= mrOk then
begin
new(miclase);
miclase^.ncuenta:= IntToStr(treeview1.items.Count+1);
miclase^.descripcion:=form12.dcuenta.Text;
nodes := treeview1.Items.add(nil,IntToStr(treeview1.items.Count+1)); { Add a root node }
nodes.Data:=miclase; //asignar la descripción
end;
end;


y así lo leo, tal ycomo lo indicaste
index es la posición del nodo
catalogo.FieldByName('descripcion').Text:= Clase(TreeView1.items[index].Data).descripcion;







Cita:
Empezado por keyboy Ver Mensaje
Cada nodo (TTreeNode) tiene una propiedad Data de tipo Pointer que puedes apuntar a la estructura o clase que quieras. Simplemente tienes que tener cuidado con el manejo de la memoria. Lo más sencillo es que uses el evento OnAddition del Treeview para crear el objeto que desees y asignarlo al nodo:



Código Delphi [-]
procedure TForm1.TreeView1Addition(Sender: TObject; Node: TTreeNode);
var
Dato: TMiClase;

begin
Dato := TMiClase.Create(...);
Node.Data := Dato;
end;





y el evento OnDeletion para liberar memoria:


Código Delphi [-]
procedure TForm1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
begin
TMiClase(Node.Data).Free;
end;





Eso sí, para acceder a los datos del nodo tienes que hacer el moldeo:


Código Delphi [-]
TMiClase(TreeVie1.Selected.Data).Activo := ....;





Bye
Responder Con Cita