Página 1 de 1
Como interromper o achoice quando delete for pressionado
Enviado: 24 Set 2007 10:33
por rangelssilva
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...
:'(
Enviado: 24 Set 2007 11:17
por Maligno
Teve mais um detalhe que descobri.. qu eo lastkey funciona somente para estados de espera com
A função LastKey() retorna o código da última tecla
processada pela função InKey().
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
Enviado: 24 Set 2007 11:42
por gvc
- 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)
Enviado: 24 Set 2007 18:23
por ANDRIL
Ola pessoal,
Do while lastkey()<>27
Registro=achoice(5,7,23,79,clientes,lastkey()<>27,1,ULTPOS)
if lastkey()=7 //delete
comandos....
endif
talvez vc tenha q criar uma funcao para realizar o que deseja.
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
Obrigado pela dica.....
Enviado: 25 Set 2007 08:39
por rangelssilva
Tentei executar dessa forma mas não funcionou, mas ao executar da maneira que o Andril colocou , funcionou perfeitamente....
Obrigado por ajudar....

)
Obrigado pela dica...
Enviado: 25 Set 2007 08:40
por rangelssilva
Tentei executar dessa forma mas não funcionou, mas ao seguir as dicas do Andrill funcionou....
Vou continuar a programar usando achoice....

)
Enviado: 25 Set 2007 08:44
por rangelssilva
Obrigado pela ajuda amigos clipeiros.....
Utilizei as linha de raciocínio postada pelo Andril e funcionou perfeitamente....
Agora está 10.....

)