Página 1 de 1

Erro no Drag and Drop da Htree

Enviado: 30 Set 2010 15:05
por Luciano Bonfim
Caros,

criei uma estrutura de árvore e quando tento mover (arrastando e soltando) um NODE que tenha filhos acontece o erro abaixo, e em outros ocasiões ele desmenbra os filhos e coloca todos no mesmo nível.

ERRO:

GOPP - Gerenciamento Orientado para Projetos - Versão: 20100907a
Error BASE/1132 Erro de limite: acesso de array
Called from htree.prg->DRAGDROPTREE(624)
Called from htree.prg->DRAGDROPTREE(630)
Called from htree.prg->HTREE:ONEVENT(437)
Called from ->HWG_DLGBOXINDIRECT(0)
Called from hdialog.prg->HDIALOG:ACTIVATE(182)
Called from teste.prg->TESTE(34)
Called from generica.prg->EXECUTAHWGUI(293)
Called from toolbar.prg->NMENUCHECKER(76)
Called from toolbar.prg->NAFTERINKEY(51)
Called from principal.prg->(b)GERAMENU(572)
Called from ->INKEY(0)
Called from principal.prg->MAIN(163)

HwGUI 2.17 xHarbour build 1.0.0 Intl. (SimpLex)
Date:29/09/2010
Time:23:01:46


PROGRAMA PARA SIMULAR O ERRO:

Código: Selecionar todos

#include "c:\hwgui\include\windows.ch"
#include "c:\hwgui\include\guilib.ch"
#include "bonfim.ch"
 
#define TVS_HASBUTTONS          1   // 0x0001
#define TVS_HASLINES            2   // 0x0002
#define TVS_LINESATROOT         4   // 0x0004
#define TVS_EDITLABELS          8   // 0x0008
#define TVS_DISABLEDRAGDROP    16   // 0x0010
#define TVS_SHOWSELALWAYS      32   // 0x0020
#define TVS_RTLREADING         64   // 0x0040
#define TVS_NOTOOLTIPS        128   // 0x0080
#define TVS_CHECKBOXES        256   // 0x0100
#define TVS_TRACKSELECT       512   // 0x0200
#define TVS_SINGLEEXPAND     1024   // 0x0400
#define TVS_INFOTIP          2048   // 0x0800
#define TVS_FULLROWSELECT    4096   // 0x1000
#define TVS_NOSCROLL         8192   // 0x2000
#define TVS_NONEVENHEIGHT   16384   // 0x4000
#define TVS_NOHSCROLL       32768   // 0x8000  // TVS_NOSCROLL overrides this
 
procedure teste
private oTree
SetToolTipBalloon(.t.)
//INIT DIALOG oFrmHelpArray TITLE menu[linhaDoMenu,4]+t(" - Consulta a WBS") CLIPPER FONT retornaFonte("browse") AT 0,0 SIZE GETDESKTOPWIDTH(),GETDESKTOPHEIGHT() ICON retornaIcone() STYLE WS_DLGFRAME + WS_SYSMENU + DS_CENTER;
INIT DIALOG oFrmHelpArray TITLE "teste" CLIPPER FONT HFont():Add( 'Arial',0,-12,400,850) AT 0,0 SIZE GETDESKTOPWIDTH(),GETDESKTOPHEIGHT() ICON retornaIcone() STYLE WS_DLGFRAME + WS_SYSMENU + DS_CENTER;
ON INIT {||constroiWBS()}
 
@ 0,0 TREE oTree OF oFrmHelpArray SIZE GETDESKTOPWIDTH()-100,GETDESKTOPHEIGHT()-100 EDITABLE  DRAGDROP ;
ON SIZE {|o,x,y|o:Move(,,,y-20)}          ;
ON INIT {|| oTree:ItemHeight := 30 }      ;
ON DRAG {|| .t. } STYLE TVS_NONEVENHEIGHT + TVS_TRACKSELECT
ADD STATUS oStatusHelpArray TO oFrmHelpArray
oFrmHelpArray:Activate()
return(nil)
 
 
 
function constroiWBS
wbs:={}
aadd(wbs,{"1"        ,"01","Gerenciamento"})
aadd(wbs,{"1.1"      ,"01","Área Geral"})
aadd(wbs,{"1.1.1"    ,"02","Mão de Obra Indireta"})
aadd(wbs,{"1.1.1.1"  ,"11","Serviços de Terceiros"})
aadd(wbs,{"1.1.1.1.1","101","Consultores e Especialistas"})
aadd(wbs,{"1.1.1.2"  ,"12","Equipe Própria"})
aadd(wbs,{"1.1.1.2.1","131","Equipe de Coordenação"})
aadd(wbs,{"1.1.1.2.2","132","Equipe Administrativa"})
aadd(wbs,{"1.1.1.2.3","133","Equipe de Planejamento"})
aadd(wbs,{"1.1.1.2.4","134","Equipe de Custo"})
aadd(wbs,{"1.1.1.2.5","135","Equipe de Documentação"})
aadd(wbs,{"1.1.1.2.6","136","Equipe de Qualidade"})
aadd(wbs,{"1.1.1.2.7","137","Equipe de SMSRS"})
aadd(wbs,{"1.1.1.2.8","139","Equipe de Suprimento"})
 
aadd(wbs,{"2"        ,"02","Engenharia"})
aadd(wbs,{"2.1"      ,"01","Área Geral"})
aadd(wbs,{"2.1.1"    ,"02","Mão de Obra Indireta"})
aadd(wbs,{"2.1.1.1"  ,"11","Serviços de Terceiros"})
aadd(wbs,{"2.1.1.1.1","101","Consultores e Especialistas"})
aadd(wbs,{"2.1.1.2"  ,"12","Equipe Própria"})
aadd(wbs,{"2.1.1.2.1","133","Equipe de Planejamento"})
aadd(wbs,{"2.1.1.2.2","135","Equipe de Documentação"})
aadd(wbs,{"2.1.1.2.3","138","Equipe de Engenharia"})
 
for x=1 to len(wbs)
   if qualNivel(wbs[x,1])=1 // primeiro nivel
      tracelog(wbs[x,1])
      nivel1="n"+wbs[x,1]
      INSERT NODE &nivel1 CAPTION wbs[x,2]+' - '+wbs[x,3] TO oTree
      for y=x+1 to len(wbs)
         if wbs[x,1]=substr(wbs[y,1],1,1) // mudar depois
            do case
               case qualNivel(wbs[y,1])=2 // segundo nivel
                  nivel2="n"+wbs[y,1]
                  INSERT NODE &nivel2 CAPTION wbs[y,2]+' - '+wbs[y,3] TO &nivel1
               case qualNivel(wbs[y,1])=3 // terceiro nivel
                  nivel3="n"+wbs[y,1]
                  INSERT NODE &nivel3 CAPTION wbs[y,2]+' - '+wbs[y,3] TO &nivel2
               case qualNivel(wbs[y,1])=4 // quarto nivel
                  nivel4="n"+wbs[y,1]
                  INSERT NODE &nivel4 CAPTION wbs[y,2]+' - '+wbs[y,3] TO &nivel3
               case qualNivel(wbs[y,1])=5 // quinto nivel
                  nivel5="n"+wbs[y,1]
                  INSERT NODE &nivel5 CAPTION wbs[y,2]+' - '+wbs[y,3] TO &nivel4
            endcase
         else
            exit
         endif
      next
      x=y-1
   endif
next
return
 

function qualNivel(codigoItem)
local tamanho:=len(alltrim(codigoItem))
local nivelCodigoItem
// mudar logica depois dos testes
do case
case tamanho=1
   nivelCodigoItem:=1
case tamanho=3
   nivelCodigoItem:=2
case tamanho=5
   nivelCodigoItem:=3
case tamanho=7
   nivelCodigoItem:=4
case tamanho=9
   nivelCodigoItem:=5
endcase
return(nivelCodigoItem)

Re: Erro no Drag and Drop da Htree

Enviado: 01 Out 2010 00:17
por esbasso
foi corrigido
amanha ou final de semana posto no CVS

Re: Erro no Drag and Drop da Htree

Enviado: 04 Out 2010 22:36
por Luciano Bonfim
baixei da CVS hoje e não tinha ainda... vc já colocou ?

Re: Erro no Drag and Drop da Htree

Enviado: 13 Out 2010 13:06
por esbasso
ja foi atualizado

Re: Erro no Drag and Drop da Htree

Enviado: 19 Out 2010 00:26
por Luciano Bonfim
Obrigado, está funcionando perfeitamente....

em tempo...

como fazer para varrem esse objeto e pegar as novas informações de onde os NODES estão depois que eu movi eles, por exemplo um NODE que estava na posição 1.1.1.1 pode estar agora na posicao 2.1.2.1...

como pegar essa informação?

Muito Obrigado