Page 1 of 2
Inicie repositorio prueba e Tree (LO LOGRE)
Posted: Mon Aug 21, 2023 6:02 am
by goosfancito
Hola.
Inicie un repositorio en git para ir poniendo el avance que tengo en el tree. El proyecto lo arme con el entorno del xMate (en el raíz existe un archivo con el nombre harbour32.env) los que quieran colaborar bienvenido sean.
La idea del Tree:
1) poder insertar ramas con los datos: Fecha, Nombre y Apellido
2) poder modificar los datos que se ingresaron
2) poder eliminar una rama
3) mantener ordenado el arbol.
4) poder guardar en un .txt el arbol
5) poder "rearmarlo" leyendo ese .txt el arbol.
Si tienen alguna idea y si Antonio lo permite me gustaría que en este hilo lo pongan y vamos discutiendo. Este repositorio es público y no lo voy a eliminar. No quiero usar xBrowse ni nada por el estilo, solo un Tree.
https://github.com/gusmavf/prueba_tree_2024
Re: Inicie repositorio prueba e Tree
Posted: Mon Aug 21, 2023 7:59 pm
by goosfancito
Antonio
Ahi subí al repositorio lo que estoy haciendo y me esta pasando lo siguiente:
en el archivo arbol_2024.prg en la linea 125 intento guardar en una variable que la declaro a nivel del metodo llamada "oRama" el ítem que se
selecciona, el item es seleccionado pero no lo deja pintado, ahora si yo no hago esa asignación, o sea lo dejo simplemente asi:
Code: Select all | Expand
oTree:blclicked := { | nRow, nCol, nKeyFlags | ::seleccionarRama( oTree, nRow, nCol, nKeyFlags ) }
el item seleccionado queda pintado, porque puede estar pasando eso?
Re: Inicie repositorio prueba e Tree
Posted: Tue Aug 22, 2023 5:27 am
by Antonio Linares
Estimado Gustavo,
No se a que te refieres exactamente
Puedes hacer un video para que se entienda lo que estas haciendo y lo que sucede ? gracias
Re: Inicie repositorio prueba e Tree
Posted: Tue Aug 22, 2023 5:46 am
by goosfancito
ejecuta el programa y luego
selecciona alguna de las ramas y vas a ver que no queda "pintado" en azul. PERO internamente si se ha seleccionado.
despues de eso:
si cambias la linea como lo digo en el post vas a ver que al seleccionar algun item si queda "pintado"
https://drive.google.com/file/d/1Xlj2VA ... drive_link
Re: Inicie repositorio prueba e Tree
Posted: Tue Aug 22, 2023 11:18 am
by Antonio Linares
Comenta esta línea:
// oTree:blclicked := { | nRow, nCol, nKeyFlags | oRama:= ::seleccionarRama( oTree, nRow, nCol, nKeyFlags ) }
No puedes interferir el funcionamiento por defecto del botón izquierdo en el árbol
Re: Inicie repositorio prueba e Tree
Posted: Tue Aug 22, 2023 11:21 am
by Antonio Linares
He usado estos fichero go.bat y tree.hbp para construir con hbmk2:
go.bat
Code: Select all | Expand
set path=c:\bcc7\bin
c:\harbour\bin\win\bcc\hbmk2 tree.hbp -comp=bcc
tree.hbp
Code: Select all | Expand
-I.\Include
-Ic:\fwh\include
source\arbol_2024.prg
source\TAbm.prg
source\extra\debug.prg
-Lc:\fwh\lib
-lfiveh
-lfivehc
Resource\recursos.res
hbwin.hbc
hbmzip.hbc
hbziparc.hbc
hbfoxpro.hbc
hbct.hbc
xhb.hbc
Re: Inicie repositorio prueba e Tree
Posted: Tue Aug 22, 2023 11:23 am
by Antonio Linares
Deberias usar el código de FWH\samples\pim.prg y no reinventar la rueda
Re: Inicie repositorio prueba e Tree
Posted: Tue Aug 22, 2023 1:00 pm
by goosfancito
Antonio Linares wrote:Comenta esta línea:
// oTree:blclicked := { | nRow, nCol, nKeyFlags | oRama:= ::seleccionarRama( oTree, nRow, nCol, nKeyFlags ) }
No puedes interferir el funcionamiento por defecto del botón izquierdo en el árbol
y en este caso que necesito que al hacer un click me seleccione una rama como lo hago?
el pim.prg (hablo por mi) se me es muy dificil seguirlo con lo que tengo que hacer.
Ahora estoy avanzando y el modo que encontre mas facil para mi es ir ubicando las ramas en la posicion que necesito (fecha menor arriba de las siguientes) y no ordenar al arbol una vez que inserto la rama, ya despues subo lo que estoy logrando justamente para que el que quiera colaborar con las ideas las haga.
Re: Inicie repositorio prueba e Tree
Posted: Tue Aug 22, 2023 6:37 pm
by Antonio Linares
Usa oTree:bChanged
Re: Inicie repositorio prueba e Tree
Posted: Thu Aug 24, 2023 5:30 pm
by goosfancito
Estoy intentando hacer con el scan del tree y ascan para recorrerlo pero no me da.
tengo un tree con ramas, necesito saber el hitem de cada rama para compararlo con otro hitem
el primer paso que hice fue
diganme si me equivoco porque es todo nuevo esto para mi.
en esa linea lo que hago es tomar "Cada rama" ?
y en esa linea lo que hago es recorrerme los "aItems" de cada rama?
Code: Select all | Expand
oTree:scan( { |o| aScan(o:aItems, { | a | a:hitem == nOtroHitem }) })
y yo pienso que con esa ultima linea haria lo que necesito pero no, no funciona.
Error description: Error BASE/1066 Argument error: conditional
Args:
[ 1] = N 0
Re: Inicie repositorio prueba e Tree
Posted: Thu Aug 24, 2023 8:28 pm
by Antonio Linares
Prueba esto:
oTree:Scan( { | o | MsgInfo( o:cPrompt ), .F. } )
Re: Inicie repositorio prueba e Tree
Posted: Mon Aug 28, 2023 6:50 am
by goosfancito
Antonio,
Necesito una vez que creo una rama moverla una rama mas arriba (solo una posicion) he intentado hacer esto pero no me sale, como se hace?
Code: Select all | Expand
oItem := oTree:scan( { | o | o:hitem == oRama:aItems[ 1 ]:hitem } )
oItem := oTree:insertAfter( oItem, cPrompt )
oItem:cargo := { ;
"fecha" => vGets[ 1 ], ;
"hitem_parent" => IIf( oItem:oParent != NIL, oItem:oParent:hitem, 0 ) ;
}
oTree:SwapUp()
Solo me estaría faltando eso para poder terminar con esto.
La técnica que usé fue cada vez que se inserta una rama comprobar cual es la inmediata superior (con respecto a la fecha) y crearla arriba de esa rama. el problema que tenía es que si estoy en la posicion 1 de aItems no puedo generar una rama sobre ella, entonces la quiero generar abajo y moverla una posición hacia arriba.
Re: Inicie repositorio prueba e Tree
Posted: Mon Aug 28, 2023 8:42 am
by Antonio Linares
Estimado Gustavo,
Prueba así:
Code: Select all | Expand
oItem := oTree:scan( { | o | o:hitem == oRama:aItems[ 1 ]:hitem } )
oItem := oTree:insertAfter( oItem, cPrompt )
oItem:cargo := { ;
"fecha" => vGets[ 1 ], ;
"hitem_parent" => IIf( oItem:oParent != NIL, oItem:oParent:hitem, 0 ) ;
}
oTree:Select( oItem )
oTree:SwapUp()
Re: Inicie repositorio prueba e Tree
Posted: Mon Aug 28, 2023 8:52 am
by goosfancito
Code: Select all | Expand
Error occurred at: 28/08/2023, 10:52:13
Error description: Error BASE/1004 No exported method: HITEM
Args:
[ 1] = U
Stack Calls
===========
Called from: => HITEM( 0 )
Called from: Source\tree_fw\ttreevie.prg => TTREEVIEW:INSERTAFTER( 323 )
Called from: Source\tree_fw\ttreevie.prg => TTREEVIEW:SWAPUP( 563 )
Re: Inicie repositorio prueba e Tree
Posted: Mon Aug 28, 2023 9:00 am
by Antonio Linares
Mira el código de los métodos:
Code: Select all | Expand
METHOD SwapDown() CLASS TTreeView
local oSelItem := ::GetSelected(), cPrompt := oSelItem:cPrompt
::GoNext()
oSelItem:End()
::Select( ::InsertAfter( ::GetSelected(), cPrompt ) )
return nil
//----------------------------------------------------------------------------//
METHOD SwapUp() CLASS TTreeView
local oSelItem := ::GetSelected(), cPrompt := oSelItem:cPrompt
::GoPrev()
::GoPrev()
oSelItem:End()
::Select( ::InsertAfter( ::GetSelected(), cPrompt ) )
return nil