Dbedit

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

Moderador: Moderadores

Avatar do usuário
odilon.informatica
Usuário Nível 1
Usuário Nível 1
Mensagens: 21
Registrado em: 23 Out 2007 14:37
Localização: Mairinque-SP

Dbedit

Mensagem por odilon.informatica »

Pessoal,

converti o meu sistema mas estou esbarrando no dbedit.
Ele até abre o dbedit mas fica duplicando os caracteres quando teclo quaquer letra para iniciar a pesquisa.
Estou dependendo só disso para terminar a implantação.
Ajudem-me por favor


go top
private campos[1], mascara[1], nomes[1]
campos[1] = 'str(codigo,3)+" "+descr+" "+subst(SE->descricao,1,10)+" "+tipo+" "+str(nivel,1)+" "+str (nivel2,1)+" "+acompanha+" "+str(qtde,5)+" "+strtran(str(valor,7,2),".",",",)'
mascara[1] = '@!X'
nomes[1] = 'COD DESCRICAO SETOR T NIV A QUANT VALOR'
n1 := 3
n2 := 1
n3 := 22
n4 := 78
xdig = ""
Message("¦ [F2] CODIGO ¦ [ENTER] CONSULTA ¦",corm1)
set color to w+/b
dbedit(n1,n2,n3,n4,campos,'ordem4',mascara,nomes,,,,)
set color to
close data
return

Function Ordem4
parameters modo
rr = row()
Save screen to lptela
set cursor off
RestScreen(Row(),n2,Row(),n4,Transform(SaveScreen(Row(),n2,Row(),n4),repl("X"+Chr(112),2*n4)))
Inkey(0)
set color to w+/r
keyBoard Chr(LastKey())
do case
case LastKey()>64 .and. LastKey()<91 .or. LastKey()>96 .and. LastKey()<123;

.or. LastKey()=32 .or. lastkey()=128 .or. lastkey()=199;

.or. lastkey()>44 .and. lastkey()<58
Clear TypeAhead
set order to 2
xdig = xdig + upper(chr(lastkey()))
seek xdig
@ 1,1 say xdig color "w+/r"
return(2)


case lastkey()=5 .or. lastkey()=24 .or. lastkey()=31 .or. lastkey() = 30
xdig:= ""
@ 1,1 say repl(" ",15) color "w"
return(2)


case lastkey() = 8
xdig := subst(xdig, 1, len(xdig) - 1)
@ 1,1 say repl("Ä",15) color "w"
@ 1,1 say xdig color "w+/b"

return(2)



case lastkey() = -1

Clear TypeAhead

set order to 1

set cursor on

xcof := 0

@ 5,6 get xcof pict '999' color "w+/r"

read

set cursor off

if xcof = 0

go top

else

set softseek on

seek str(xcof,4)

set softseek off

if eof()

message("º CODIGO NAO ENCONTRADO! º",corm2,1.5)

restore screen from lptela

return(2)

endif

endif

restore screen from lptela

return(2)



case lastkey() = 13
clear typeahead
set color to
xrot := "C"
Proinclu()
set color to w+/b
restore screen from lptela
return(2)


case lastkey() = 27
Clear TypeAhead
return(0)

other

return(1)

endcase


return
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Duplicando caracter ? como assim ? explica melhor pra nos poder lhe auxiliar...ou tente usar o TBROWSE no lugar do DBEDIT().

Obs: Se poder colocar seu codigo dentro de [ CODE ] já ajuda tmb. para uma leitura melhor do fonte
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

Mensagem por Luciano Bonfim »

Amigo faz assim:

Código: Selecionar todos


dbedit(mlin_sup,mcol_sup,mlin_inf,mcol_inf, campo_db, "DBACTION", mask_db, tit_db)

function DBACTION
parameters mode,indx
public key_dbaction, key_stroke
key_stroke = lastkey()
retval=0
do case
   case mode == 0
      if key_stroke == K_HOME
         go top
         if bof()
            skip
         endif
      elseif key_stroke == K_END
         go bottom
         if eof()
            skip -1
         endif
      endif
      retval = 1
   case mode == 1
      retval = 1
   case mode == 2
      retval = 1
   case mode == 3
      Rot_Mens([Arquivo Vazio], .F., .T.)
      set cursor off
      retval = 0
   case mode == 4
      if key_stroke == K_ESC
         retval = 0
      elseif key_stroke == K_ENTER
         retval = 0
      elseif key_stroke == K_F1
         buffer = SAVESCREEN(0, 0, 24, 79)
         dbeditsrch(mlin_sup,mcol_sup,mlin_inf,mcol_inf,mlin_sup-1,mcol_sup+1)
         RESTSCREEN(0, 0, 24, 79, buffer)
      else
         retval = 1
      endif
endcase
return(retval)



FUNCTION DBeditSrch
PARAMETER mtop, mleft, mbottom, mright, msgrow, midpoint
PRIVATE maxlength, srchstr, oldcolor, marker
marker = RECNO()
srchstr = []
maxlength = INDEXKEY(0)
maxlength = LEN(&maxlength)
oldcolor = SETCOLOR(cor[7])
@ msgrow, midpoint say '[ ' + SPACE(maxlength) + ' ]'
SETCOLOR(oldcolor)
DBEDIT(mtop, mleft, mbottom, mright, campo_db, 'helpact', mask_db, tit_db)
IF LASTKEY() = 27
   GO marker
ENDIF
RETURN []


FUNCTION helpact
PARAM mode,indx
PRIVATE key, ret_val, marker
key = LASTKEY()
ret_val = 1
DO CASE
   CASE mode<4    && idle
      @ msgrow, midpoint + 2 + LEN(TRIM(srchstr)) say []
   CASE KEY = 27 .OR. KEY = 13   && Esc or Enter
      ret_val = 0
   CASE KEY = 8 .OR. (KEY > 31 .AND. KEY < 123) .AND. TYPE('srchstr')<>'U'
      IF key = 8
         srchstr = SUBSTR(srchstr, 1, LEN(srchstr) - 1)
      ELSEIF LEN(srchstr) < maxlength
         srchstr = srchstr + UPPER(CHR(key))
      ENDIF
      marker = RECNO()
      SEEK srchstr
      IF !FOUND()
         TONE(440,1)
         GO marker
         srchstr = SUBSTR(srchstr, 1, LEN(srchstr) - 1)
      ELSE
         ret_val = 2
      ENDIF
      oldcolor = SETCOLOR(cor[7])
      @ msgrow, midpoint say '[ ' + srchstr + SPACE(maxlength-LEN(srchstr)) + ' ]'
      SETCOLOR(oldcolor)
ENDCASE
RETURN ret_val



Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

Coloque um INKEY(0) após @ 1,1 say xdig color "w+/r" e veja se resolve.

xdig = xdig + upper(chr(lastkey()))
seek xdig
@ 1,1 say xdig color "w+/r"
INKEY(0) // aqui
return(2)

Jânio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
odilon.informatica
Usuário Nível 1
Usuário Nível 1
Mensagens: 21
Registrado em: 23 Out 2007 14:37
Localização: Mairinque-SP

Mensagem por odilon.informatica »

Grato.
Acertei tudo.
Valeu
Responder