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: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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