Página 1 de 1

Classe tTreeView tem Bug ???

Enviado: 01 Abr 2015 08:00
por ctoas
Bom dia amigos.

Estou querendo usar a classe tTreeView, no exemplo abaixo funciona os SETCHECK mediante execução após clique em um botão.

Código: Selecionar todos

********************************************************************************
FUNCTION TESTE()
********************************************************************************

   LOCAL oTREE, oITEM:= array(50), oSUBITEM:= array(50)

   DEFINE DIALOG oDlg RESOURCE "CAD"

   oTree := TTreeView():Redefine( 4001, oDlg )

   REDEFINE BUTTONBMP oBtn ID 4002 OF oDlg ACTION ATUALIZATREE(oTREE,oITEM,oSUBITEM)

   ACTIVATE DIALOG oDlg CENTERED ON INIT MONTATREE(oTREE,oITEM,oSUBITEM)

RETURN NIL

********************************************************************************
FUNCTION MONTATREE(oTREE,oITEM,oSUBITEM)
********************************************************************************

   oITEM[01]:= oTREE:ADD( "ITEM1" )
      oSUBITEM[01]:=oITEM[01]:ADD( "ITEM1A" )
      oSUBITEM[02]:=oITEM[01]:ADD( "ITEM1B" )
      oSUBITEM[03]:=oITEM[01]:ADD( "ITEM1C" )
      oSUBITEM[04]:=oITEM[01]:ADD( "ITEM1D" )

   oITEM[02]:= oTREE:ADD( "ITEM2" )
      oSUBITEM[05]:=oITEM[02]:ADD( "ITEM2A" )
      oSUBITEM[06]:=oITEM[02]:ADD( "ITEM2B" )
      oSUBITEM[07]:=oITEM[02]:ADD( "ITEM2C" )
      oSUBITEM[08]:=oITEM[02]:ADD( "ITEM2D" )

   oTREE:EXPAND()

RETURN NIL

********************************************************************************
FUNCTION ATUALIZATREE(oTREE,oITEM,oSUBITEM)
********************************************************************************

   oITEM[01]:SETCHECK(.T.)
      oSUBITEM[01]:SETCHECK(.T.)
      oSUBITEM[02]:SETCHECK(.T.)
      oSUBITEM[03]:SETCHECK(.T.)
      oSUBITEM[04]:SETCHECK(.T.)

   oITEM[02]:SETCHECK(.T.)
      oSUBITEM[05]:SETCHECK(.T.)
      oSUBITEM[06]:SETCHECK(.T.)
      oSUBITEM[07]:SETCHECK(.T.)
      oSUBITEM[08]:SETCHECK(.T.)

   oTree:REFRESH()

RETURN NIL
Mas se eu retirar o botão e automatizar pelo ON INIT como no exemplo abaixo não acontece nada.

Código: Selecionar todos

********************************************************************************
FUNCTION TESTE()
********************************************************************************

   LOCAL oTREE, oITEM:= array(50), oSUBITEM:= array(50)

   DEFINE DIALOG oDlg RESOURCE "CAD"

   oTree := TTreeView():Redefine( 4001, oDlg )

   ACTIVATE DIALOG oDlg CENTERED ON INIT(MONTATREE(oTREE,oITEM,oSUBITEM),ATUALIZATREE(oTREE,oITEM,oSUBITEM))

RETURN NIL
Alguém saberia o porque ?

Agradeço antecipadamente aos que puderem ajudar.

Classe tTreeView tem Bug ???

Enviado: 06 Abr 2015 02:50
por rochinha
Amiguinhos,

O evento ON INIT quando executado, ainda não tem os objetos formados.

Após os objetos formados voce consegue execução de comandos. Use outro evento ON, tipo ON RESIZE, etc...

Classe tTreeView tem Bug ???

Enviado: 07 Abr 2015 09:49
por ctoas
Bom dia.

Rochinha, obrigado por ter respondido, você não me apresentou a solução, mas me deu a luz.

Resolvido com um pequeno POG.

Código: Selecionar todos

********************************************************************************
FUNCTION TESTE()
********************************************************************************

   LOCAL oTREE, oITEM:= array(50), oSUBITEM:= array(50)

   DEFINE DIALOG oDlg RESOURCE "CAD"

   oTree := TTreeView():Redefine( 4001, oDlg )
   
   oDlg:bStart := {||ATUALIZATREE(oTREE,oITEM,oSUBITEM)}
   
   ACTIVATE DIALOG oDlg CENTERED ON INIT MONTATREE(oTREE,oITEM,oSUBITEM)

RETURN NIL

********************************************************************************
FUNCTION MONTATREE(oTREE,oITEM,oSUBITEM)
********************************************************************************

   oITEM[01]:= oTREE:ADD( "ITEM1" )
      oSUBITEM[01]:=oITEM[01]:ADD( "ITEM1A" )
      oSUBITEM[02]:=oITEM[01]:ADD( "ITEM1B" )
      oSUBITEM[03]:=oITEM[01]:ADD( "ITEM1C" )
      oSUBITEM[04]:=oITEM[01]:ADD( "ITEM1D" )

   oITEM[02]:= oTREE:ADD( "ITEM2" )
      oSUBITEM[05]:=oITEM[02]:ADD( "ITEM2A" )
      oSUBITEM[06]:=oITEM[02]:ADD( "ITEM2B" )
      oSUBITEM[07]:=oITEM[02]:ADD( "ITEM2C" )
      oSUBITEM[08]:=oITEM[02]:ADD( "ITEM2D" )

   oTREE:EXPAND()   

RETURN NIL

********************************************************************************
FUNCTION ATUALIZATREE(oTREE,oITEM,oSUBITEM)
********************************************************************************

	MSGWAIT(,,0.001) <--- POG

   oITEM[01]:SETCHECK(.T.)
      oSUBITEM[01]:SETCHECK(.T.)
      oSUBITEM[02]:SETCHECK(.F.)
      oSUBITEM[03]:SETCHECK(.T.)
      oSUBITEM[04]:SETCHECK(.F.)

   oITEM[02]:SETCHECK(.T.)
      oSUBITEM[05]:SETCHECK(.F.)
      oSUBITEM[06]:SETCHECK(.F.)
      oSUBITEM[07]:SETCHECK(.F.)
      oSUBITEM[08]:SETCHECK(.T.)

   oTree:REFRESH()

RETURN NIL

Classe tTreeView tem Bug ???

Enviado: 07 Abr 2015 16:34
por Euclides
Cotas, não recisa POG, nem codeblock...
Faz somente :

Código: Selecionar todos

ACTIVATE DIALOG ... ON INIt ...  ON PAINT ATUALIZATREE(oTREE,oITEM,oSUBITEM)
Isso poderá causar alguns problemas, se você atualizou o Tree de algum local extermo (DBF) e resolver move a tela. Aí a tela voltará ao estado original. Mas isso pode ser resolvodo com om "switch".

Código: Selecionar todos

lswitch :=.T.
...
... ON PAINT iif(lswitch, (ATUALIZATREE(oTREE,oITEM,oSUBITEM), lSwitch:=.F.),)
Não sei se é mais eficiente, mas, pelo menos não é POG
T+
Euclides

Classe tTreeView tem Bug ???

Enviado: 08 Abr 2015 10:04
por ctoas
Valeu Euclides...