Page 1 of 1

click sobre tree con checkbox

Posted: Fri Jun 08, 2012 6:40 pm
by Miguel Salas
Hola a Todos:
Tengo un Treeview , quiero que haga algo al marcar el check y que se grabe o sea al almar de nuevo el tree debe estar marcado o marcados los que ya clickiee. Tengo el evento al darle click sobre la rama mas no sobre el checkbox. ¿Alguien ya ha resuelto esto?

desde ya muchas gracias.

atte Miguel Salas
México

Re: click sobre tree con checkbox

Posted: Fri Jun 08, 2012 8:55 pm
by Raymundo Islas M.
Miguel,

Con ayuda del buen amigo William Morales, hace tiempo hice lo que necesitas, armar un tree y al seleccionar algunas opciones, estas se graben y despues cuando lo vuelvas a mostrar, salgan ya activas.

Sin embargo, quiero comentarte algo : Cuando son muchas las opciones del tree y mandas un Expand, tarda unos 5-7 segundos para que salgan los datos. Hace poco actualize el xHarbour y me empezo a encimar los nombres de las opciones quedando totalmente ilegible, Por lo que opte por implementar el tree en un xBrowse y los resultados fueron muy satisfactorios : mucho mas rapido y sin problemas de pintado.

Deja busco un respaldo del codigo por si te interesa.

Saludos

Re: click sobre tree con checkbox

Posted: Sun Jun 10, 2012 4:16 am
by Miguel Salas
te agradezco la respuesta y en espera de tu valiosa ayuda
saludos

Re: click sobre tree con checkbox

Posted: Sun Jun 10, 2012 3:34 pm
by Raymundo Islas M.
Miguel,

En alguna tabla o dbf debes tener uno o _ para guardar las claves de los items seleccionados, yo los separo usando ':'

Code: Select all

oTree := TTreeView():ReDefine( 101, oCatUsrFldr:aDialogs[2], CLR_BLACK, CLR_WHITE, .f. ,"RSTree" )
oTree:oFont := aSysFnts[9]
// Elementos del tree

Code: Select all

{'1101021' ,' Notas De Mostrador'                                            ,'K003'}, ;
{'1101022' ,' Facturas'                                                      ,'K004'}, ;
{'1101023' ,' Cotizaciones'                                                  ,'K005'}, ;
{'1101024' ,' Ventas Express'                                                ,'K006'}, ;
{'1101025' ,' Preventas/Pedidos'                                             ,'K007'}, ;
// Obtener items seleccionados

Code: Select all

static function GetUOptsSld( oTree, aItems )
local n, nCargo

for n = 1 to len( aItems )
  if oTree:GetCheck( aItems[n] )
     nCargo := aItems[ n ]:cargo
     if ascan( aUsrOptsSld, {|n| n == nCargo} ) == 0
        aadd( aUsrOptsSld, aItems[n]:cargo )              // Aqui guardo la clave de los items seleccionados : K003, K004, etc
     endif
  endif
  GetUOptsSld( oTree, aItems[n]:aItems )
next
   
return nil
*-----*
// Actualizar items seleccionados

Code: Select all

aOpts2Apl := HB_ATokens( aDmXDts[1,1], ":", .f., .f. )

SrcOptsValues( oTree, aItems, aOpts2Apl )
oTree:Refresh()

static function SrcOptsValues( oTree, aItems, aOptsGrntd )
local nQ

for nQ := 1 to len( aItems )
    oTree:SetCheck( aItems[nQ], .f. )
    if ascan( aOptsGrntd, aItems[nQ]:cargo ) > 0
        oTree:SetCheck( aItems[nQ], .t. )
    endif
    SrcOptsValues( oTree, aItems[nQ]:aItems, aOptsGrntd )
next

return nil
*-----*
Cualquier dudad estamos a la orden.

Saludos

Re: click sobre tree con checkbox

Posted: Mon Jun 11, 2012 9:41 pm
by Miguel Salas
Te agradezco infinitamente Raymundo... dejame probarlo y te comento

Re: click sobre tree con checkbox

Posted: Mon Jun 11, 2012 10:13 pm
by Miguel Salas
unas dudas,:
1- No veo en el codigo que uses la funcion "GetUOptsSld" (solo dentro de si misma ¿?)
2- El array aDmXDts ¿con que lo llenas?
3.- SrcOptsValues() la llamas al llenar el Tree?


como ves ando perdido en esto

saludos

Re: click sobre tree con checkbox

Posted: Tue Jun 12, 2012 1:51 pm
by Raymundo Islas M.
Miguel,

1- No veo en el codigo que uses la funcion "GetUOptsSld" (solo dentro de si misma ¿?)

Code: Select all

Cuando termino de seleccionar las opciones deseadas, mando llamar esta funcion para que recorra el tree y mando a un a un arreglo el cargo del elemento, que en este caso es la clave de la opcion. Y son las que se van a grabar en un campo.
2- El array aDmXDts ¿con que lo llenas?

Code: Select all

En mi caso, lo lleno desde un query del campo donde grabe las opciones previamente seleccionadas y grabadas, asi que, primero armas tu tree con tus opciones y enseguida le indicas cuales fueron seleccionadas previamente para que se muestren con tal atributo.
3.- SrcOptsValues() la llamas al llenar el Tree?

Code: Select all

Igual al punto anterior, se arma el tree, y despues le aplicas las opciones seleccionadas previamente.
Y sip, en efecto, las funciones SrcOptsValues() y GetUOptsSld() se llaman recursivamente para recorrer todos los branches del tree.

ya tienes la rutina para armar tu tree ? ya que ahi es donde esta el asunto para armar los "niveles" de tu tree.

Saludos

Re: click sobre tree con checkbox

Posted: Mon Feb 18, 2019 2:34 pm
by jbrita
Amigo Raymundo, tiene un ejemplo mas didactico con array

Saludos