Onde colocar o inkey para o dbedit???

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

Moderador: Moderadores

Avatar do usuário
ERASMO ANDRIOLI
Usuário Nível 2
Usuário Nível 2
Mensagens: 51
Registrado em: 15 Jul 2004 16:15
Localização: Sorriso-MT
Contato:

Onde colocar o inkey para o dbedit???

Mensagem 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
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem 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}
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Avatar do usuário
ERASMO ANDRIOLI
Usuário Nível 2
Usuário Nível 2
Mensagens: 51
Registrado em: 15 Jul 2004 16:15
Localização: Sorriso-MT
Contato:

Mensagem 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]
Avatar do usuário
ERASMO ANDRIOLI
Usuário Nível 2
Usuário Nível 2
Mensagens: 51
Registrado em: 15 Jul 2004 16:15
Localização: Sorriso-MT
Contato:

Mensagem 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.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Use TBROWSE que é bem mais estavel que o DBEDIT.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder