FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Cambiar Tree Completo Sobre xBrowse (solucionado)
Posts: 1816
Joined: Wed Oct 26, 2005 02:49 PM
Cambiar Tree Completo Sobre xBrowse (solucionado)
Posted: Fri Mar 04, 2022 11:12 PM
Hola buenas tardes para todos

Estoy intentando cambiar por completo el oTree que tengo montado sobre el xbrowse, intento usar la funci贸n oBrw:settree() pero lo que hace es sobre poner las columnas que se est谩n mostrando.

Si se hace varias veces clic sobre el bot贸n de cambio, se aumentan mas y mas columnas.



Code (fw): Select all Collapse
#include "fivewin.ch"

function Main()

local oTree, oFont2, oBtCmb
local oDlg, oFont, oBrw

Local cbCambioEstado := <|x|
聽 聽 oBrw:oTreeItem:Cargo[2] := x
聽 聽 oBrw:refresh()
>

Local cbCambioTree := <||
聽 聽 oTree := buildtree2()
聽 聽 oBrw:SetTree(oTree)
聽 聽 oBrw:refresh()聽 
聽 聽 oTree:OpenAll()聽
>

oTree := buildtree1()

DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-15
DEFINE FONT oFont2 NAME "TAHOMA" SIZE 0,-9

DEFINE DIALOG oDlg SIZE 700,500 PIXEL TRUEPIXEL FONT oFont

聽 聽 @ 0, 20 BUTTONBMP oBtCmb OF oDlg PIXEL size 80, 21 PROMPT "Cambiar oTree" FONT oFont2 ACTION EVAL(cbCambioTree)聽

聽 聽 @ 20,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
聽 聽 DATASOURCE oTree ;
聽 聽 COLUMNS 2 ;
聽 聽 HEADERS "ITEM", "AUTO";
聽 聽 CELL LINES NOBORDER

聽 聽 WITH OBJECT oBrw
聽 聽 :lDisplayZeros := .f.
聽 聽 :aCols[ 1 ]:AddBitmap( { FWDArrow(), FWRArrow(), GetTreeBmps()[ 2 ] } )

聽 聽 :aCols[2]:bEditValue := {|| oBrw:oTreeItem:Cargo[2] }
聽 聽 :aCols[2]:cDataType 聽:= "L"
聽 聽 :aCols[2]:nEditType := EDIT_GET
聽 聽 :aCols[2]:SetCheck()
聽 聽 :aCols[2]:bOnPostEdit 聽 聽:= { | o, x, n | EVAL(cbCambioEstado,x) }聽 聽 聽 

聽 聽 :bClrStd := { || { CLR_BLACK, If( oBrw:oTreeItem:nLevel == 1, CLR_YELLOW, CLR_WHITE ) } }

聽 聽 :CreateFromCode()
聽 聽 END
聽 聽 oTree:OpenAll()

ACTIVATE DIALOG oDlg CENTERED
RELEASE FONT oFont

return nil

//CONSTRUIMOS EL PRIMER TREE
function buildtree1()
Local oTree
Local aData := {}
Local aData2 := {}
Local t,r

aData 聽 聽:= ;
{ 聽{ "Facturas", 00,.T. 聽} ;
, 聽{ "Pedidos", 00,.F. } ;
, 聽{ "Remsiones", 00,.F. } ;
, 聽{ "Notas", 00,.F. } ;
}

aData2 聽 聽:= ;
{ 聽{ "Agregar ", 01,.T. } ;
, 聽{ "Modificar ", 02,.T. } ;
}

TREE oTree
FOR r:=1 TO len(aData)
聽 聽 TREEITEM aData[r][1] CARGO { 聽aData[r][2] , aData[r][3] 聽}聽 聽 聽 
聽 聽 TREE
聽 聽 FOR t:=1 TO len(aData2)
聽 聽 聽 聽 TREEITEM aData2[t][1] CARGO { aData2[t][2] , aData2[t][3] 聽}
聽 聽 NEXT 聽
聽 聽 ENDTREE
NEXT聽 聽 
ENDTREE

Return oTree

//CONSTRUIMOS EL SEGUNDO TREE
function buildtree2()
Local oTree
Local aData := {}
Local aData2 := {}
Local t,r

aData 聽 聽:= ;
{ 聽{ "Cuentas", 00,.T. 聽} ;
, 聽{ "Comprobantes", 00,.F. } ;
, 聽{ "Centros", 00,.F. } ;
, 聽{ "Conceptos", 00,.F. } ;
, 聽{ "Consultas", 00,.F. } ;
}

aData2 聽 聽:= ;
{ 聽{ "Eliminar", 00,.T. } ;
, 聽{ "Enviar ", 00,.T. } ;
, 聽{ "Procesar ", 00,.T. } ;
, 聽{ "Anular ", 00,.T. } ;
}

TREE oTree
FOR r:=1 TO len(aData)
聽 聽 TREEITEM aData[r][1] CARGO { 聽aData[r][2] , aData[r][3] 聽}聽 聽 聽 
聽 聽 TREE
聽 聽 FOR t:=1 TO len(aData2)
聽 聽 聽 聽 TREEITEM aData2[t][1] CARGO { aData2[t][2] , aData2[t][3] 聽}
聽 聽 NEXT 聽
聽 聽 ENDTREE
NEXT聽 聽 
ENDTREE

Return oTree
Saludos
LEANDRO AREVALO
Bogot谩 (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Cambiar Tree Completo Sobre xBrowse
Posted: Sat Mar 05, 2022 08:33 AM

Estimado Leandro,

Esto tiene que revisarlo Rao. Se lo comento, gracias :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Cambiar Tree Completo Sobre xBrowse
Posted: Sat Mar 05, 2022 12:30 PM
Use this code
Code (fw): Select all Collapse
Local cbCambioTree := <||
    oTree := buildtree2()
    oBrw:oTree := oTree
    oBrw:GoTop()
    oBrw:refresh()
    oTree:OpenAll()
    oBrw:SetFocus()
    return nil
>
Regards



G. N. Rao.

Hyderabad, India
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Cambiar Tree Completo Sobre xBrowse
Posted: Sat Mar 05, 2022 01:06 PM
Remove this code:
Code (fw): Select all Collapse
    :aCols[2]:bEditValue := {|| oBrw:oTreeItem:Cargo[2] }
    :aCols[2]:cDataType  := "L"
    :aCols[2]:nEditType := EDIT_GET
    :aCols[2]:SetCheck()
    :aCols[2]:bOnPostEdit    := { | o, x, n | EVAL(cbCambioEstado,x) }

This one line of code is recommended.
Code (fw): Select all Collapse
    :aCols[ 2 ]:SetCheck( nil, .t. )


XBrowse automatically creates codeblocks bEditValue and bOnPostEdit. Better not to override them.
Regards



G. N. Rao.

Hyderabad, India
Posts: 1816
Joined: Wed Oct 26, 2005 02:49 PM
Re: Cambiar Tree Completo Sobre xBrowse
Posted: Sat Mar 05, 2022 02:33 PM
Excelente Mr Rao, muchas gracias. :-) :-) :-)

Lo 煤nico es que deje bOnPostEdit, por que necesito ejecutar una acci贸n sobre la base de datos, diferente a cambiar el setcheck.

El c贸digo quedo de la siguiente manera:

Code (fw): Select all Collapse
#include "fivewin.ch"

function Main()

local oTree, oFont2, oBtCmb
local oDlg, oFont, oBrw

Local cbCambioEstado := <|x|
聽 聽 //Aqui ejecuto mi acci贸n personalizada, sobre la base de datos
聽 聽 oBrw:oTreeItem:Cargo[2] := x
聽 聽 oBrw:refresh()
>

Local cbCambioTree := <||
聽 聽 oTree := buildtree2()
聽 聽 oBrw:oTree := oTree
聽 聽 oBrw:GoTop()
聽 聽 oBrw:refresh()
聽 聽 oTree:OpenAll()
聽 聽 oBrw:SetFocus()
聽 聽 return nil聽 
>

oTree := buildtree1()

DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-15
DEFINE FONT oFont2 NAME "TAHOMA" SIZE 0,-9

DEFINE DIALOG oDlg SIZE 700,500 PIXEL TRUEPIXEL FONT oFont

聽 聽 @ 0, 20 BUTTONBMP oBtCmb OF oDlg PIXEL size 80, 21 PROMPT "Cambiar oTree" FONT oFont2 ACTION EVAL(cbCambioTree)聽

聽 聽 @ 20,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
聽 聽 DATASOURCE oTree ;
聽 聽 COLUMNS 2 ;
聽 聽 HEADERS "ITEM", "AUTO";
聽 聽 CELL LINES NOBORDER

聽 聽 WITH OBJECT oBrw
聽 聽 :lDisplayZeros := .f.
聽 聽 :aCols[ 1 ]:AddBitmap( { FWDArrow(), FWRArrow(), GetTreeBmps()[ 2 ] } )

聽 聽 :aCols[ 2 ]:SetCheck( nil, .t. )
聽 聽 :aCols[ 2 ]:bOnPostEdit 聽 聽:= { | o, x, n | EVAL(cbCambioEstado,x) }

聽 聽 :bClrStd := { || { CLR_BLACK, If( oBrw:oTreeItem:nLevel == 1, CLR_YELLOW, CLR_WHITE ) } }

聽 聽 :CreateFromCode()
聽 聽 END
聽 聽 oTree:OpenAll()

ACTIVATE DIALOG oDlg CENTERED
RELEASE FONT oFont

return nil

//CONSTRUIMOS EL PRIMER TREE
function buildtree1()
Local oTree
Local aData := {}
Local aData2 := {}
Local t,r

aData 聽 聽:= ;
{ 聽{ "Facturas", 00,.T. 聽} ;
, 聽{ "Pedidos", 00,.F. } ;
, 聽{ "Remsiones", 00,.F. } ;
, 聽{ "Notas", 00,.F. } ;
}

aData2 聽 聽:= ;
{ 聽{ "Agregar ", 01,.T. } ;
, 聽{ "Modificar ", 02,.T. } ;
}

TREE oTree
FOR r:=1 TO len(aData)
聽 聽 TREEITEM aData[r][1] CARGO { 聽aData[r][2] , aData[r][3] 聽}聽 聽 聽 
聽 聽 TREE
聽 聽 FOR t:=1 TO len(aData2)
聽 聽 聽 聽 TREEITEM aData2[t][1] CARGO { aData2[t][2] , aData2[t][3] 聽}
聽 聽 NEXT 聽
聽 聽 ENDTREE
NEXT聽 聽 
ENDTREE

Return oTree

//CONSTRUIMOS EL SEGUNDO TREE
function buildtree2()
Local oTree
Local aData := {}
Local aData2 := {}
Local t,r

aData 聽 聽:= ;
{ 聽{ "Cuentas", 00,.T. 聽} ;
, 聽{ "Comprobantes", 00,.F. } ;
, 聽{ "Centros", 00,.F. } ;
, 聽{ "Conceptos", 00,.F. } ;
, 聽{ "Consultas", 00,.F. } ;
}

aData2 聽 聽:= ;
{ 聽{ "Eliminar", 00,.T. } ;
, 聽{ "Enviar ", 00,.T. } ;
, 聽{ "Procesar ", 00,.T. } ;
, 聽{ "Anular ", 00,.T. } ;
}

TREE oTree
FOR r:=1 TO len(aData)
聽 聽 TREEITEM aData[r][1] CARGO { 聽aData[r][2] , aData[r][3] 聽}聽 聽 聽 
聽 聽 TREE
聽 聽 FOR t:=1 TO len(aData2)
聽 聽 聽 聽 TREEITEM aData2[t][1] CARGO { aData2[t][2] , aData2[t][3] 聽}
聽 聽 NEXT 聽
聽 聽 ENDTREE
NEXT聽 聽 
ENDTREE

Return oTree
Saludos
LEANDRO AREVALO
Bogot谩 (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Cambiar Tree Completo Sobre xBrowse (solucionado)
Posted: Thu Mar 10, 2022 09:25 AM
Lo 煤nico es que deje bOnPostEdit, por que necesito ejecutar una acci贸n sobre la base de datos, diferente a cambiar el setcheck.

Instead we recommend using
Code (fw): Select all Collapse
oCol:bOnChange := { |oCol,uOldVal| <OtherChanges>( oCol,uOldVal ) }

To the extent possible, please avoid coding bOnPostEdit. It is deprecated.
Regards



G. N. Rao.

Hyderabad, India
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
Re: Cambiar Tree Completo Sobre xBrowse (solucionado)
Posted: Sat Jan 20, 2024 02:59 PM
Estimado,
El campo que tengo en mysql es del tipo
"N" de 1.

este campo lo quiero mostrar en el browser con la capacidad del checkbox, pero al momento no logro hacerlo.
la unica forma que, al menos me mostr贸 la tilde, fue esta:
Code (fw): Select all Collapse
 聽WITH OBJECT :acols[ 7 ]
聽 聽 聽 聽 聽:bEditValue 聽 聽:= { | x | IIf( ::oQry:FieldGet( "c13" ) > 0, .T., .F. ) }
聽 聽 聽 聽 聽:SetCheck(, .T. )
聽 聽 聽 ENDWITH
pero sola me la muestra con o sin tilde, lo. que necesito es que cambie el estado de la tilde, por lo que necesito ir y actualizar la tabla, pero cuando quiero usar la tabla pero no se con que metodo. podes ayudarme?
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Cambiar Tree Completo Sobre xBrowse (solucionado)
Posted: Sat Jan 20, 2024 06:05 PM
Code (fw): Select all Collapse
WITH OBJECT :acols[ 7 ]
聽 聽:bEditValue := { | x | If( x == nil, ::oQry:FieldGet( "c13" ) > 0, ::oQry:FieldPut( "c13", If( x, 1, 0 ) ) }
聽 聽:SetCheck(, .T. )
ENDWITH
OR
Code (fw): Select all Collapse
WITH OBJECT :acols[ 7 ]
聽 聽:bEditValue := { | x | If( x == nil, ::oQry:c13 != 0, ::oQry:c13 := If( x, 1, 0 ) ) }
聽 聽:SetCheck(, .T. )
ENDWITH

If field "c13" type is TinyInt,
Set
Code (fw): Select all Collapse
MYSQL_TINYINTASLOGICAL( .T. )
and then
Code (fw): Select all Collapse
WITH OBJECT :acols[ 7 ]
聽 聽:bEditValue := { | x | If( x == nil, ::oQry:c13, ::oQry:c13 := x ) }
聽 聽:SetCheck(, .T. )
ENDWITH
Regards



G. N. Rao.

Hyderabad, India
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
Re: Cambiar Tree Completo Sobre xBrowse (solucionado)
Posted: Sun Jan 21, 2024 06:27 AM
Rao,
Buen dia, la unica manera de que funcione en mi caso es hacerlo asi
Code (fw): Select all Collapse
 聽 聽 聽WITH OBJECT :c13
聽 聽 聽 聽 聽:setcheck(, .T. )
聽 聽 聽 聽 聽:bLDClickData := { || ::actualizarTag() 聽}
聽 聽 聽 ENDWITH
PERO ni este ni ningun browser. me esta actualizando los datos, tengo que salir del dialogo y volver a entrar. y ya probe con :oqry:requery
las consultas las hago por procedimientos almacenados

Code (fw): Select all Collapse
METHOD actualizarTag( x ) 聽CLASS TCliente

聽 聽DO CASE
聽 聽CASE 聽::oBrw:nColSel = 7

聽 聽 聽 ::oCnx:update( "tbinfissi", ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "inf_p", !::oQry:FieldGet( "c13" ) } ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽}, NIL, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ { "id", ::oQry:FieldGet( "id" ) } } ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽)


聽 聽END CASE
聽 聽::oqry:refresh() 聽 聽 聽 <-------------- no funciona
聽 聽::obrw:refresh()
聽 聽RETURN ( NIL )
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Posts: 7317
Joined: Thu Oct 18, 2012 07:17 PM
Re: Cambiar Tree Completo Sobre xBrowse (solucionado)
Posted: Mon Jan 22, 2024 09:08 AM
Dear Rao,
a question
if I have an xbrowse with customer.dbf (with a combobox to select the indexes and a get to search for customers - see the example diagram below)
Code (fw): Select all Collapse
USE CUSTOMER....

聽DEFINE DIALOG oDlg 


@ 10, 165 GET oGet VAR cSeek SIZE 200,19 PIXEL OF oDlg PICTURE "@!"


聽 聽@ 103,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg

聽WITH OBJECT oBrw
聽 聽 聽 聽 聽 :oSeek := oGet
聽 聽 聽 聽 聽 聽 :CreateFromCode()
聽 聽 聽 聽 聽END

聽 @ 10, 550 COMBOBOX oBrw:oSortCbx VAR oBrw:cSortOrder

How can I switch to a tree view in the same xbrowse and viceversa?

And when I'm in the tree view how can I use a combobox to select the tree indexes and use the customer search get?
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)

I use : FiveWin for Harbour March-April 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com

Continue the discussion