Hola, primero decir que como vengo del mundo del java aun se me siguen trabando algunas cosas de Delphi que hacia algunos años que no tocaba.
Tengo una clase TForm con un TTreeView y una clase digamos B, que recibe en el constructor el TTreeNodes del TTreeview, extrae y guarda el primer nodo del TTreeView en la variable Normas que es de tipo TTreeNode. Posteriormente se usara para poder recorrer los nodos del TTreeView desde dentro de B sin necesitar conocer el TTreeView. La intencion final es mantener la vista separada de la capa negocio, al menos esa es mi idea.
Cuando intento recorrer el arbol del TTreeView en la clase B gracias a la variable Normas que apunta a su primer nodo, obtengo datos extraños que no son los de los nodos del arbol, que se muestra correctamente en el Form con sus datos.
El nodo Normas parece apuntar a un unico nodo que contiene el valor '' y que no tiene ni hijos ni hermanos, cuando deberia apuntar a un arbol con muchos nodos y datos diferentes.
No es que haya ningun error de compilacion ni en tiempo de ejecucion, simplemente algo hay mal hecho que no alcanzo a ver pero que no hace romper al programa.
Es Delphi 2010.
Ahi les dejo el codigo con algunos comentarios a ver si alguien ve algo porque yo ya estoy mareado de tanto mirarlo, y seguro que una linea vale mas que mil palabras.
Y muchas gracias por el tiempo.
Código Delphi
[-]
unit B;
type
B = class
Normas: TTreeNode;
constructor Create(headNormas: TTreeNodes);
destructor Destroy;override;
...
implementation
constructor B.Create(headNormas: TTreeNodes);
begin
Normas:=TTreeNode.Create(headNormas);
end;
end;
---------------------------------------------------------------------
unit SDIMAIN;
type
TSDIAppForm = class(TForm)
treeNormas: TTreeView;
...
procedure CargarTree;
...
private
FRL:B;
end;
implementation
procedure TSDIAppForm.CargarTree;
...
treeNormas.LoadFromFile(name);
FRL:=B.Create(treeNormas.Items);
...
function TInterpreteFRL.getNorma(nombreNorma: String): TTreeNode;
var
nodo: TTreeNode;
begin
nodo := Normas; <<<<<<<< AQUI ES DONDE CARGA EL VALOR EXTRAÑO ''
while (nodo <> NIL) and (nodo.Text <> nombreNorma) do
nodo := nodo.GetNextSibling;
getNorma := nodo;
end;