PauloPJ Posted January 8, 2012 Report Share Posted January 8, 2012 OLA GALERA EU DENOVO PRECISANDO DE AJUDA. PRECISO RESOLVER UM PROBLEMA DE VELOCIDADE DE LEITURA USO UM LISTBOX E QUANDO DIGITO QUALTER TECLA EU ATIVO UM DIALOGO POR CIMA DA COLUNA QUE ESTA ATIVA PARA EDITAR O CAMPO. MAS QUANDO USO A PISTOLA DE CODIGO DE BARRAS ELE COME PARTE DO QUE FOI PISTOLADO , A LEITURA É MAIS RAPIDA DOQUE A ATIVACAO DO DIALOGO DO GET E ETC. PERGUNTO TEM COMO EU LER O BUFFER DO TECLADO? ASSIM DEPOIS DO ENTER DA PISTOLA EU MONTO A VARIAVEL COM O CONTEUDO DO BUFFER. FWHX 8.4 XHARBOUR 1.1.0 PELE C 6.00.4 TELA EM .RES Quote Link to comment Share on other sites More sharing options...
PauloPJ Posted January 8, 2012 Author Report Share Posted January 8, 2012 OLA GALERA EU DENOVO PRECISANDO DE AJUDA. PRECISO RESOLVER UM PROBLEMA DE VELOCIDADE DE LEITURA USO UM LISTBOX E QUANDO DIGITO QUALTER TECLA EU ATIVO UM DIALOGO POR CIMA DA COLUNA QUE ESTA ATIVA PARA EDITAR O CAMPO. MAS QUANDO USO A PISTOLA DE CODIGO DE BARRAS ELE COME PARTE DO QUE FOI PISTOLADO , A LEITURA É MAIS RAPIDA DOQUE A ATIVACAO DO DIALOGO DO GET E ETC. PERGUNTO TEM COMO EU LER O BUFFER DO TECLADO? ASSIM DEPOIS DO ENTER DA PISTOLA EU MONTO A VARIAVEL COM O CONTEUDO DO BUFFER. FWHX 8.4 XHARBOUR 1.1.0 PELE C 6.00.4 TELA EM .RES Quote Link to comment Share on other sites More sharing options...
SISTEMASIT Posted January 8, 2012 Report Share Posted January 8, 2012 Eu tive esse problema, resolvi tirando a entrada de dados do LISTBOX e colocando num GET EXTERNO, mais ou menos assim: function main oBrw:bKeyDown = { | nKey | GetExterno(nKey) , nil } static Function GetExterno(xKey) mVARGET:=padr(chr(xKey),20) ... get mVARGET ... Rubem Jr http://sistemasit.com Belem/PA Quote Link to comment Share on other sites More sharing options...
PauloPJ Posted January 8, 2012 Author Report Share Posted January 8, 2012 Valeu Rubens pela resposta. Mas eu ja uso um get externo. Quando pistolo um codigo de barras o __Keyboard( ctecla) escreve o caracter depois da pistola ai um codigo original que é: 789606014902, quando pistolado ele fica: 896706014902 a pistola escreveu mais rapido que o keyboard() no get . VEJA O CODIGO DEFINE DIALOG oDlgVND RESOURCE "MOVVEND" TITLE "DAV DOCUMENTO AUXILIAR DE VENDA" FONT oFont1 BRUSH oBrushback1 pixel //FONT oFont12 REDEFINE LISTBOX oLbxVND ; FIELDS &cvetorvnd2 ; HEADERS &cvetorvnd1 ; ID 106 UPDATE OF oDlgVND ON CHANGE (mostratxtitem(),MOSTRAFOTOVND(oImagemProd,if(len(alltrim(&tmp_vnd->cod_est))<>0,W_CAM_FOTOPROD+"P"+alltrim(SUBSTR(&tmp_vnd->COD_EST,1,7))+".JPG",cgfileprod),"")) NCOLuna:=oLbxVND:nColAct NLinha :=oLbxVND:nRowPos oLbxVND:bKeyDown = { | nKey, nrow, ncol | KeyDownVND( oLbxVND, nKey,oDlgVND,oLbxVND:nColAct,oLbxVND:nRowPos) } ACTIVATE DIALOG oDlgVND *----------------------------------------------------------------------- static function KeyDownVND(oLbxPDV, nKey,oDlgPDV,nColAct,nRowAct) *----------------------------------------------------------------------- xretorno:=DIGITA_CODIGO( oDlgVND, oLbxVND, nLinha, nColuna ,nKey) return(xretorno) *-------------------------------------------------------------------- STATIC FUNC DIGITA_CODIGO( oDlgVND,LbxVND, nLinha, nColuna,nKey) *------------------------------------------------------------------- SELE 15 TMP_VND:=ALIAS() pos_cursor:= cvetorvnd3[1] NLinha :=oLbxVND:nRowPos upos_cursor = &pos_cursor // aqui é a variavel da coluna no listbox CTECLA:=CHR(nKey) RTECLA:=CHR(VK_END) tamanho:=LEN(UPOS_CURSOR) ad:=oLbxVND:GetColSizes() pos:=0 //ad[1] self:=0 aa:={} aa := ClientToScreen( oLbxVND:hWnd, aa ) // pega a posicao inicial top e left do GET NTOPLBX:=AA[1] NLEFTLBX:=AA[2] lini := ((nlinha-1)*18)+(nTopLbx+18) cini := pos+nLeftLbx //10 //38 lfim := lini+14 cfim := (cini-3)+ad[1] xreted:=.f. DEFINE DIALOG oDlg FONT oFont1 FROM lini,cini to lfim,cfim ; STYLE nOR( WS_VISIBLE, WS_POPUP) PIXEL @ 0,0 GET oPos_cursor VAR upos_cursor PICT "@!" FONT oFont1 OF oDlg SIZE (tamanho*69),9 PIXEL oPos_Cursor:bGotFocus := { || __Keyboard(tecla) } //posiciona o cursor no final da variavel @ 10, 0 BUTTON oBtn PROMPT "" ACTION ( oDlg:End(),xreted:=.t.,) OF oDlg Default ACTIVATE DIALOG oDlg if xreted &pos_cursor := upos_cursor // grava no arquivo a variavel temporaria do get end RETURN(1) FWHX 8.4 XHARBOUR 1.1.0 PELE C 6.00.4 TELA EM .RES Editado por - igpjinfo on 08/01/2012 23:02:42 Quote Link to comment Share on other sites More sharing options...
SISTEMASIT Posted January 9, 2012 Report Share Posted January 9, 2012 Faz assim: pega o 1o caractere (7) que ta na variavel nKey da função KeyDownVND e soma som o resultado do seu get externo UPOS_CURSOR (896706014902), o resultado (7896706014902) vc faz a busca na sua tabela. Coloca um VALID pra fechar a DIALOG e assim fica transparente pro usuario Rubem Jr http://sistemasit.com Belem/PA Quote Link to comment Share on other sites More sharing options...
PauloPJ Posted January 10, 2012 Author Report Share Posted January 10, 2012 OK Rubens Obrigado pela dica. Eu fiz assim mesmo para testar e funcionou o problema é que nem sempre é pistolado o código, as vezes o usuário digita , e ele fica maluco porque o primeiro caracter só vai aparecer quando ele der enter. Eu arrumei uma solução usando a sua ideia. Eu somo o caracter que está no nKey antes de editar o get e movo o cursor para o lado direito antes de editar, mas mesmo assim ele as veses coloca este deslocamento para o lado fora da posicao e da um espaco em branco no meio do código, ai depois eu faco um strtran() e tiro este espaco em branco que fica. Funcionou mas ficou muito feio, fica uma programação suja, (gambiarra)rsrs, gostaria de tentar resolver isso usando o buffer do teclado, se fosse possivel. Imaginei ativar o buffer e depois +-1 segundo escrever na variáver o conteudo do buffer, daria tempo da pistola escrever todo o código na memória, e se o usuario digitasse ficaria transparente pois seria um segundo de retardo. FWHX 8.4 XHARBOUR 1.1.0 PELE C 6.00.4 TELA EM .RES Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.