Classe tTreeView tem Bug ???

Discussão sobre a biblioteca Fivewin - O Clipper para Windows.

Moderador: Moderadores

Avatar do usuário
ctoas
Usuário Nível 2
Usuário Nível 2
Mensagens: 52
Registrado em: 09 Mai 2005 16:22
Localização: São Paulo
Contato:

Classe tTreeView tem Bug ???

Mensagem 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.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Classe tTreeView tem Bug ???

Mensagem 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...
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
ctoas
Usuário Nível 2
Usuário Nível 2
Mensagens: 52
Registrado em: 09 Mai 2005 16:22
Localização: São Paulo
Contato:

Classe tTreeView tem Bug ???

Mensagem 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
Euclides
Usuário Nível 3
Usuário Nível 3
Mensagens: 154
Registrado em: 12 Mai 2007 14:07
Localização: São Paulo, Capital

Classe tTreeView tem Bug ???

Mensagem 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
Avatar do usuário
ctoas
Usuário Nível 2
Usuário Nível 2
Mensagens: 52
Registrado em: 09 Mai 2005 16:22
Localização: São Paulo
Contato:

Classe tTreeView tem Bug ???

Mensagem por ctoas »

Valeu Euclides...
Responder