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.....
:))