Erro no Achoice

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

tonicm
Usuário Nível 2
Usuário Nível 2
Mensagens: 55
Registrado em: 08 Mar 2016 21:51
Localização: Porto

Erro no Achoice

Mensagem por tonicm »

Ao apagar a última linha de um array dá-me o seguinte erro:
Error BASE/1132 Bound error: array access

Já baixei o achoice.prg e fiz debug, e na parte do SWITCH nUserFunc o programa entra sempre na opção AC_REDRAW, seja qual for o valor de nUserFunc.
https://github.com/harbour/core/blob/ma ... choice.prg

Tenho a versão hb34 e já testei no windows XP e no 10.
Anexo um pequeno exemplo.
Alguém consegue testar?

Código: Selecionar todos

/*-------------------------------------*/
PROCEDURE MAIN()
   PUBLIC ARRCNT:=2
   PUBLIC SHOW:={"FIRST","SECOND"}
   
   CLEAR
   SET COLOR TO "W+"
   DO WHILE LastKey()<>13 .AND. LastKey()<>27
      AChoice(0,0,24,79,SHOW,,"choiven",ARRCNT)
   ENDDO
   QUIT
RETURN


/*-------------------------------------*/
FUNCTION choiven(choimod,choipos,choilin)
   PRIVATE OLDROW, OLDCOL, RETORN
   RETORN=2
   IF choimod=3
      OLDROW=Row()
      OLDCOL=Col()
      IF LastKey()=27
         RETORN=0
      ENDIF
      IF LastKey()=7
         IF Len(SHOW)=1
            @ 24, 0 SAY "Only one line. Cannot delete."
            Inkey(1)
            @ 24, 0 SAY Space(80) COLOR "N/N"
         ELSE
            IF CHOIPOS=1
               CLEAR
            ENDIF
            ADel(SHOW,CHOIPOS)
            ASize(SHOW,Len(SHOW)-1)
            CHOIPOS--
            ARRCNT--
         ENDIF
         SETLASTKEY(0)
         RETORN=0
         //RETORN=2  //não refresca o ecrã
      ENDIF
      SetPRC(OLDROW,OLDCOL)
   ENDIF
RETURN RETORN
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Erro no Achoice

Mensagem por asimoes »

Olá

tenta usar:

Código: Selecionar todos

IF Len(show) > 0
   hb_ADel( show, choicepos, .T. )
ELSE
   keyboard chr(27)
   RETURN 0
ENDIF
comenta ASize(SHOW,Len(SHOW)-1)
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20420
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

Erro no Achoice

Mensagem por JoséQuintas »

Tente alterar a variável de posicionamento pra variável -1
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
tonicm
Usuário Nível 2
Usuário Nível 2
Mensagens: 55
Registrado em: 08 Mar 2016 21:51
Localização: Porto

Erro no Achoice

Mensagem por tonicm »

Obrigado pelas sugestões, mas não resolveram o erro.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20420
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

Erro no Achoice

Mensagem por JoséQuintas »

Então é obrigar a sair do achoice e remontar com o array modificado.
Tudo indica que o achoice continua trabalhando com o tamanho de array original.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

Erro no Achoice

Mensagem por Daniel »

Tente assim

Código: Selecionar todos

/*-------------------------------------*/
#Include 'Achoice.ch'   //<------------Incluir
PROCEDURE MAIN()
   PUBLIC ARRCNT:= 3
   PUBLIC SHOW:= {"FIRST","SECOND","TRE"}

   CLEAR
   SET COLOR TO "W+"
   DO WHILE LastKey()<>13 .AND. LastKey()<>27
      AChoice(0,0,24,79,SHOW,,"choiven",ARRCNT)
   ENDDO
   QUIT
RETURN

/*-------------------------------------*/
FUNCTION choiven(choimod,choipos,choilin)
   PRIVATE OLDROW, OLDCOL, RETORN,  acItems
   RETORN=2
   IF choimod=3
      OLDROW=Row()
      OLDCOL=Col()
      IF LastKey()=27
         RETORN=0
      ENDIF
      IF LastKey()=7
         IF Len(SHOW)=1
            @ 24, 0 SAY "Only one line. Cannot delete."
            Inkey(1)
            @ 24, 0 SAY Space(80) COLOR "N/N"
         ELSE
            //IF CHOIPOS = 1  <-------------Tirar
               CLEAR
            //ENDIF    <-------------Tirar
            ADel(SHOW,CHOIPOS)
            ASize(SHOW,Len(SHOW)-1)
            CHOIPOS--
            ARRCNT--
            RETURN AC_GOTO   // <--------------Incluir
         ENDIF
         SETLASTKEY(0)
         //RETORN=2  //não refresca o ecrã
      ENDIF
      SetPRC(OLDROW,OLDCOL)
   ENDIF
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Responder