click sobre tree con checkbox

Post Reply
Miguel Salas
Posts: 132
Joined: Sun Oct 23, 2005 4:09 pm
Location: Pánuco,Ver. México

click sobre tree con checkbox

Post 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
User avatar
Raymundo Islas M.
Posts: 590
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Re: click sobre tree con checkbox

Post 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
FWH 10.6 + xHarbour + Borland 582
Miguel Salas
Posts: 132
Joined: Sun Oct 23, 2005 4:09 pm
Location: Pánuco,Ver. México

Re: click sobre tree con checkbox

Post by Miguel Salas »

te agradezco la respuesta y en espera de tu valiosa ayuda
saludos
User avatar
Raymundo Islas M.
Posts: 590
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Re: click sobre tree con checkbox

Post 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
FWH 10.6 + xHarbour + Borland 582
Miguel Salas
Posts: 132
Joined: Sun Oct 23, 2005 4:09 pm
Location: Pánuco,Ver. México

Re: click sobre tree con checkbox

Post by Miguel Salas »

Te agradezco infinitamente Raymundo... dejame probarlo y te comento
Miguel Salas
Posts: 132
Joined: Sun Oct 23, 2005 4:09 pm
Location: Pánuco,Ver. México

Re: click sobre tree con checkbox

Post 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
User avatar
Raymundo Islas M.
Posts: 590
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Re: click sobre tree con checkbox

Post 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
FWH 10.6 + xHarbour + Borland 582
jbrita
Posts: 425
Joined: Mon Jan 16, 2006 3:42 pm

Re: click sobre tree con checkbox

Post by jbrita »

Amigo Raymundo, tiene un ejemplo mas didactico con array

Saludos
Post Reply