PDA

Ver la Versión Completa : ¿Cómo usar un Pointer?


fjolivares
31-03-2004, 10:25:19
Hola a todos, como se utiliza un pointer?

tengo un treeview y estoy intentando almacenar informacion en la propiedad Data de los nodos, q es TPointer, pero ni idea de por donde cogerlo.

Saludos a todos.

Lepe
31-03-2004, 13:37:19
Creo que es esto lo que necesitas.

type TCadena=String[255];

type TEnCD=record // el regisro asociado a cada nodo del TTreeview
Titulo,
Categoria,
RutaEnCD,
Comentario :Tcadena;
end;
type TpEnCD=^TEnCD;
// TpEnCD es un tipo de datos que será un puntero al registro TEnCD


var pn:TpEnCD;
begin
try
begin
new(pn); // creamos el espacio en memoria
pn^.Titulo:=edit1.text;
pn^.RutaEnCD:=edit2.text
pn^.Comentario:=richedit1.text;
pn^.Categoria:='CD sin categorias';
data := pn;

// y para recuperarlo :
pn := TpEnCD(Data);

// o bien
Showmessage(TpEnCD(Data)^.Titulo)


// para liberar de memoria:
dispose (TpEnCD(Data));


Saludos

delphi.com.ar
31-03-2004, 15:24:18
Algo muy importante: Al tratarse de punteros, luego queda en tus manos el echo de liberar la memoria utilizada por lo que apunte estos punteros, la metodología a utilizar, es asignar el puntero después que se crea el TTreeNode y lo importante que te quiero comentar, es utilizar el evento OnDeletion, para liberar la memoria utilizada por este puntero.

Saludos!

roman
31-03-2004, 17:55:34
Con la idea de Lepe puedes usar el puntero para guardar un registro en cada nodo.

También te comento que dado que los objetos son a fin de cuentas punteros puedes guardar directamente objetos en cada nodo haciendo el moldeo adecuado:

Data := Pointer(UnObjeto) // asignar el objeto
UnObjeto := TUnObjeto(Data) // recuperar el objeto

Esto, claro está, no invalida el hecho de tener que liberar recursos como apunta delphi.com.ar usando el método Free del objeto en el evento OnDeletion.

// Saludos

Lepe
31-03-2004, 18:13:57
Con la idea de Lepe ...

casi mejor..... Con la idea de Clubdelphi ;)


Saludos