Buscar dentro de um achoice

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
juniorcamilo
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 10 Nov 2006 09:12
Localização: Pará

Buscar dentro de um achoice

Mensagem 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?
Avatar do usuário
juniorcamilo
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 10 Nov 2006 09:12
Localização: Pará

Buscar dentro de um achoice

Mensagem 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!!
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Buscar dentro de um achoice

Mensagem por rubens »

Bom dia...

Juniorcamilo, dá para colocar uma imagem disso funcionando ?

Obrigado

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
juniorcamilo
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 10 Nov 2006 09:12
Localização: Pará

Buscar dentro de um achoice

Mensagem 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
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Buscar dentro de um achoice

Mensagem por JoséQuintas »

Lembrando que ao invés de Achoice, melhor um TBrowse.
Deve ter exemplos aqui no fórum pra isso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder