Página 1 de 1

dbedit e deslocar-se nos campos

Enviado: 22 Fev 2012 12:32
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
       
     

dbedit e deslocar-se nos campos

Enviado: 22 Fev 2012 19:40
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.

dbedit e deslocar-se nos campos

Enviado: 22 Fev 2012 21:35
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

dbedit e deslocar-se nos campos

Enviado: 29 Fev 2012 05:09
por lapinhazzz
Bom dia a todos do forum.
Aguardo noticias vossas para responder ha minha duvida
Cumprimentos a todos
Lapinhazzz

dbedit e deslocar-se nos campos

Enviado: 29 Fev 2012 09:11
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.

dbedit e deslocar-se nos campos

Enviado: 02 Mar 2012 06:42
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

dbedit e deslocar-se nos campos

Enviado: 12 Mar 2012 13:03
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

dbedit e deslocar-se nos campos

Enviado: 21 Mar 2012 05:28
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