Navegação de gets usando gets comuns e com listbox

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

ACHOICE vs GETSYS => listbox

Mensagem por Pablo César »

Pois é Ademir, na minha opinião você vai perder mais tempo tentado consertar situações quanto a navegação dos GETs do que fazendo um GETSYS.PRG específico. Gostariamos saber como você resolveu o caso e poste o exemplo. Se precisar de ajuda, estamos aqui.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Ademir
Usuário Nível 3
Usuário Nível 3
Mensagens: 170
Registrado em: 31 Jul 2007 16:28
Localização: Porto Ferreira-SP

Re: Navegação de gets usando gets comuns e com listbox

Mensagem por Ademir »

Bom dia Pablo !

Apenas criei uma função chamada Help() que abre um achoice com as opções dependendo do campo editado. Ela é acionada atraves do F1. Achei melhor o F1 porque descobrí recentemente que se vc criar uma função com o nome Help(), não é necessário usar o Set Key 28 to funçao() (pelo menos na 5.3). O achoice é aberto abaixo do get, como se fosse um listbox(). É isso... []s
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Re: Navegação de gets usando gets comuns e com listbox

Mensagem por Pablo César »

Ahhh então você abandonou a idéia de sair do seu LISTBOX quando usuário vai até o primeiro intem do listbox e continua pressionando seta para cima e daí sai do LISTBOX e passa para o GET anterior ? Ou você conseguiu reproduzir justamente isso ?. Porque seria interessante ver como foi feito. Eu com achoice tive muitas dificuldades (por não dizer muitas gambiarras, para que desse certo), mas no GETSYS ficou melhor que os ACHOICEs que eu tinha feito. Se puder postar exemplo, caso tenha obtido sucesso, digo.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Ademir
Usuário Nível 3
Usuário Nível 3
Mensagens: 170
Registrado em: 31 Jul 2007 16:28
Localização: Porto Ferreira-SP

Re: Navegação de gets usando gets comuns e com listbox

Mensagem por Ademir »

É Pablo... fazer a saida do listbox para o get anterior com as setas achei meio complicado, pra não dizer inviavel. Imagine um listbox com 50 itens. O usuário posiciona o cursor no penultimo, e aí vê que o campo anterior está errado. Imagina eu falar pro cara que ele tem que mover a seta até o primeiro para voltar ao campo anterior ? Se bem que pra isso, eu tambem teria que quebrar a cabeça para descobrir como fazer com que o listbox reconheça que o usuario está no primeiro item, apesar de achar que isso é possível pelo que estudei do listbox até agora. Tambem tem o "problema" de quando a lista está aberta, se o usuário teclar ESC, a edição de todos os gets é simplesmente abortada. Nesse caso, tambem teria que desabilitar a tecla ESC quando a lista estiver aberta. Resumindo: como disse, apenas criei um achoice normal e agora posso navegar tranquilamente entre os gets.

Obs.: preferí não alterar meu getsys visto que a solução com o achoice resolveu o problema plenamente.

[]s.

Ademir
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Navegação de gets usando gets comuns e com listbox

Mensagem por Pablo César »

fazer a saida do listbox para o get anterior com as setas achei meio complicado, pra não dizer inviavel. Imagine um listbox com 50 itens.
Pois é, visto por esse ângulo... realmente fica esquisito e desnecessário. Eu mencionei meu exemplo porque a quantidade de elemento a escolher eram fixa, por exemplo: SIM e NÃO.

Mas acho que valeu todos os comentários, pois ajudaram a compor um conceito sobre saída dos LISTBOX.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Navegação de gets usando gets comuns e com listbox

Mensagem por rochinha »

Amiguinho

tente usar esta solução:

Código: Selecionar todos

...
LinSAY := 10
ColSAY := 10
             @  LinSAY, ColSAY SAY "Cidade..:" GET M->CIDADE PICTURE "@!@K"              WHEN SAYIT( 'Digite o CIDADE.' );
                                   VALID IIF(!EMPTY(M->CIDADE),.T.,EDIT_PESQ(LinSAY, ; // Linha do box
                                   ColSAY,                          ; // Coluna do box
                                   M->CIDADE,                   ; // dado passado para pesquisa
                                   "CIDADE",                    ; // base de dados pesquisada
                                   1,                           ; // ordem do indice
                                   "CIDADE",                    ; // campo com conteudo retornado
                                   "CIDADE+'|'+ESTADO+'|'+DDD", ; // cabecalho do box
                                   "M->CIDADE",                 ; // variavel de retorno
                                   {|| .T. }))
...
Funcao EDIT_PESQ()

Código: Selecionar todos

#include "NF.CH"
#include "NFMOU.CH"
#include "NFERROR.CH"

FUNCTION EDIT_PESQ( M_LIN, M_COL, M_RELACAO, M_AREA, M_ORDEM, M_CAMPO, M_STRING, M_SAIDA, M_FUNCAO, M_LISTA, M_ELISTA )
IF M_LISTA = NIL; M_LISTA := .T.; ENDIF
SET KEY 22 TO
PUBLIC M_CAMPO2, M_EDLISTA, RET_CAMPO, M_RELAC2, M_LIN2, M_COL2, TA_MA_NHO
M_LIN2   := M_LIN
M_COL2   := M_COL
M_RELAC2 := ALLTRIM(M_RELACAO)
M_CAMPO2 := M_CAMPO
M_EDLISTA := IIF(M_ELISTA=NIL,.F.,M_ELISTA)
//M_LIN := BLA1
//M_COL := BLA2
//M_LIN := GETFLDROW()
//M_COL := GETFLDCOL()
IF M_LISTA = .F. // Se limitar a uma lista analisa conteudo dos campos
   IF VALTYPE( M_RELACAO ) = 'C'
      IF VAL(M_RELACAO) <> 0 .OR. EMPTY(M_RELACAO)
         M_LISTA := .T. // Se o campo caracter nao estiver VAZIO, lista
      ENDIF
   ENDIF
   IF VALTYPE( M_RELACAO ) = 'N'
      IF M_RELACAO <> 0
         M_LISTA := .T. // Se o campo numerico nao estiver com ZERO, lista
      ENDIF
   ENDIF
ENDIF
IF M_LISTA = .T. // Se limita somente a lista teste o tipo
   DECLARE M_CAMPOS[1]
   M_CAMPOS[1] := M_STRING
   U_AREATUA := ALLTRIM( STR( SELECT(), 3 ) ) // pega area atual
   U_ORDEM   := INDEXORD()                    // pega ordem atual
   SELE &M_AREA                               // seleciona area de pesquisa
   SET ORDER TO M_ORDEM                       // coloca nova ordem
   M_REC := RECCO()
   IF M_REC = 0
      BEEP(); MENSAGEM('Esta tabela esta VAZIA!!!',5)
      RETURN .F.
   ENDIF
   IF (M_LIN+1+8) > MAXROW()
      M_LIN  := M_LIN-11
   ENDIF
   IF (M_COL+LEN(&M_STRING)+1) > MAXCOL()
      M_COL  := MAXCOL()-(LEN(&M_STRING)+2)
   ENDIF
   SET SOFTSEEK ON
   SEEK M_RELACAO                             // pesquisa dado
   IF !FOUND()
      IF EMPTY(M_RELACAO)
         GO TOP
      ENDIF
      MOUSE( DESLIGA )
      SAVE SCREEN TO M->T_ELA
      MOUSE( LIGA )
      COR( "JANELA DE DIALOGO" )
      TA_MA_NHO := IIF(M_REC>7,7,M_REC)
      @ M_LIN+1,M_COL CLEAR TO M_LIN+2+2+TA_MA_NHO,M_COL+LEN(&M_STRING)+1
      @ M_LIN+1,M_COL       TO M_LIN+2+2+TA_MA_NHO,M_COL+LEN(&M_STRING)+1
      IF M_EDLISTA
         MENSAGEM("INSere DELeta ESCape")
      ENDIF
      @ M_LIN2+2+TA_MA_NHO, M_COL2+1 SAY REPL('-',LEN(&M_STRING))
      DBEDIT(M_LIN+2,M_COL+1,M_LIN+1+TA_MA_NHO,M_COL+LEN(&M_STRING),M_CAMPOS,"F_PESQ",'','','')
      MOUSE( DESLIGA )
      RESTORE SCREEN FROM M->T_ELA
      MOUSE( LIGA )
      COR( "GETS" )
   ENDIF
   RETORNO  := &M_CAMPO
   &M_SAIDA := RETORNO
   SET SOFTSEEK OFF
   EVAL( M_FUNCAO )
   SELE &U_AREATUA                            // seleciona antiga area
   SET ORDER TO U_ORDEM                       // seleciona antiga ordem
ENDIF
RETURN .T.

FUNCTION F_PESQ
PARAMETERS MODO, PONTEIRO
PRIVATE POS_CURSOR,REGISTRO
POS_CURSOR = ROW()
DO CASE
   CASE MODO < 4
        RETORNO = 1
   CASE LASTKEY() = 27 .OR. LASTKEY() = 13
        RETORNO  = 0
   CASE LASTKEY() = 21 .or. LASTKEY() =  7
        IF M_EDLISTA
           REGLOCK
           dbDELETE()
           COMMIT
        ENDIF
        RETORNO = 2
   CASE LASTKEY() = 22 .or. LASTKEY() = 14
        IF M_EDLISTA
           SAVE GET TO ED_LISTA
           M->RET_CAMPO := &M_CAMPO2
           @ POS_CURSOR,COL() GET M->RET_CAMPO PICT "@!"
           SET CURSOR ON
           READ
           SET CURSOR OFF
           RESTORE GET FROM ED_LISTA
           APPEND BLANK
           REPLACE &M_CAMPO2 WITH M->RET_CAMPO
           COMMIT
           IF LASTKEY() = 27
              RETORNO = 2
           ENDIF
        ENDIF
        RETORNO = 2
   OTHERWISE
        RETORNO = 1
ENDCASE
RETURN(RETORNO)

FUNCTION PSQ_TAB2( LIN, COL, HISTORY, RE_TORNO, QUE_DADO )
   PRIVATE TELA1,OPCAO
   SAVE SCREEN TO TELA1
   POSF := ASCAN(HISTORY,QUE_DADO)
   TAMF := IIF(LEN(HISTORY)>10,10,LEN(HISTORY))+1
   LINF := IIF( (LIN+TAMF)>MAXROW(), MAXROW()-TAMF, LIN+TAMF )
   COLF := IIF( (COL+20) > 79      , 80-20      , COL+20 )
   @ LIN, COL CLEAR TO LINF, COLF 
   @ LIN, COL TO LINF, COLF 
   M->OPCAO := ACHOICE( LIN+1, COL+1, LINF-1, COLF-1, HISTORY,,, POSF )
   REST SCREEN FROM TELA1
   IF OPCAO = 0
      RETURN( .F. )
   ENDIF
   &RE_TORNO := UPPER(HISTORY[ M->OPCAO ])
   RETURN( .T. )
Funcao SAYIT()

Código: Selecionar todos

Function SayIT( cMsg )
   @ 24,0 say cMsg
   RETURN( .T. )
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
labaroazul
Usuário Nível 2
Usuário Nível 2
Mensagens: 83
Registrado em: 26 Fev 2008 14:52
Localização: São Paulo - SP
Contato:

Re: Navegação de gets usando gets comuns e com listbox

Mensagem por labaroazul »

Ademir,

Sei que você quer reduzir código no .prg, mas abaixo coloquei uma soluçãp que eu uso e que até agora funcionou comigo. Pode ser, então, que lhe seja útil!

Código: Selecionar todos

SET KEY -7 TO EMPGOP
DO WHILE .T.
                cNUMERO = SPACE(4)
                cNOME = SPACE(50)    
                cATIVO = SPACE(3)
                cPONTUAL = SPACE(4)
                cMATRICULA = SPACE(4)
                cENTREVISTA = SPACE(10)
                cADMISSAO = SPACE(10)
                cTIPOADM = SPACE(40)
                cCBO = SPACE(7)
                cCARGO = SPACE(40)
                cDEPTO = SPACE(20)
                cCATEGORIA = SPACE(40)
                nSALARIO = 0
                cFORMAPAGTO = SPACE(20)
                cBANCO = SPACE(50)
                cAGENCIA = SPACE(50)
                cCONTA = SPACE(50)
                cSINDICATO = SPACE(40)
                nTAXASOCIO = 0
                cCESTA = SPACE(3)
                cMESCESTA = SPACE(7)
                nVALETRANSP = 0
                nNOFILHOS = 0
                nNODEPEND = 0
                nPENSAO = 0
                cPENSOBRE = SPACE(20)
                cPENBANCO = SPACE(50)
                cPENAGENCIA = SPACE(50)
                cPENCONTA = SPACE(50)
                cPENTITULAR = SPACE(50)
                cDEMISSAO = SPACE(10)
                cTIPODEM = SPACE(40)
                cNASCIMENTO = SPACE(10)
                cLOCAL = SPACE(30)
                cNACIONALID = SPACE(20)
                cRACA = SPACE(20)
                cPELE = SPACE(20)
                cOLHOS = SPACE(20)
                cCABELOS = SPACE(20)
                cBARBA = SPACE(3)
                cBIGODE = SPACE(3)
                cDEFICIENTE = SPACE(3)
                cTIPODEF = SPACE(10)
                cSEXO = SPACE(9)
                cNOMEPAI = SPACE(40)
                cNACIOPAI = SPACE(20)
                cNOMEMAE = SPACE(40)
                cNACIOMAE = SPACE(20)
                cESTCIVIL = SPACE(10)
                cCONJUGE = SPACE(50)
                cINSTRUCAO = SPACE(40)
                cRG = SPACE(20)
                cCPF = SPACE(20)
                cTITELEITOR = SPACE(20)
                cRESERVISTA = SPACE(20)
                cCTPSNO = SPACE(5)
                cCTPSSERIE = SPACE(3)
                cCTPSUF = SPACE(2)
                cPISPASEP = SPACE(20)
                cHABILITACA = SPACE(20)
                cENDERECO = SPACE(50)
                cBAIRRO = SPACE(40)  
                cCEP = SPACE(9)      
                cCIDADE = SPACE(40)  
                cUF = SPACE(2)       
                cTEL = SPACE(50)
                cCEL = SPACE(50)
                cFAX = SPACE(50)
                cEMAIL = SPACE(50)
                cDOM_ENTR1 = "00:00"
                cDOM_SAID1 = "00:00"
                cDOM_ENTR2 = "00:00"
                cDOM_SAID2 = "00:00"
                cSEG_ENTR1 = "00:00"
                cSEG_SAID1 = "00:00"
                cSEG_ENTR2 = "00:00"
                cSEG_SAID2 = "00:00"
                cTER_ENTR1 = "00:00"
                cTER_SAID1 = "00:00"
                cTER_ENTR2 = "00:00"
                cTER_SAID2 = "00:00"
                cQUA_ENTR1 = "00:00"
                cQUA_SAID1 = "00:00"
                cQUA_ENTR2 = "00:00"
                cQUA_SAID2 = "00:00"
                cQUI_ENTR1 = "00:00"
                cQUI_SAID1 = "00:00"
                cQUI_ENTR2 = "00:00"
                cQUI_SAID2 = "00:00"
                cSEX_ENTR1 = "00:00"
                cSEX_SAID1 = "00:00"
                cSEX_ENTR2 = "00:00"
                cSEX_SAID2 = "00:00"
                cSAB_ENTR1 = "00:00"
                cSAB_SAID1 = "00:00"
                cSAB_ENTR2 = "00:00"
                cSAB_SAID2 = "00:00"
                cDIADSR = SPACE(3)
                cVALORDSR = SPACE(5)
                cNOTA01 = SPACE(76)
                cNOTA02 = SPACE(76)
                cNOTA03 = SPACE(76)
                cNOTA04 = SPACE(76)
SETCOLOR("B/W")
CLEAR SCREEN
SET CURSOR ON
@ 02,01 SAY "NUMERO: "
@ 02,14 SAY "NOME: "
@ 03,01 SAY "ATIVO?" + CHR(31)
@ 03,12 SAY "MATRICULA: "
@ 03,28 SAY "PONTO ELETRONICO: "
@ 03,51 SAY "ENTREVISTA: "
@ 04,01 SAY "ADMISSAO: "
@ 04,22 SAY "TIPO:" + CHR(31)
@ 05,01 SAY "C.B.O.: "
@ 05,17 SAY "CARGO: "
@ 06,01 SAY "DEPTO: "
@ 06,29 SAY "CATEG:" + CHR(31)
@ 07,01 SAY "SALARIO: "
@ 07,21 SAY "FORMA DE PAGAMENTO:" + CHR(31)
@ 09,00 TO 13,79
@ 09,01 SAY "DADOS BANCARIOS PARA DEPOSITO EM CONTA"
@ 10,01 SAY "BANCO: "
@ 11,01 SAY "AGENCIA: "
@ 12,01 SAY "CONTA: "
@ 15,01 SAY "SINDICATO:" + CHR(31)
@ 15,53 SAY "TAXA SOCIO: "
@ 17,01 SAY "RECEBE CESTA BASICA?" + CHR(31)
@ 17,26 SAY "CESTA BASICA A RECEBER: "
@ 19,01 SAY "VALE TRANSPORTE (INFORMAR VALOR POR DIA, IDA + VOLTA): "
@ 21,01 SAY "DEMISSAO: "
@ 21,22 SAY "MOTIVO:" + CHR(31)

@ 02,09 GET cNUMERO PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 02,20 GET cNOME PICTURE "@!"  SEND COLORSPEC := "N/W,W+/N"
@ 03,08 GET cATIVO PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 03,23 GET cMATRICULA PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 03,46 GET cPONTUAL PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 03,63 GET cENTREVISTA PICTURE "99/99/9999" SEND COLORSPEC := "N/W,W+/N"
@ 04,11 GET cADMISSAO PICTURE "99/99/9999" SEND COLORSPEC := "N/W,W+/N"
@ 04,28 GET cTIPOADM PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 05,09 GET cCBO PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 05,24 GET cCARGO PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 06,08 GET cDEPTO PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 06,36 GET cCATEGORIA PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 07,10 GET nSALARIO PICTURE "@E 9999999.99" SEND COLORSPEC := "N/W,W+/N"
@ 07,41 GET cFORMAPAGTO PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 10,08 GET cBANCO PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 11,10 GET cAGENCIA PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 12,08 GET cCONTA PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 15,12 GET cSINDICATO PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 15,65 GET nTAXASOCIO PICTURE "@E 9999999.99" SEND COLORSPEC := "N/W,W+/N"
@ 17,22 GET cCESTA PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 17,50 GET cMESCESTA PICTURE "99/9999" SEND COLORSPEC := "N/W,W+/N"
@ 19,56 GET nVALETRANSP PICTURE "@E 9999999.99" SEND COLORSPEC := "N/W,W+/N"
@ 21,11 GET cDEMISSAO PICTURE "99/99/9999" SEND COLORSPEC := "N/W,W+/N"
@ 21,30 GET cTIPODEM PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
READ
IF LASTKEY() = 27
    EXIT
ENDIF
ENDDO
SET COLOR TO
CLEAR SCREEN
RETURN

FUNCTION EMPGOP
LOCAL aOPCAO := {}
LOCAL nOPCAO
LOCAL nATUAL
LOCAL cEMPGTEL := SAVESCREEN(00,00,24,79)
LOCAL cEMPGCOR := SETCOLOR()
IF READVAR() = LEFT("CATIVO",10)
    AADD(aOPCAO,"SIM")
    AADD(aOPCAO,"NAO")
    SETCOLOR("W+/B,W+/N")
    @ 03,08 CLEAR TO 06,12
    DBGSHADOW(03,08,06,12)
    @ 03,08 TO 06,12
    nOPCAO = ACHOICE(04,09,05,11,aOPCAO)
    IF nOPCAO <> 0
        cATIVO = aOPCAO[nOPCAO]
    ENDIF
ELSEIF READVAR() = LEFT("CTIPOADM",10)
    AADD(aOPCAO,"10-PRIMEIRO EMPREGO                     ")
    AADD(aOPCAO,"20-EMPREGO ANTERIOR / REEMPREGO         ")
    AADD(aOPCAO,"25-CONTRATO POR PRAZO DETERMINADO       ")
    AADD(aOPCAO,"35-REINTEGRACAO                         ")
    AADD(aOPCAO,"70-TRANSFERENCIA DE ENTRADA             ")
    SETCOLOR("W+/B,W+/N")
    @ 04,28 CLEAR TO 09,69
    DBGSHADOW(04,28,09,69)
    @ 04,28 TO 09,69
    nOPCAO = ACHOICE(05,29,08,68,aOPCAO)
    IF nOPCAO <> 0
        cTIPOADM = aOPCAO[nOPCAO]
    ENDIF
ELSEIF READVAR() = LEFT("CFORMAPAGTO",10)
    AADD(aOPCAO,"01-MENSAL           ")
    AADD(aOPCAO,"02-QUINZENAL        ")
    AADD(aOPCAO,"03-SEMANAL          ")
    AADD(aOPCAO,"04-DIARIO           ")
    AADD(aOPCAO,"05-POR HORA         ")
    AADD(aOPCAO,"06-POR TAREFA       ")
    AADD(aOPCAO,"07-POR PECA         ")
    AADD(aOPCAO,"08-POR AULA         ")
    SETCOLOR("W+/B,W+/N")
    @ 07,41 CLEAR TO 12,63
    DBGSHADOW(07,41,12,63)
    @ 07,41 TO 12,63
    nOPCAO = ACHOICE(08,42,11,62,aOPCAO)
    IF nOPCAO <> 0
        cFORMAPAGTO = aOPCAO[nOPCAO]
    ENDIF
ELSEIF READVAR() = LEFT("CCESTA",10)
    AADD(aOPCAO,"SIM")
    AADD(aOPCAO,"NAO")
    SETCOLOR("W+/B,W+/N")
    @ 17,22 CLEAR TO 20,26
    DBGSHADOW(17,22,20,26)
    @ 17,22 TO 20,26
    nOPCAO = ACHOICE(18,23,19,25,aOPCAO)
    IF nOPCAO <> 0
        cCESTA = aOPCAO[nOPCAO]
    ENDIF
ELSEIF READVAR() = LEFT("CTIPODEM",10)
    AADD(aOPCAO,"00-SEM DEFINICAO                        ")
    AADD(aOPCAO,"31-DISPENSA SEM JUSTA CAUSA             ")
    AADD(aOPCAO,"32-DISPENSA POR JUSTA CAUSA             ")
    AADD(aOPCAO,"40-PEDIDO DE DEMISSAO                   ")
    AADD(aOPCAO,"43-FIM DE CONTRATO POR PRAZO DETERMINADO")
    AADD(aOPCAO,"45-TERMINO DE CONTRATO                  ")
    AADD(aOPCAO,"50-APOSENTADORIA                        ")
    AADD(aOPCAO,"60-FALECIMENTO                          ")
    AADD(aOPCAO,"80-TRANSFERENCIA DE SAIDA               ")
    SETCOLOR("W+/B,W+/N")
    @ 15,30 CLEAR TO 21,72
    DBGSHADOW(15,30,21,72)
    @ 15,30 TO 21,72
    nOPCAO = ACHOICE(16,31,20,71,aOPCAO)
    IF nOPCAO <> 0
        cTIPODEM = aOPCAO[nOPCAO]
    ENDIF
ENDIF
SET COLOR TO cEMPGCOR
CLEAR SCREEN
RESTSCREEN(00,00,24,79,cEMPGTEL)
RETURN(.T.)
Windows XP Professional + Clipper 5.2e + Exospace + Dbase III Plus + SIX3 + NoDosImp + LXPic
"O trabalho afasta três males: o vício, a pobreza e o tédio." (Voltaire)
Site: http://www.labaroazul.xpg.com.br
Repositório: http://www.4shared.com/dir/31334106/e79 ... aring.html
Ademir
Usuário Nível 3
Usuário Nível 3
Mensagens: 170
Registrado em: 31 Jul 2007 16:28
Localização: Porto Ferreira-SP

Re: Navegação de gets usando gets comuns e com listbox

Mensagem por Ademir »

Boa tarde !

Agradeço a cooperação de todos, mas acabei desistindo de usar o ListBox, visto que com a achoice consegui um efeito muito legal e parecido com o listbox. O exemplo abaixo mostra uma lista de UFs. Se a variavel for inicializada com SP por exemplo, ao pressionar F1 a lista se posiciona no item SP automaticamente.

Código: Selecionar todos

 
proc help(nomprog,numlin,nomvar)
loca opcant,telant:=savescreen(0,0,24,79),corant:=setcolor()
if nomvar#'ESTA_010V' .and. nomvar#'ESTA_060V' 
    retu
endi
vexnom={'AC','AL','AM','AP','BA','CE','DF','ES','GO','MA','MG','MS','MT','PA','PB','PE','PI','PR','RJ','RN','RO','RR','RS','SC','SE','SP','TO'}
janela(row()+1,col()-1,23,col()+2,'w+/rb,w+/bg')
opcant=achoice(row(),col(),22,col()+1,vexnom,,,ascan(vexnom,&nomvar))
&nomvar=if(opcant=0,&nomvar,vexnom[opcant])
restscreen(0,0,24,79,telant)
setcolor(corant)
retu
Responder