Página 1 de 1

DBEDIT NO HARBOUR - Pequeno Problema... (** Resolvido **)

Enviado: 13 Mar 2008 17:45
por EANDRIOLI
Colegas....

gostaria da ajuda de voces para resolver esse pequeno problema: o fonte/rotina abaixo funciona perfeitamente para busca tecla por tecla quando o campo é numerico, ex. busca de um codigo de cliente. Automaticamente ela mostra o codigo que voce vai digitando de um cliente, ou conta, ou lançamento, etc, a busca é automatica também.

Tentei modifica-la para busca de texto (Ex. nome do cliente) e não estou tendo exito, gostaria do apoio dos nossos amigos do forum na tentativa de sanar mais esses problema do Dbedit.

Segue Fonte / Rotina:

Código: Selecionar todos


DECLARE array_nf[1]
array_nf[1] :='TRANS(numlcto,"9999999")+"³  "+TRANS(contalcto,"99")+" ³ "+DTOC(dtemlcto)+"³ "+DTOC(dtmvlcto)+"³ "+TRANS(ABS(valorlcto),"@E 9,999,999.99")+"³"+desctp+"³ "+tipo+"³"+ticado'
KEYBOARD CHR(32)

letra := 0
letra1:= ""
letra2:= ""

DBGOBOTTOM()
INKEY(0)

DBEDIT(05,1,18,77,array_nf,"colu",,"","")

DBGOBOTTOM()
DESKTOP()
RSTENV(TEL_EST)
RETURN(.T.)

*-----------------
FUNCTION colu
*-----------------

* Localizando por lan‡amento quando for digitado um numero...
tecla=LASTKEY()
IF tecla >= 48 .AND. tecla <= 57
   IF LEN(LTRIM(STR(letra))) < 6
      letra=VAL(CHR(tecla))
      letra1=STR(letra)
      letra2=letra2+letra1
      letra=VAL(letra2) 
   ENDIF
   ffseek := letra
   SET SOFTSEEK ON
   SET ORDER TO 2
   DBSEEK(ffseek)
   SET SOFTSEEK OFF
   KEYBOARD CHR(176)
   INKEY(0)
ELSEIF tecla <> 176
   letra := 0
   letra1:= ""
   letra2:= ""
ENDIF      
IF letra=0
   @24,35 SAY PADC("BUSCAR: "+"_",30," ") COLOR("GR+/BG")
ELSE
   @24,35 SAY PADC("BUSCAR: "+LTRIM(STR(letra))+"_",30," ") COLOR("GR+/BG")
ENDIF

Tenho certeza que acharemos uma resposta plauzível.

Abraços

Erasmo.

Enviado: 13 Mar 2008 17:53
por Luciano Bonfim
amigo, faz assim que funciona que é uma beleza...

Código: Selecionar todos


FUNCTION DBeditSrch
parameters mtop, mleft, mbottom, mright, msgrow, midpoint, srchstr
local oldcolor, marker
private maxlength
if pcount()<7
   srchstr=[]
endif
marker = RECNO()
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
@ msgrow, midpoint clear to msgrow,79
RETURN []


FUNCTION helpact
parameters mode,indx
local key, ret_val, marker, oldcolor
key = LASTKEY()
ret_val = 1
DO CASE
   case mode=-1 .and. key # 27 .and. key # 13
      marker = RECNO()
      SEEK srchstr
      IF !FOUND()
         tone(300,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)
   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(300,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)



Enviado: 20 Mar 2008 15:43
por EANDRIOLI
DEU CERTO AMIGO....MÁS FAZENDO DESTA FORMA:

Código: Selecionar todos

IF (LASTKEY() >= 65 .AND. LASTKEY() <= 122) .OR. LASTKEY() == 32 .OR. (LASTKEY() >= 40 .AND. LASTKEY() <= 57)
   IF LEN(letra) < 30
      letra += UPPER(CHR(LASTKEY()))
   ENDIF
   ffseek := letra
   SET SOFTSEEK ON
   DBSEEK(ffseek)
   SET SOFTSEEK OFF
   KEYBOARD CHR(176)
   INKEY(0)
ELSEIF LASTKEY() = 8    // BackSpace volta apagando...
   letra = ""
ENDIF
IF letra = ""
   @20,16 SAY PADC("BUSCAR: "+"_",49," ") COLOR("W+/W")
ELSE
   @20,16 SAY PADC("BUSCAR: "+letra+"_",49," ") COLOR("W+/W")
ENDIF
Valeu a ajuda que serviu para resolver o problema...

Abraços