Página 1 de 1

Keyboard

Enviado: 21 Set 2007 17:33
por leandrolinauer
Caros colegas.
Estou com problemas graves de comando com o KEYBOARD, visto que o mesmo não responde corretamente aos comandos, criei um novo MyKeyboard

Function MyKeyboard(aCHR)
If aCHR==" ".Or.Empty(aCHR) //funcionou bem abaixo
Keyboard CHR(255) //encontrei no forum para limpar
Inkey(0)
Else // ja não funciona bem
KeyBoard(aCHR) //executa EX: MyKeyboard(CHR(13))
EndIf
Return .T.

Bom, continuo com problemas aonde esta não funciona bem, efetuo uma lista de GET e dou um CHR13 porque não quero entrar no primeiro GET.
esta forma:
PEDIDO:=AUTONUMERO() //PEGA AUTOMATICO
@ x,y Get PEDIDO (CHR13 vai para o debaixo)
@ x,y Get CLIENTE (se eu quiser alterar o pedido ou se for vazio, teclo seta para voltar ao campo anterior)
......
READ

o problema é que ele sempre cai no PEDIDO o que não devia acontecer, como no clipper nao acontecia.
Se alguem souber a solução, fico grato pela ajuda, visto que utilizo muitos KEYBOARD no sistema devido a decisão tomada.
Ps: Pelo que testei, falta apenas isto para eu colocar o sistema em uso, mas desta forma não tem como.
:'(

Enviado: 21 Set 2007 18:32
por sygecom
Não entendi o que vc que exatamente, onde vc esse MyKeyboard() , se poder postar um exemplo completo, para poder analisar melhos.

Enviado: 21 Set 2007 21:28
por leandrolinauer
Eu uso o MyKeyboard ou Keyboard em execuções com DBEDIT e tbem, na linha de GETs
Função na biblioteca

Function MyKeyBoard(aCHR)
If aCHR==" ".Or.Empty(aCHR) //se for vazio execute a limpa do buffers
KeyBoard CHR(255) //faz o keyb
Inkey(0) //limpa
Else
KeyBoard(aChr) //executa o chr
// KeyBoard CHR(255) //faz o keyb
// Inkey(0) //limpa
EndIf
Return .T.
////////////
exemplos: rotina em uso

Static Procedure EditaOrcamento(xTp)
Local NomeCampos:={{"cod_merc","Abreviate(descricao,19)","unidade","item","qte_real","desconto","vr_vendido"},;
{"@R 9999999","@!","@!","@R 9999","@E 9999,999.999","@E 9999.9999%","@E 9,999,999.99"},;
{"C¢digo","Mercadoria","Unid","Item","Quantidade","Desconto%","Pre‡o venda"}}
Public p_DV:="V"
Private UnSelect:=Str(Select(),2),lOrd:="C"
Private w_DESCONTO:=w_BASICO:=w_MARGEM:=w_VR_VENDIDO:=w_VR_VENDA:=w_QTE_REAL:=w_COM:=w_COMb:=0
Private w_ITENS:=w_ITEM:=0
Private wDtV:=Date()+1,wCPar:=" "
Private wVR_VC:=wVR_AV:=wVR_PARC:=0 //divida
Private LValorC:=LValorCB:=LValorBV:=LValorVV:=LValorBB:=LValorVB:=wVrTotal:=0 //NEW
xTp:=If(xTp=Nil,"",xTp)
ShowWait()
DbSelectArea("CDOC3500")
DbGoTop()
While !Eof().And.Empty(DATA)
ShowWaitProc()
If Empty(DATA)
While !RLock()
ShowMessage(,,"Ficha em uso!",1)
End
DbDelete()
DbCommitAll()
DbUnLock()
EndIf
DbSkip(1)
End
DbSeek(wDoc,.T.)
File1Tmp:=HoraTmp()
Copy To &wDir.&File1Tmp. While !Eof().And.NR_DOC==wDoc
DbUseArea(.T.,Nil,wDir+File1Tmp,Nil,.F.,.F.)
IndexFile("item" ,wDir+Left(File1Tmp,7)+"B")
IndexFile("nr_doc+cod_merc",wDir+Left(File1Tmp,7)+"A")
DbSetIndex(wDir+Left(File1Tmp,7)+"A")
DbSetIndex(wDir+Left(File1Tmp,7)+"B")
NetRelFile("CDOC3500","NR_DOC+COD_MERC")
NetRelFile("CEST0300","COD_MERC")
CloseWindow()
If(xTp=="P",AtOrcamento(),.T.)
MostraValor("LUCRO","CUSTO","QTE_REAL","VR_VENDIDO","DESCONTO","Round(VR_VENDIDO*100/(100-DESCONTO),3)")
MyKeyBoard(" ")
TxArmazena(.T.,.F.)
p_DV:=If(wVrTotal<0,"D","V")
DbEdit(11,03,16,76,NomeCampos[1],"FuncMovOrc",NomeCampos[2],NomeCampos[3],"Ä","³",)
CloseTmp(,Left(File1Tmp,7)+"A",Left(File1Tmp,7)+"B")
DbSelectArea(UnSelect)
MyKeyBoard("")
Return
///
abaixo um pedaço da funcmov só a opcao INSERT = 22 aonde lanço novos itens

Case LastKey()=22.And.aMd=="O".And.wLoja==wFilial
WRet:=2
If (LastRec()>=1.And.!Empty(COD_MERC))
Scroll(WRow,03,16,76,-1)
@ WRow,02 Say "³ ³ ³ ³ ³ ³ ³ ³"
EndIf
If !Empty(wMerc)
MyKeyBoard(Chr(13))
EndIf
// @ WRow,03 Get wMerc Pict "@S09!" Valid(ChecaMerc("E",wRow,14,15))
// @ WRow,03 Get WMerc Pict "@R 99.99.999" Valid(ChecaMerc("M",WRow,13,17,If(Left(wE_CGC,8)=="15575798",.T.,.F.)))
@ WRow,03 Get wMerc Pict "@S07!" Valid(ChecaMerc("G",wRow,11,19,If(Left(wE_CGC,8)=="15575798",.T.,.F.)))
Keyin()
wMerc:=Left(wMerc,7)
If Left(WMerc,4)=="9999"
i:=1
DbGoTop()
WMerc:=Left(WMerc,4)+StrZero(i,3)
While !Eof()
If !DbSeek(WDoc+Left(WMerc,4)+StrZero(i,3))
WMerc:=Left(WMerc,4)+StrZero(i,3)
Exit
EndIf
i++
WMerc:=Left(WMerc,4)+StrZero(i,3)
DbSkip(1)
End
EndIf
@ WRow,03 Say WMerc Pict "@R 9999999"
DbSetOrder(1)
If LastKey()#27.And.!DbSeek(WDoc+WMerc)
CEST0300->(DbSeek(WMerc))
w_CUSTO :=CEST0300->CUSTO
w_LUCRO :=CEST0300->LUCRO
w_COMISSAO :=CEST0300->COMISSAO
w_DESCRICAO :=CEST0300->DESCRICAO
w_UNIDADE :=CEST0300->UNIDADE
w_GENERICO :=CEST0300->GENERICO
w_DECIMAIS :=If(Left(WMerc,4)=="9999",3,CEST0300->DECIMAIS)
w_ITEM :=w_ITENS+1
w_SITUACAO :="1"
w_QTE_REAL :=0
w_VENDA :=Round(w_CUSTO*(w_LUCRO/100+1),3)
w_DESCONTO :=If(Left(wMerc,2)=="99",0,If(ChecaBasico(((w_VENDA/w_CUSTO)-1)*100),0,wE_Desc+If(wE_Desc=50,0,0))) //DESCONTO 50 (50,9)
w_VR_VENDIDO:=Round(w_VENDA-(w_VENDA*(w_DESCONTO/100)),2)
@ WRow,31 Say w_UNIDADE Pict "@R !!!!"
DrawMercadoria(w_DESCRICAO,w_UNIDADE,CEST0300->ATUAL,CEST0300->RESERVA,CEST0300->COMPRA,p_DV)
If Left(WMerc,4)#"9999"
MyKeyBoard(CHR(13))
EndIf
@ 05,04 Get w_DESCRICAO Pict "@S40!" Valid(!Empty(w_DESCRICAO))
If Left(WMerc,4)=="9999"
@ 05,53 Get w_UNIDADE Pict "@R !!!!" Valid(!Empty(w_UNIDADE))
EndIf
@ 07,64 Get w_QTE_REAL Pict PictGet(12,w_DECIMAIS) Valid(w_QTE_REAL>0 .And. ChecaQuaA(w_QTE_REAL,p_DV,CEST0300->ATUAL,w_SITUACAO,CDOC3500->QTE_ENT,CDOC3500->QTE_NAEN,wMerc,"O"))
Keyin()
CloseWindow()
@ WRow,11 Say Abreviate(w_DESCRICAO,19)
@ WRow,31 Say w_UNIDADE Pict "@R !!!!"
If LastKey()#27
@ WRow,41 Say w_QTE_REAL Pict PictSay(12,w_DECIMAIS)
c_DESCONTO :=If(w_DESCONTO =0,1,0) //CONTROLES
c_VR_VENDIDO:=If(w_VR_VENDIDO=0,1,0) //CONTROLES
c_QTE_REAL :=w_QTE_REAL
w_VR_VENDIDO:=Round(w_QTE_REAL*(w_VENDA-(w_VENDA*(w_DESCONTO/100))),2)
// w_VR_VENDIDO:=Round(w_QTE_REAL*(w_CUSTO*(w_LUCRO/100+1)),2)
// w_VR_VENDIDO:=If(Left(wMerc,2)#"99",w_VR_VENDIDO*(w_DESCONTO/100),w_VR_VENDIDO) //NAO ENTENDI
MyKeyBoard(CHR(13))
While w_DESCONTO#c_DESCONTO.Or.w_VR_VENDIDO#c_VR_VENDIDO
c_DESCONTO :=w_DESCONTO
c_VR_VENDIDO:=w_VR_VENDIDO
If Left(COD_MERC,2)#"99"
@ WRow,36 Get w_ITEM Pict "@E 9999" Valid(w_ITEM>0)
If Left(WMerc,2)#"99"
@ WRow,54 Get w_DESCONTO Pict "@E 9999.9999%" Valid(ChecaV("I"))
EndIf
@ WRow,65 Get w_VR_VENDIDO Pict "@E 9,999,999.99" Valid(ChecaV("I").And.w_VR_VENDIDO>0)
Keyin()
EndIf
Keyin()
If LastKey()=27
Exit
EndIf
End
If LastKey()#27
If(Empty(WDoc),PesquisaDoc("P"),.T.) //pega um temporario
ShowWait(,,"Gravando or‡amento...")
GravaOrc()
DbSelectArea("CDOC3500")
GravaOrc()
DbSelectArea(File1Tmp)
CloseWindow()
MostraValor("LUCRO","CUSTO","QTE_REAL","VR_VENDIDO","DESCONTO","Round(VR_VENDIDO*100/(100-DESCONTO),3)")
ShowValCusto(w_QTE_REAL,w_CUSTO,w_LUCRO,w_VR_VENDIDO,WMerc,p_DV,w_VENDA)
EndIf
EndIf
ElseIf Found()
ShowMessage(,,"Esta mercadoria j  consta neste pedido!",0)
Else
// Scroll(WRow,03,16,76,+1)
// @ WRow,02 Say "³ ³ ³ ³ ³ ³ ³ ³"
EndIf
If lOrd=="I"
DbSetOrder(2)
Else
DbSetOrder(1)
EndIf
DbGoTop()
MyKeyBoard("")
wMerc:=Space(7)

/////////////////
Eu utilizo o KEYBOARD para limpar o BUFFERS do teclado para que ao teclar enter não edite novamente o ITEM como alteração comando 13
e na linha de GETS abaixo

MyKeyBoard(CHR(13))
If bSit=="V" //se for venda entre no codigo dopedido, mas da ENTER 13 automatico, se eu quiser voltar para editar o numero teclo seta para cima
@ 05,05 Get wX_Doc Pict "@R 9999!!" Valid(!Empty(wX_Doc))
EndIf
@ 05,14 Get WData Valid(!Empty(WData) .And. WData<=Date())
If aMd=="O".Or.Empty(wCod)
@ 05,27 Get WCod Pict "@R 99999999999999" Valid(ChecaCliOrc("M",05,37,37,bSit,@pCadClie))
EndIf
Keyin()

/////
Estes são os exemplos em uso, utilizo em varios lugares no sistema com estes tipos de uso, em DBEDIT e linhas de GETs. para que por exemplo não feche as telas sem a devida necessidade.
:)Pos

Enviado: 22 Set 2007 00:58
por fladimir
Colega acho q o assunto esta, de certa forma, relacionado ao tópico abaixo:

https://pctoledo.org/forum/viewtopic.php?t=6078

Resumindo o assunto, nas análises q fiz existem algumas funções tipo:

Keyboard()
Dbedit()
e outras q não me recordo no momento q não funcionam da mesma maneira q estamos acostumados no Clipper, o pq não sei, mas o fato é q no meu caso terei q migrar minhas rotinas do Dbedit para o Tbrowse, como discutido no tópico acima, e um dos motivos é q a função Keyboard tb não funciona da maneira correta. Isso foi constado Eu utilizando o xHarbour 0.99.70 baixado e compilado do CVS.

Espero não ser o seu caso, Sucesso colega....


:)Pos

Enviado: 22 Set 2007 16:31
por sygecom
Isso, como o colega acima disse, use o tbrowse() que é só alegria...

Obs: Leandro, por favor se possivel nos proximos post coloque o codigo fonte dentro da Indentação usando o recurso do Forum (CODE).

Abraços
Leonardo Machado

Enviado: 22 Set 2007 22:05
por leandrolinauer
Grato aos colegas.
Da proxima vez edendo os codigos fontes.
Bom, se alguem puder me enviar exemplos de TBrowse, porque eu fiz algumas pesquisas e não encontrei algo que me ajudasse.

Email:leandrolinauer@hotmail.com

Muito obrigado.
:)Pos

Enviado: 22 Set 2007 23:01
por sygecom
Me chama no MSN que te mando, suporte@sygecom.com.br