Página 1 de 1

Buscar dentro de um achoice

Enviado: 17 Out 2018 16:14
por juniorcamilo
amigos tem como procurar dentro de um achoice ?
ex:
aMatFun := {"01 Joao","02 Maria","10 Marcos","12 Mario"}
nCont := achoice(12,21,17,47,aMatFun,.t.)
cVen := aMatFun[nCont]

quando eu digitar 01 ou Joao ele posicionar no achoice?

Buscar dentro de um achoice

Enviado: 18 Out 2018 08:03
por juniorcamilo
Bom dia!!
Amigos pesquisando e pegando uma função aki outra ali do nosso FORUM, fiz assim:

Código: Selecionar todos

********************************************************************
Function PRODVENDEDOR(cProduto,cDescricao, nVal, nQte)
Local getlist:={}, cVen := "  ", tTel := savenv(09,17,22,52), bProdven := .f., bVen := .f.
Private nEle := 1, aMatFun := {}
if Select('VEN') == 0
   AbreVEN()
   bVen := .t.
endif
if Select('PRODVEN') == 0
   AbreProVen()
   bProdven := .t.
endif
if Select('VEN') # 0 .and. Select('PRODVEN') # 0
   PRODVEN->(Dbsetorder(01))
   if PRODVEN->(Dbseek(cProduto,.t.)) .and. PRODVEN->CODPRO == cProduto
      aadd(aMatFun, "Escolha o Responsavel..")
		VEN->(Dbsetorder(01))
      do while PRODVEN->(!eof()) .and. PRODVEN->CODPRO == cProduto
         if VEN->(Dbseek(PRODVEN->CODVEN))
            aadd(aMatFun, PRODVEN->CODVEN+" "+UPPER(substr(VEN->NOMVEN,1,20)))
         endif
         PRODVEN->(Dbskip())
      enddo
  endif
  if len(aMatFun) > 2
	  limpatecla()
	  Tela(10,18,20,49,substr(cDescricao,1,10)+iif(nQte < 1,trans(nQte,"99999.9999"),trans(nQte,"99999"))+" x "+trans(nVal,"@E 999999.99"),x_cortteld,x_cortelad)
     windows(11,19,18,48)
     do while .t.
     	  cVen := achoice(12,21,17,47,aMatFun,.t.,"ProcPV",nEle,nEle)
     	  if Lastkey() == 27
	        cVen := "XX"
	        exit
	     elseif cVen <= 1
	        loop
	  	  elseif cVen > 0
     	     cVen := substr(aMatFun[cVen],1,2)
     	     exit
        endif
     enddo
   elseif len(aMatFun) == 2
     cVen := substr(aMatFun[2],1,2)
   endif
endif
if bProdven == .t.; Fechaarq("PRODVEN"); endif
if bven == .t.; Fechaarq("VEN"); endif
rstenv(tTel)
return cVen
*-------------------------
Function ProcPV(modo,ele,row)
Local nCont, nResp, cColor := Setcolor()
Static cConteudo := ""
cColor := "R"+substr(cColor,2)
*nRow := row //Atualizando a posicao do item com relacao as coordenadas do achoice
Do Case
   Case modo == 0 //Tecla de movimentacao

   Case modo == 1 //Se for precionado seta para cima no 1§ item
        Keyboard Chr(30) //Forca a Tecla Ctrl PgDn e o item atual sera o ultimo
   Case modo == 2 //Se for precionado seta para baixo no ultimo item
        Keyboard Chr(31) //Forca a Tecla Ctrl PgUp e o item atual sera o primeiro
   Case modo == 3 //Teclas de excessao
        Do Case
           Case Lastkey() == 027 //Esc
                Return (0)
           Case Lastkey() == 013 //Enter
                Return (1)
           Case Lastkey() == 007 //Del
                Return (1)
           Case Lastkey() == 022 //Ins
                Return (1)
           Case Lastkey() == 403 //Ctrl Del
                Return (1)
           Case Lastkey() == 416 //Alt Down
                Return (1)
           Case Lastkey() == 408 //Alt Up
                Return (1)
           Case Lastkey() == 021 //Ctrl U
                Return (1)
           Case Lastkey() == 008 //Back space
					 nResp := 0
                if Len(cConteudo) > 0
                	 cConteudo := substr(cConteudo,1,len(cConteudo)-1)
                	 nEle := ascan(aMatFun,cConteudo)
                	 if nEle <= 0 && procurar po concatenacao
                	    for nCont = 1 to len(aMatFun)
								  nResp := at(cConteudo,aMatFun[nCont])
								  if nResp > 0; nEle := nCont; exit; endif
                	    next
                	 endif
                endif
                if nEle <= 0; nEle := 1; endif
                @ 19,19 Say "Func./Ven.: "+Padr(aMatFun[nEle],15)
            	 @ 19,30+nResp Say cConteudo color cColor
                return (0)
	        Case Upper(Chr(Lastkey())) $ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" .or. Upper(Chr(Lastkey())) $ "1234567890"
	             nResp := 0
	        	    cConteudo += Upper(Chr(Lastkey()))
              	 nEle := ascan(aMatFun,cConteudo)
	        	    if nEle <= 0  && procurar po concatenacao
         	    	 for nCont = 1 to len(aMatFun)
							  nResp := at(cConteudo,aMatFun[nCont])
						     if nResp > 0;  nEle := nCont;exit; endif
      	    		 next
            	 endif
	        	    if nEle <= 0; nEle := 1; endif
	        	    @ 19,19 Say "Func./Ven.: "+Padr(aMatFun[nEle],15)
	        	    @ 19,30+nResp Say cConteudo color cColor
                return (0)
        Endcase
Endcase
Return (2)
return nT
Obs: caso algum amigo tenha sugestão em minimizar o código!! eu agradeço!!

Buscar dentro de um achoice

Enviado: 18 Out 2018 08:36
por rubens
Bom dia...

Juniorcamilo, dá para colocar uma imagem disso funcionando ?

Obrigado

Rubens

Buscar dentro de um achoice

Enviado: 18 Out 2018 14:55
por juniorcamilo
rubens escreveu:Bom dia...

Juniorcamilo, dá para colocar uma imagem disso funcionando ?

Obrigado

Rubens
vê se fica mais fácil o entendimento:

Código: Selecionar todos

*---------------------------------------------------------------------------------------------------------
Function PRODVENDEDOR()
Local getlist:={}, cVen := "  ", tTel := savenv(09,17,22,52)
Private nEle := 1, aMatFun := {}
     aMatFun := {"Escolha o Responsavel..","01 - MARCOS","02 - JOAO","03 - MARIO"}
     11,20 to 20,48
     do while .t.
          cVen := achoice(12,21,17,47,aMatFun,.t.,"ProcPV",nEle,nEle)
          if Lastkey() == 27
           cVen := "XX"
           exit
        elseif cVen <= 1
           loop
          elseif cVen > 0
             cVen := substr(aMatFun[cVen],1,2)
             exit
        endif
     enddo
   elseif len(aMatFun) == 2
     cVen := substr(aMatFun[2],1,2)
   endif
endif
rstenv(tTel)
return cVen
*-----------------------------------------------------------------------------------------------------------
Function ProcPV(modo,ele,row)
Local nCont, nResp, cColor := Setcolor()
Static cConteudo := ""
cColor := "R"+substr(cColor,2)
Do Case
   Case modo == 0 //Tecla de movimentacao

   Case modo == 1 //Se for precionado seta para cima no 1§ item
        Keyboard Chr(30) //Forca a Tecla Ctrl PgDn e o item atual sera o ultimo
   Case modo == 2 //Se for precionado seta para baixo no ultimo item
        Keyboard Chr(31) //Forca a Tecla Ctrl PgUp e o item atual sera o primeiro
   Case modo == 3 //Teclas de excessao
        Do Case
           Case Lastkey() == 027 //Esc
                Return (0)
           Case Lastkey() == 013 //Enter
                Return (1)
           Case Lastkey() == 007 //Del
                Return (1)
           Case Lastkey() == 022 //Ins
                Return (1)
           Case Lastkey() == 403 //Ctrl Del
                Return (1)
           Case Lastkey() == 416 //Alt Down
                Return (1)
           Case Lastkey() == 408 //Alt Up
                Return (1)
           Case Lastkey() == 021 //Ctrl U
                Return (1)
           Case Lastkey() == 008 //Back space
                nResp := 0
                if Len(cConteudo) > 0
                    cConteudo := substr(cConteudo,1,len(cConteudo)-1)
                    nEle := ascan(aMatFun,cConteudo)
                    if nEle <= 0 && procurar po concatenacao
                       for nCont = 1 to len(aMatFun)
                          nResp := at(cConteudo,aMatFun[nCont])
                          if nResp > 0; nEle := nCont; exit; endif
                       next
                    endif
                endif
                if nEle <= 0; nEle := 1; endif
                @ 19,19 Say "Func./Ven.: "+Padr(aMatFun[nEle],15)
                @ 19,30+nResp Say cConteudo color cColor
                return (0)
           Case Upper(Chr(Lastkey())) $ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" .or. Upper(Chr(Lastkey())) $ "1234567890"
                nResp := 0
                  cConteudo += Upper(Chr(Lastkey()))
                  nEle := ascan(aMatFun,cConteudo)
                  if nEle <= 0  && procurar po concatenacao
                    for nCont = 1 to len(aMatFun)
                       nResp := at(cConteudo,aMatFun[nCont])
                       if nResp > 0;  nEle := nCont;exit; endif
                    next
                endif
                  if nEle <= 0; nEle := 1; endif
                  @ 19,19 Say "Func./Ven.: "+Padr(aMatFun[nEle],15)
                  @ 19,30+nResp Say cConteudo color cColor
                return (0)
        Endcase
Endcase
Return (2)
return nT

Buscar dentro de um achoice

Enviado: 18 Out 2018 15:51
por JoséQuintas
Lembrando que ao invés de Achoice, melhor um TBrowse.
Deve ter exemplos aqui no fórum pra isso.