Página 1 de 1

Onde colocar o inkey para o dbedit???

Enviado: 29 Fev 2008 23:31
por ERASMO ANDRIOLI

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...
IF LASTKEY() >= 48 .AND. LASTKEY() <= 57
   IF LEN(LTRIM(STR(letra))) < 6
      letra=VAL(CHR(LASTKEY()))
      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)
ELSEIF LASTKEY() <> 176
   letra := 0
   letra1:= ""
   letra2:= ""
ENDIF      
IF letra=0
   @24,35 SAY PADC("BUSCAR: "+"_",30," ") COLOR("GR+/BG")
   INKEY(0)
ELSE
   @24,35 SAY PADC("BUSCAR: "+LTRIM(STR(letra))+"_",30," ") COLOR("GR+/BG")
   INKEY(0)
ENDIF


Os inkeys acima não funcionam pelo Harbour... tenho que digitar 2x alguma coisa pra sair na tela.

Alguem sabe onde eles devem ir??

Abraços

Enviado: 03 Mar 2008 12:00
por gvc
Veja que vc coloca um CR no bufferde teclado (1) e faz a leitura logo após (2).

KEYBOARD CHR(32) // (1)
letra := 0
letra1:= ""
letra2:= ""
DBGOBOTTOM()
INKEY(0) // (2)

Vc lê o lastkey várias vezes.

// VEja isso:
FUNCTION colu
local tecla

tecla := lastkey()
* Localizando por lan‡amento quando for digitado um numero...
IF tecla >= 48 .AND. tecla <= 57
IF LEN(LTRIM(STR(letra))) < 6
letra := tecla // VAL(CHR(LASTKEY())) // transforma em ASC e depois em número???
letra1 := STR(letra)
letra2 += letra1
letra :=VAL(letra2)
ENDIF
ffseek := letra
dbsetorder(2)
DBSEEK(ffseek, .T.)
KEYBOARD CHR(176) // Não entendi.
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
INKEY(0) // Não entendi este tb.

return(1) // faltou isto aqui

// Eu costumo separar os campos

DECLARE array_nf

array_nf := {numlcto,;
contalcto,;
dtemlcto,;
dtmvlcto,;
valorlcto,;
desctp,;
tipo,;
ticado}

Enviado: 03 Mar 2008 15:58
por ERASMO ANDRIOLI
ESTOU FAZENDO ASSIM PARA BUSCAR UM NOME E NAO ESTA DANDO CERTO, O PROG ESTA "COMENDO" OS CARACTERES...

Código: Selecionar todos

DECLARE SELFOR[1]
SELFOR[1] :='NOMEFOR+" ³ "+STR(CONTA_P)'
WIN(2,15,21,65,"ESCOLHA UM COLABORADOR",'GR+/N+*','N+*/W')
@03,16 SAY " NOME                                     ³CONTA "
@04,16 SAY "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄ"

@19,16 SAY "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄ"

letra   := ""
letra1  := ""

KEYBOARD CHR(176)
DBGOTOP()
INKEY(0)
DBEDIT(05,16,18,64,SELFOR,"SELPARC",,"","")
DESKTOP()
RSTENV(TEL_INI)
SET CENTURY ON
SET DELETED ON
RETURN(.T.)

*-----------------
FUNCTION SELPARC   // Mostrar Fornecedores...
*-----------------

tecla=lastkey()                                
IF (tecla >= 65 .AND. tecla <= 122) .OR. tecla == 32 .OR. (tecla >= 40 .AND. tecla <= 57)
   IF LEN(LTRIM(letra)) < 30
      letra = UPPER(CHR(tecla))
      letra1=letra1+letra
      letra=letra1
   ENDIF
   ffseek := letra
   SET SOFTSEEK ON
   DBSEEK(ffseek)
   SET SOFTSEEK OFF
   KEYBOARD CHR(176)
   INKEY(0)
ELSEIF tecla <> 176
   letra := ""
   letra1:= ""
ENDIF
IF letra = ""
   @20,16 SAY PADC("BUSCAR: "+"_",49," ") COLOR("W+/W")
ELSE
   @20,16 SAY PADC("BUSCAR: "+letra+"_",49," ") COLOR("W+/W")
ENDIF
RETURN(1)

[quote]
Pra numeros deu certissimo, obrigado.

Más pra texto nao esta dando não... Aguardo o apoio dos amigos...

Abraços[/quote]

Enviado: 03 Mar 2008 16:01
por ERASMO ANDRIOLI
Para numeros só deu certo desta forma:

Código: Selecionar todos


* 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

Devo lembrar-lhes que no XHarbour só dá certo com o inkey acima.

Enviado: 09 Mar 2008 13:52
por sygecom
Use TBROWSE que é bem mais estavel que o DBEDIT.