by VPOZO » Thu Oct 01, 2009 10:08 pm
Mario en estos momenots me veo enfrentado al mismo problema que tu pero luego de hacer varias pruebas, opte por hacer algo diferente, veras en mi caso las ramas del tree tienen en algunos casos el mismo cprompt, lo que me complicaba mas el tema al ir a la tabla a buscar con esto "cprompt". Me di cuenta que cada rama del tree es un objeto y tiene un numero de manejador que es unico asi que lo que hice fue guardar estos numeros en arreglos para despues buscar en otro vector relacionado el valor de la clave que necesito para hacer el seek en la tabla. Todo esta en ocupar dos arreglos con la misma cantidad de elementos. este es un ejemplo:
ahItem = guarda los manejadores
aBound = guardo la clave a buscar en la talba
//-------------------------------------------
#Include "Fivewin.ch"
MEMVAR ahItem, aBound
FUNCTION Main()
LOCAL oDlgTree, oTree
PRIVATE ahItem:={}, aBound:={}
DEFINE DIALOG oDlgTree FROM 2,3 TO 40, 40 TITLE "PRUEBA DEL TREE" RESOURCE "DLG_MANTREE"
//--> Defino el Tree desde un Recurso
oTree:= TTreeview():ReDefine( 800, oDlgTree, 0, RGB( 255, 255, 255) )
//--> en este bloque muestro inflormacion de la rama del tree al hacer click
//--> y lo que le paso como parametro es el manejador del objeto item
oTree:bChanged := { |oTree,oItem| Verarbol( oTree:GetSelected():hItem ) }
ACTIVATE DIALOG oDlgTree CENTERED ArmTree(oTree)
RETURN Nil
---------------------------------*
* HACE EL LLENADO DEL TREE CON UNA
* TABLA DONDE ESTAN TODAS LAS REGIONDE DEL PAIS
* !CHILE!
*---------------------------------*
FUNCTION ArmTree( oTree)
LOCAL oItem1
Select RChile
Go Top
Do While !Eof()
//--> Busco el nombre de la Region y lo coloco com rama del arbol
Select Regiones
Seek RChile->Regi_chile
oItem1 := oTree:Add( Regiones->Nomb_regio, 0)
//--> Llena el arreglo con los manejadores de los objetos item
Aadd( ahItem, oItem1:hItem )
//--> llena este arrehlo con la clave que luego buscare
Aadd( aBound, RChile->Regi_chile )
SkIP
Enddo
RETURN Nil
*-----------------------------*
* muestro los campos correspondientes a la rama del tree
* donde se hiso click
*-----------------------------*
FUNCTION Verarbol( nhItem )
LOCAL nPos:=0, cRegion:=""
nPos := Ascan( ahItem, nhItem)
//--> busco con el valor aBound en la tabla de regiones
If nPos > 0 .and. DbSeek( aBound[nPos] )
Select Regiones
cRegion := Regiones->Nomb_regio
Endif
RETURN cRegion //--> devuelve el nombre de la regio pero la puedes modificar para que retorne lo que quieras