Bom Dia, Amigos Clipeiros....
Programao em clipper a um certo tempo , mas ultimamente ao executar um achoice obtive o seguinte
problema....
Tenho um achoice abaixo que mostra um popup com o codigo , nome e e-mail de clientes.... Até ai
tudo normal....
Do while lastkey()<>27
Registro=achoice(5,7,23,79,clientes,lastkey()<>27,1,ULTPOS)
if lastkey()=7 //delete
comandos....
endif
Enddo
Tenho o seguinte problema no código acima, quando o lastkey()=7
ele não sai do achoice e parece que nenhuma tecla foi pressionada....
se eu substituir com lastkey()=13 (Enter) , o clipper executa normalmente,,,...
O problema é que preciso que este evento seja executado quando o delete é pressionado....
Teve mais um detalhe que descobri.. qu eo lastkey funciona somente para estados de espera com
wait, read, get, inkey.....
Alguem poderia me ajudar a resolver o problema acima...
Obrigado programadores...
:'(
Como interromper o achoice quando delete for pressionado
Moderador: Moderadores
-
rangelssilva
- Usuário Nível 1

- Mensagens: 48
- Registrado em: 27 Jul 2007 15:24
- Localização: São Paulo - SP
A função LastKey() retorna o código da última tecla processada pela função InKey().Teve mais um detalhe que descobri.. qu eo lastkey funciona somente para estados de espera com
Nunca usei AChoice na vida toda.
Portanto, vou dar um "chute". O teste abaixo não daria certo?
Código: Selecionar todos
while LastKey() != 27 .and.;
LastKey() != 7
Registro := AChoice(5,7,23,79 ,;
clientes ,;
LastKey() != 27 .and. LastKey() != 7,;
1 ,;
ULTPOS)
if LastKey() = 7 //delete
comandos....
end
end[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- O achoice permite a vc colocar uma função de usuário.
Do NG:
ACHOICE(<nTop>, <nLeft>, <nBottom>, <nRight>,
<acMenuItems>,
[<alSelectableItems> | <lSelectableItems>],
[<cUserFunction>],
[<nInitialItem>],
[<nWindowRow>]) --> nPosition
#include "achoice.ch"
#include "inkey.ch"
PROCEDURE Main()
LOCAL acMenuItems, cUserFunction, nRetVal, nKey, nPos
acMenuItems := {"Add", "Edit", "Delete", "Update"}
CLS
nPos := ACHOICE( 10, 10, 13, 15, acMenuItems, .T., "cUserFunction" )
DO CASE
CASE nPos == 1
// Put ADD routine here
CASE nPos == 2
// Put EDIT routine here
CASE nPos == 3
// Put DELETE routine here
CASE nPos ==4
// Put UPDATE routine here
END
RETURN
FUNCTION cUserFunction( nMode, nCurElement, nRowPos )
LOCAL nRetVal := AC_CONT // Default, Continue
LOCAL nKey := LASTKEY()
DO CASE
// After all pending keys are processed, display message
CASE nMode == AC_IDLE
DO CASE
CASE nCurElement == 1
@ 22, 5 SAY " Adding "
CASE nCurElement == 2
@ 22, 5 SAY " Editing "
CASE nCurElement == 3
@ 22, 5 SAY " Deleting "
CASE nCurElement == 4
@ 22, 5 SAY " Updating "
END
nRetVal := AC_CONT // Continue ACHOICE()
CASE nMode == AC_HITTOP // Attempt to go past Top
TONE( 100, 3 )
CASE nMode == AC_HITBOTTOM // Attempt to go past
// Bottom
TONE( 100, 3 )
CASE nMode == AC_EXCEPT // Key Exception
DO CASE
CASE nKey == K_RETURN // If RETURN key, select
nRetVal := AC_SELECT
CASE nKey == K_ESC // If ESCAPE key, abort
nRetVal := AC_ABORT
OTHERWISE
nRetVal := AC_GOTO // Otherwise, go to item
END
END
RETURN(nRetVal)
Do NG:
ACHOICE(<nTop>, <nLeft>, <nBottom>, <nRight>,
<acMenuItems>,
[<alSelectableItems> | <lSelectableItems>],
[<cUserFunction>],
[<nInitialItem>],
[<nWindowRow>]) --> nPosition
#include "achoice.ch"
#include "inkey.ch"
PROCEDURE Main()
LOCAL acMenuItems, cUserFunction, nRetVal, nKey, nPos
acMenuItems := {"Add", "Edit", "Delete", "Update"}
CLS
nPos := ACHOICE( 10, 10, 13, 15, acMenuItems, .T., "cUserFunction" )
DO CASE
CASE nPos == 1
// Put ADD routine here
CASE nPos == 2
// Put EDIT routine here
CASE nPos == 3
// Put DELETE routine here
CASE nPos ==4
// Put UPDATE routine here
END
RETURN
FUNCTION cUserFunction( nMode, nCurElement, nRowPos )
LOCAL nRetVal := AC_CONT // Default, Continue
LOCAL nKey := LASTKEY()
DO CASE
// After all pending keys are processed, display message
CASE nMode == AC_IDLE
DO CASE
CASE nCurElement == 1
@ 22, 5 SAY " Adding "
CASE nCurElement == 2
@ 22, 5 SAY " Editing "
CASE nCurElement == 3
@ 22, 5 SAY " Deleting "
CASE nCurElement == 4
@ 22, 5 SAY " Updating "
END
nRetVal := AC_CONT // Continue ACHOICE()
CASE nMode == AC_HITTOP // Attempt to go past Top
TONE( 100, 3 )
CASE nMode == AC_HITBOTTOM // Attempt to go past
// Bottom
TONE( 100, 3 )
CASE nMode == AC_EXCEPT // Key Exception
DO CASE
CASE nKey == K_RETURN // If RETURN key, select
nRetVal := AC_SELECT
CASE nKey == K_ESC // If ESCAPE key, abort
nRetVal := AC_ABORT
OTHERWISE
nRetVal := AC_GOTO // Otherwise, go to item
END
END
RETURN(nRetVal)
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
{POG - Programação Orientada a Gambiarra}
Ola pessoal,
a sintexe desse achoice parece nao estar certa, veja
FUNCTION contro1_udf
PARAMETERS modo, num_sel, posicao
do case
case lastkey()=13.or.lastkey()=7
return 1
case lastkey()=27
return 0
otherwise
return 2
endcase
seu codigo ficaria assim:
do while lastkey()<>27
registro=ACHOICE(5,7,23,79,clientes,"","contro1_udf",ULTPOS,"")
if lastkey()=7
//--codigo p exclusao
endif
enddo
talvez vc tenha q criar uma funcao para realizar o que deseja.Do while lastkey()<>27
Registro=achoice(5,7,23,79,clientes,lastkey()<>27,1,ULTPOS)
if lastkey()=7 //delete
comandos....
endif
a sintexe desse achoice parece nao estar certa, veja
FUNCTION contro1_udf
PARAMETERS modo, num_sel, posicao
do case
case lastkey()=13.or.lastkey()=7
return 1
case lastkey()=27
return 0
otherwise
return 2
endcase
seu codigo ficaria assim:
do while lastkey()<>27
registro=ACHOICE(5,7,23,79,clientes,"","contro1_udf",ULTPOS,"")
if lastkey()=7
//--codigo p exclusao
endif
enddo
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
-
rangelssilva
- Usuário Nível 1

- Mensagens: 48
- Registrado em: 27 Jul 2007 15:24
- Localização: São Paulo - SP
Obrigado pela dica.....
Tentei executar dessa forma mas não funcionou, mas ao executar da maneira que o Andril colocou , funcionou perfeitamente....
Obrigado por ajudar....
)
Obrigado por ajudar....
-
rangelssilva
- Usuário Nível 1

- Mensagens: 48
- Registrado em: 27 Jul 2007 15:24
- Localização: São Paulo - SP
Obrigado pela dica...
Tentei executar dessa forma mas não funcionou, mas ao seguir as dicas do Andrill funcionou....
Vou continuar a programar usando achoice....
)
Vou continuar a programar usando achoice....
-
rangelssilva
- Usuário Nível 1

- Mensagens: 48
- Registrado em: 27 Jul 2007 15:24
- Localização: São Paulo - SP


