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)

