dbedit e deslocar-se nos campos

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

lapinhazzz
Usuário Nível 3
Usuário Nível 3
Mensagens: 130
Registrado em: 20 Abr 2009 10:52
Localização: LAGOA

dbedit e deslocar-se nos campos

Mensagem por lapinhazzz »

Bom dia a todos os que estão neste forum.
A todos quero agradecer muitas coisas que aqui aprendi.
Vai mais uma dúvida
Tenho um dbedit que altero o fieldname(bbb) mas tenho um problema.
Quando carrego no enter e depois altero o campo e depois confirmo com enter o ponteiro volta para inicio.
Como faço para ficar onde estou e depois se carregar em seta para a direita ir para o campo a direita e não para o inicio do campo que esta no browse.
Agradecia a vossa ajuda.
Obrigado
Lapinhzzz




Código: Selecionar todos

/*
 ÚÄ Program ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
 ³    Aplica‡„o:                                                            ³
 ³    Descri‡„o:                                                            ³
 ³         Nome: MV.PRG                                                     ³
 ³        Autor: Carlos Lapa                                                ³
 ³       Vers„o:                                                            ³
 ³ Data cria‡„o: 03-07-10              Actualizado em   : þ16-10-10         ³
 ³ Hora cria‡„o: 23:15:54              Hora actualiza‡„o: þ22:43:24         ³
 ³   Fich. Make:                                                            ³
 ³  Fich. Exec.:                       Doc.s por: Carlos Lapa               ³
 ³          Copyright: (c)  by Carlos Lapa, Inc.                            ³
 ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
*/
function mv_pess()
   public pesq,rot
   rot="PESS"
   priv l

   sele pess
   set orde to "proc"
   cor(2)
   go top
   do whil .t.
      priv l, v1a[13],v2a[1],v3a[13],v4a
      sele pess
      set orde to "proc"
      rot="PESS"
      pesq=""
      if indexord()=1
         tit("Processo (por PROCESSO)")
         v1a[1]="proc"
         v1a[2]="utente"
         v1a[3]="tipo"
         v1a[4]="grupo"
         v1a[5]="turma"
         v1a[6]="ano"
         v1a[7]="nsase"
         v1a[8]="cescalao"
         v1a[9]="codigocur"
         v1a[10]="plafp"
         v1a[11]="plafc"
         v1a[12]="gastop"
         v1a[13]="gastoc"
         v3a[1]= "Proc"
         v3a[2]= "Utente"
         v3a[3]= "Tipo"
         v3a[4]= "Grupo"
         v3a[5]= "Turma"
         v3a[6]= "Ano"
         v3a[7]= "NSase"
         v3a[8]= "Cescalao"
         v3a[9]= "Codigocur"
         v3a[10]="Plafp"
         v3a[11]="Plafc"
         v3a[12]="GastoP"
         v3a[13]="GastoC"
         pfs("[ENTER]Altera,F2ReordenaLista")

      elseif indexord()=2
         tit("Processo (por UTENTE)")
         v3a[1]= "Proc"
         v3a[2]= "Utente"
         v3a[3]= "Tipo"
         v3a[4]= "Grupo"
         v3a[5]= "Turma"
         v3a[6]= "Ano"
         v3a[7]= "NSase"
         v3a[8]= "Cescalao"
         v3a[9]= "Codigocur"
         v3a[10]="Plafp"
         v3a[11]="Plafc"
         v3a[12]="GastoP"
         v3a[13]="GastoC"
         pfs("[ENTER]Altera,F2ReordenaLista")
      endi
      v2a[1]="@"
      v4a=""
      cor(2)
      keyb chr(26)
      *dbedit(04,00,22,80,v1a,"fc",.t.,.t.,.t.)
      dbedit(04,00,22,80,v1a,"fc",v2a,v3a,v4a)
      l=lastkey()
      do case
         case l=27
            exit
         case l=-9
            loop
            EXIT
      endc
   endd
   rele v1a,v2a,v3a,v4a
   rot="MAIN"

 
FUNCTION FC(modo)
   public rapaga,flag,bbb,aa
   priv l,m,f,x,cp,y,z,ix,ordem
   cp=fcount()
   l=0
   for x=1 to cp
      f=fieldname(x)
      if !empty(&f)
         * l=1
         * exit
      endi
   next
   f=1
   *f=l
   l=lastkey()
   x=1
   bb="0001000000000000000000000013" && se o campo for diferente de zero edita
   bbb=substr(bb,2*aa+1,2)
   do case
      case (l=4 .OR. l=19) .AND. rot="PESS"
         IF l=4
            IF aa<13
               aa++
            endi
         elseif l=19
            IF aa>1
               aa--
            endi
         ENDIF
         @ 1,1 say bbb
         @ 2,1 say aa

         x=1
      case modo=2 .AND. rot="PESS"
         append blank

      case l=27
         x=0
      case l=13 .and. f=1
                  IF ifrot("rot,PESS") .AND. val(bbb)<>0
            campo=fieldname(&bbb)
            *if val(bbb)<>0
            @ row(),col() get &campo picture "@!"
            read
            *ENDI
            aa=1
            x=1
         else
            aa=1
            x=2
         endif
       
     
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

dbedit e deslocar-se nos campos

Mensagem por alxsts »

Olá!

Uma curiosidade:

quando declaras a variável aa (public) ela recebe, por default, o valor .F.

depois fazes

Código: Selecionar todos

bbb=substr(bb,2*aa+1,2)
Que valor pensas que será atribuído à variável bbb?

Se me permites, faço algumas sugestões:
- procura utilizar nomes de variáveis que, ao serem lidos, passem a idéia do conteúdo das mesmas. Procura utilizar a Notação Húngara adaptada para Clipper.
- procura utilizar variáveis dos tipos LOCAL ou STATIC.
- procura estruturar melhor o teu código e evita escrever código redundante, como abaixo:

Código: Selecionar todos

function mv_pess()
   public pesq,rot
   ===> rot="PESS"
   ===>    priv l

   ===>    sele pess
   ===>    set orde to "proc"
   cor(2)
   go top
   do whil .t.
   ===>       priv l, v1a[13],v2a[1],v3a[13],v4a
   ===>       sele pess
   ===>       set orde to "proc"
   ===>       rot="PESS"
      pesq=""
Com estas pequenas ações, o principal beneficiado será você mesmo, ao manter o teu código no futuro, e os que precisarem fazê-lo, algum dia, em teu lugar.
[]´s
Alexandre Santos (AlxSts)
lapinhazzz
Usuário Nível 3
Usuário Nível 3
Mensagens: 130
Registrado em: 20 Abr 2009 10:52
Localização: LAGOA

dbedit e deslocar-se nos campos

Mensagem por lapinhazzz »

Boa Noite alxsts e a todos do forum

A variavel no programa main = a=1.Ha medida que me desloco para a direita incrementa 1. se para a esquerda decrementa -1.

"000000...13"
quer dizer que o treze é o valor do campo 13 com fieldname(bb) no qual é editado. os zeros querem dizer que não pode editar o campo no dbedit.
quando eu faço enter faço a edicao do campo de acordo se for zeros (não edita), se contem o numero do campo edita e quando eu edito carrego no enter. faço a alteraçao e carrego novamente em enter. Mas depois ele posicioname no campo 1.

Por exempo "0000030005000000...13"
aqui posso navegar nos campos mas so edito o campo 03, 05 e 13 pelo fieldname(bbb)
O problema que tenho e que quando edito um campo e quiser carregar na seta para a direita o dbedit posicioname no 1º campo. Não é isso que quero mas sim o campo seguinte.

Obrigado e aguardo noticias
Lapinhazzz
lapinhazzz
Usuário Nível 3
Usuário Nível 3
Mensagens: 130
Registrado em: 20 Abr 2009 10:52
Localização: LAGOA

dbedit e deslocar-se nos campos

Mensagem por lapinhazzz »

Bom dia a todos do forum.
Aguardo noticias vossas para responder ha minha duvida
Cumprimentos a todos
Lapinhazzz
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á

dbedit e deslocar-se nos campos

Mensagem por Pablo César »

Veja o que eu acho:

O seu Do case está muito confuso, você deveria apenas tratar os valores das teclas pressionadas nesse do case da função FC e não misturar outras condições que podem atender simultaneamente com outras.

Essa questão de poder editar ou não como você mencionou o exemplo exempo "0000030005000000...13", você deveria fazer de uma outra forma mais entendível. Não entendo por quê você se complicou tanto para formar uma lógica de edição. Bastaria ter um vetor onde conforme a posição de numero de coluna, deva editar ou não. Exemplo: aEdit:={.t.,.f.,.t.,.t.,.f.} neste vetor indica que a coluna 2 e 5 não serão editadas => simples.
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.
lapinhazzz
Usuário Nível 3
Usuário Nível 3
Mensagens: 130
Registrado em: 20 Abr 2009 10:52
Localização: LAGOA

dbedit e deslocar-se nos campos

Mensagem por lapinhazzz »

Bom dia a todos do forum.
Amigo Pablo César
Vou seguir o seu conselho.
O meu problema é que depois de editado e alterado o campo de uma coluna o dbedit posiciona-me no primeiro campo do registo em questão
Gostaria de alterar por exemplo o campo 06 e depois de alterado carregar na tecla para a direita para ir para o campo sete. Só que depois de alterado o campo e confirmar o dbedit posiciona-me no campo 01 o primeiro campo do registo.
Obrigado
Aguardo noticias
Lapinhazzz
lapinhazzz
Usuário Nível 3
Usuário Nível 3
Mensagens: 130
Registrado em: 20 Abr 2009 10:52
Localização: LAGOA

dbedit e deslocar-se nos campos

Mensagem por lapinhazzz »

Boa tarde a todos do forum.
Aguardo notícias vossas para este problema que me aconteceu e que por várias tentativas que faça não consigo resolver.
Bem haja a todos
Obrigado
Lapinhazzz.

xHarbour 1.2.0 e bcc55
lapinhazzz
Usuário Nível 3
Usuário Nível 3
Mensagens: 130
Registrado em: 20 Abr 2009 10:52
Localização: LAGOA

dbedit e deslocar-se nos campos

Mensagem por lapinhazzz »

Bom dia a todos do forum.
A solução para o problema quero partilhar com vocês.
antes do dbedit fazer keyboard chr(4)+chr(4)
Seta para a direita 2 vezes e posiciona-se no segundo campo.
se quiserem que se desloque tres vezes e so fazer keyboard chr(4)+chr(4)+chr(4)
Obrigado a todos
lapinhazzz
Responder