Clipper On Line • Ver Tópico - Buscar dentro de um achoice

Buscar dentro de um achoice

Discussão sobre a linguagem CA-Clipper.

Moderador: Moderadores

 

Buscar dentro de um achoice

Mensagempor juniorcamilo » 17 Out 2018 16:14

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 de usuário

juniorcamilo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 343
Data de registro: 10 Nov 2006 08:12
Cidade/Estado: Pará
Curtiu: 29 vezes
Mens.Curtidas: 2 vezes

Buscar dentro de um achoice

Mensagempor juniorcamilo » 18 Out 2018 08:03

Bom dia!!
Amigos pesquisando e pegando uma função aki outra ali do nosso FORUM, fiz assim:
********************************************************************
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 de usuário

juniorcamilo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 343
Data de registro: 10 Nov 2006 08:12
Cidade/Estado: Pará
Curtiu: 29 vezes
Mens.Curtidas: 2 vezes

Buscar dentro de um achoice

Mensagempor rubens » 18 Out 2018 08:36

Bom dia...

Juniorcamilo, dá para colocar uma imagem disso funcionando ?

Obrigado

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

Buscar dentro de um achoice

Mensagempor juniorcamilo » 18 Out 2018 14:55

rubens escreveu:Bom dia...

Juniorcamilo, dá para colocar uma imagem disso funcionando ?

Obrigado

Rubens


vê se fica mais fácil o entendimento:

*---------------------------------------------------------------------------------------------------------
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 de usuário

juniorcamilo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 343
Data de registro: 10 Nov 2006 08:12
Cidade/Estado: Pará
Curtiu: 29 vezes
Mens.Curtidas: 2 vezes

Buscar dentro de um achoice

Mensagempor JoséQuintas » 18 Out 2018 15:51

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, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para CA-Clipper

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 7 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro