Retendo a ultima tecla pressionada
Moderador: Moderadores
-
alvaro.bernardi
- Usuário Nível 1

- Mensagens: 40
- Registrado em: 22 Nov 2008 11:02
- Localização: Porto Velho
Retendo a ultima tecla pressionada
Bom dia,
Estou com o seguinte problema:
quando entro em um formulário qualquer, avanço os campos e botões com ENTER, porém em determinadas situações, como em uma busca (abrindo a janela de busca) o sistema retém a ultima tecla pressionada, no caso o ENTER, e ele abre a janela de busca e como a ultima tecla pressionada foi o ENTER, ele seleciona o primeiro registro que aparece e retorna para o formulário principal o resultado da busca incorreto, pois não deu pra selecionar nenhum outro. Quando seleciono a busca com o mouse corre tudo bem....
utilizei alco como GetkeyState(CHR(255)) para enviar uma tecla ao buffer de teclado mas não deu certo.
como eu posso enviar uma tecla para o buffer, uma vez que KEYBOARD CHR(255) não funciona?
Estou com o seguinte problema:
quando entro em um formulário qualquer, avanço os campos e botões com ENTER, porém em determinadas situações, como em uma busca (abrindo a janela de busca) o sistema retém a ultima tecla pressionada, no caso o ENTER, e ele abre a janela de busca e como a ultima tecla pressionada foi o ENTER, ele seleciona o primeiro registro que aparece e retorna para o formulário principal o resultado da busca incorreto, pois não deu pra selecionar nenhum outro. Quando seleciono a busca com o mouse corre tudo bem....
utilizei alco como GetkeyState(CHR(255)) para enviar uma tecla ao buffer de teclado mas não deu certo.
como eu posso enviar uma tecla para o buffer, uma vez que KEYBOARD CHR(255) não funciona?
Álvaro de Oliveira Bernardi
Microline Software
Porto Velho - RO
Microline Software
Porto Velho - RO
Re: Retendo a ultima tecla pressionada
Tente usar :
Ate+,
Código: Selecionar todos
keyb_event(255)
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
-
alvaro.bernardi
- Usuário Nível 1

- Mensagens: 40
- Registrado em: 22 Nov 2008 11:02
- Localização: Porto Velho
Re: Retendo a ultima tecla pressionada
Nada...
não funcionou.....
não funcionou.....
Álvaro de Oliveira Bernardi
Microline Software
Porto Velho - RO
Microline Software
Porto Velho - RO
Re: Retendo a ultima tecla pressionada
Poste um trecho do código para que possamos verificar, em suma, o comando informado deveria ter solucionado o problema.
Ate+,
Ate+,
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
-
alvaro.bernardi
- Usuário Nível 1

- Mensagens: 40
- Registrado em: 22 Nov 2008 11:02
- Localização: Porto Velho
Re: Retendo a ultima tecla pressionada
Código: Selecionar todos
#include "hwgui.ch"
STATIC Thisform
GLOBAL FRMCAD_FORN
FUNCTION cad_forn()
Private vEditaForn := .t.
public oButton4, oButton1, oEdit1, oEdit2, oLabel1, oLabel2, oLine1 ;
, oEdit3, oLabel3, oEdit4, oLabel4, oPage1, oLabel21, oEdit6, oEdit5 ;
, oLabel6, oLabel5, oEdit7, oLabel7, oEdit8, oLabel8, oEdit9, oLabel9 ;
, oEdit10, oLabel10, oEdit11, oLabel11, oEdit13, oEdit12, oLabel12, oLabel13 ;
, oEdit14, oEdit16, oLabel14, oLabel16, oEdit15, oLabel15, oEdit17, oLabel17 ;
, oEdit19, oEdit20, oLabel18, oLabel19, oEdit18, oLabel20, oCheck1, oLine2 ;
, oButton2, oButton3 , vBLOQFICHA := .F., OPERACAO, oCOD_FORN
ABRE_ARQ()
ABRE_FORN()
SELECT CADFORN
ARQUIVO=dbf()
set exact off
Cria_var()
OPERACAO='CAD_FORN'
vCOD_FORN := PEGA_COD()
oCOD_FORN := vCOD_FORN
INIT DIALOG FRMCAD_FORN TITLE "Cadastro de Fornecedor" ;
ICON HIcon():AddFile(VIcon);
AT 303,141 SIZE 819,539 NOEXIT ;
CLIPPER ;
STYLE WS_POPUP+WS_CAPTION+DS_CENTER +WS_SYSMENU
Thisform := FRMCAD_FORN
// Linhas
@ 2,40 LINE oLine1 LENGTH 815
@ 2,485 LINE oLine2 LENGTH 815
// Says
@ 043,010 SAY oLabel1 CAPTION "Código" SIZE 47,19
@ 211,010 SAY oLabel2 CAPTION "PESSOA : (F)isica ou (J)uridica" SIZE 207,19
@ 014,052 SAY oLabel3 CAPTION "Fornecedor" SIZE 76,19
@ 031,079 SAY oLabel4 CAPTION "Fantasia" SIZE 59,19
@ 026,200 SAY oLabel7 CAPTION "Endereço" SIZE 64,19
@ 047,227 SAY oLabel8 CAPTION "Bairro" SIZE 43,19
@ 042,253 SAY oLabel9 CAPTION "Cidade" SIZE 48,19
@ 042,277 SAY oLabel10 CAPTION "Estado" SIZE 48,19
@ 043,328 SAY oLabel12 CAPTION "Fone 1" SIZE 47,19
@ 043,352 SAY oLabel14 CAPTION "Fone 2" SIZE 47,19
@ 043,381 SAY oLabel15 CAPTION "Fone 3" SIZE 47,19
@ 048,302 SAY oLabel11 CAPTION "C.E.P." SIZE 42,19
@ 063,405 SAY oLabel17 CAPTION "Fax" SIZE 27,19
@ 267,328 SAY oLabel13 CAPTION "E-Mail" SIZE 44,19
@ 280,353 SAY oLabel16 CAPTION "Site" SIZE 28,19
@ 038,426 SAY oLabel18 CAPTION "Contato" SIZE 52,19
@ 381,427 SAY oLabel19 CAPTION "Prazo Pg." SIZE 66,19
@ 037,452 SAY oLabel20 CAPTION "Produto" SIZE 53,19
@ 038,116 SAY oLabel21 CAPTION "Pessoa" SIZE 52,19
//Gets
@ 99,7 GET oEdit1 VAR vCOD_FORN SIZE 50,24 PICTURE '99999' MAXLENGTH 5 ;
TOOLTIP tip("COD_FORN") ;
VALID { || QuadroForn(vCOD_FORN) }
// Botões
@ 159,5 BUTTON oButton4 CAPTION "&Ok" SIZE 39,30;
TOOLTIP tip("BT_OK_FORN") ;
ON CLICK { || keyb_event(TeclaNull()), QuadroForn(vCOD_FORN),vEditaForn:=.F. } ;
STYLE BS_DEFPUSHBUTTON
@ 494,498 BUTTON oButton2 CAPTION "&Salvar" SIZE 90,30 ;
TOOLTIP tip("BT_OK") ;
ON CLICK { || GravaForn(), vEditaForn:=.t. };
STYLE WS_TABSTOP+WS_DISABLED
@ 590,498 BUTTON oButton5 CAPTION "&Desfazer" SIZE 90,30 ;
TOOLTIP tip("BT_DESFAZ") ;
ON CLICK { || fBotoes("O"), vEditaForn:=.t. };
STYLE WS_TABSTOP
@ 686,498 BUTTON oButton3 CAPTION "S&air" SIZE 90,30 ;
TOOLTIP tip("BT_SAIR") ;
ON CLICK { || iif( Sai_Formulario(), frmCAD_FORN:Close(), "") };
STYLE WS_TABSTOP
@ 679,5 BUTTON oButton1 CAPTION "&Localiza (Alt+B)" SIZE 113,30 ;
STYLE WS_TABSTOP;
ON CLICK {|| BuscaForn(), vEditaForn:=.t. } ;
TOOLTIP "Localiza Registro"
// Gets
@ 427,7 GET oEdit2 VAR vPESSOA SIZE 23,24 ;
PICTURE '!' ;
TOOLTIP tip("FORN_PESSOA")//;
//STYLE WS_DISABLED
@ 99,49 GET oEdit3 VAR vFORNEC SIZE 538,24 PICTURE '@!' ;
TOOLTIP "Entre com o nome do Fornecedor" //;
//STYLE WS_DISABLED
@ 99,76 GET oEdit4 VAR vFANTASIA SIZE 357,24 PICTURE '@!' ;
TOOLTIP "Entre com o Nome Fantasia" //;
// STYLE WS_DISABLED
// TABS
@ 97,110 TAB oPage1 ITEMS {"Fisica","Juridica"} SIZE 693,79 ;
STYLE 0+0+WS_DISABLED
BEGIN PAGE 'Fisica' OF oPage1
@ 86,42 GET oEdit5 VAR vCPF OF oPage1 SIZE 156,24 PICTURE '999.999.999-99' ;
TOOLTIP tip("CPF");
STYLE WS_DISABLED
@ 342,41 GET oEdit6 VAR vRG OF oPage1 SIZE 186,24 ;
TOOLTIP tip("RG");
STYLE WS_DISABLED
@ 33,44 SAY oLabel5 CAPTION "C.P.F." OF oPage1 SIZE 41,19
@ 299,43 SAY oLabel6 CAPTION "R.G." OF oPage1 SIZE 31,19
END PAGE OF oPage1
BEGIN PAGE 'Juridica' OF oPage1
@ 33,44 SAY oLabel22 CAPTION "CNPJ/MF" OF oPage1 SIZE 62,19
@ 100,41 GET oEdit21 VAR vCGC OF oPage1 SIZE 196,24 PICTURE '99.999.999/9999-99' ;
TOOLTIP tip("CGC")
@ 319,44 SAY oLabel23 CAPTION "I.Estadual" OF oPage1 SIZE 68,19
@ 391,41 GET oEdit22 VAR vCGF OF oPage1 SIZE 193,24 ;
TOOLTIP tip("INSC_ESTADUAL")
END PAGE OF oPage1
// Continuação dos Gets
@ 99,197 GET oEdit7 VAR vEND SIZE 538,24 PICTURE '@!' ;
TOOLTIP tip("ENDERECO");
STYLE WS_DISABLED
@ 99,223 GET oEdit8 VAR vBAIRRO SIZE 357,24 PICTURE '@!' ;
TOOLTIP tip("BAIRRO");
STYLE WS_DISABLED
@ 99,248 GET oEdit9 VAR vCIDADE SIZE 357,24 PICTURE '@!' ;
TOOLTIP tip("CIDADE");
STYLE WS_DISABLED
@ 99,273 GET oEdit10 VAR vESTADO SIZE 29,24 ;
STYLE ES_UPPERCASE+WS_DISABLED PICTURE '!!' ;
TOOLTIP tip("ESTADO")
@ 99,298 GET oEdit11 VAR vCEP SIZE 132,24 PICTURE '99999-999' ;
TOOLTIP tip("CEP");
STYLE WS_DISABLED
@ 99,324 GET oEdit12 VAR vFONEA SIZE 142,24 ;
TOOLTIP tip("FONE") + " 1";
STYLE WS_DISABLED
@ 319,323 GET oEdit13 VAR vEMAIL SIZE 334,24 ;
STYLE WS_DISABLED+ES_LOWERCASE PICTURE '@S40' ;
TOOLTIP tip("EMAIL")
@ 99,349 GET oEdit14 VAR vFONEB SIZE 142,24 ;
TOOLTIP tip("FONE") + " 2";
STYLE WS_DISABLED
@ 319,350 GET oEdit16 VAR vSITE SIZE 334,24 ;
STYLE ES_LOWERCASE+WS_DISABLED PICTURE '@S40' ;
TOOLTIP tip("SITE")
@ 99,374 GET oEdit15 VAR vFONEC SIZE 142,24 ;
TOOLTIP tip("FONE") + " 3";
STYLE WS_DISABLED
@ 99,399 GET oEdit17 VAR vFAX SIZE 142,24 ;
TOOLTIP tip("FAX");
STYLE WS_DISABLED
@ 99,424 GET oEdit20 VAR vPROD SIZE 265,24 ;
TOOLTIP "Entre com os produtos deste fornecedor";
STYLE WS_DISABLED
@ 452,423 GET oEdit19 VAR vQUE_PRAZO SIZE 345,24 PICTURE '@S23 999/999/999/999/999/999/999/999/999/999/999/999' ;
TOOLTIP tip("PRAZOS_PAG");
STYLE WS_DISABLED
@ 99,449 GET oEdit18 VAR vCONTATO SIZE 264,24 PICTURE '@!' ;
TOOLTIP tip("CONTATO");
STYLE WS_DISABLED
//CheckBox
@ 428,457 GET CHECKBOX oCheck1 VAR vBLOQFICHA CAPTION "Bloquear Ficha Financeira" SIZE 199,22;
STYLE WS_DISABLED//;
//TOOTIP "Bloqueia a ficha financeira dete Fornecedor"
ACTIVATE DIALOG FRMCAD_FORN
RETURN FRMCAD_FORN:lresult
******************************************************
// Funções de apoio
******************************************************
function QuadroForn(CodigoForn)
LOCAL OPERACAO
keyb_event(255)
if CodigoForn = 0
fBotoes("O")
return(.F.)
endif
if !vEditaForn
vEditaForn := .f.
return(.f.)
endif
fBotoes("I")
vEditaForn := .f.
OPERACAO := 'EDT_FORN'
go top
SET ORDER TO 1
set exact off
seek str(CodigoForn,4)
if !found()
//MSGINFO("Não encontrei")
OPERACAO='CAD_FORN'
select ARQUIVOS
seek "CADFORN"
*** Nao Adiciona contador ***
if !BloqRegArq(.f.)
fBotoes("O")
vEditaForn := .t.
return(.f.)
endif
vCOD_FORN = ULT_COD + 1
oCOD_FORN = vCOD_FORN
unlock
sele CADFORN
DbSetOrder(1)
set exac off
seek str(vCOD_FORN,4)
set exac on
Cria_Var()
oEdit2:ENABLE()
vEditaForn := .f.
else
//MSGINFO("Encontrei")
select CADFORN
//DESTROY_VAR()
Igual_Var()
Refresca()
vEditaForn := .f.
endif
// if OPERACAO<>'CAD_FORN'
// MSGINFO("Encontrei")
// select CADFORN
// DESTROY_VAR()
// Igual_Var()
// Refresca()
// endif
GetkeyState(CHR(255))
RETURN(.T.)
******************************************************
function GravaForn()
// Grava
vCOD_FORN := PEGA_COD()
oCOD_FORN := vCOD_FORN
reglock(.f.)
if OPERACAO='CAD_FORN'
append blank
vCOD_FORN := oCOD_FORN
endif
repl_var()
dbcommit()
unlock
clear gets
fBotoes("O")
if OPERACAO='CAD_FORN'
select ARQUIVOS
reglock(.f.)
Replace ULT_COD With ULT_COD + 1
dbcommit()
Unlock
endif
Select Cadforn
vCOD_FORN := PEGA_COD()
oEdit1:Refresh()
return(nil)
******************************************************
Function PEGA_COD()
select ARQUIVOS
seek "CADFORN"
*** Nao Adiciona contador ***
vCOD_FORN = ULT_COD + 1
select CADFORN
return(vCOD_FORN)
******************************************************
function fEnter()
QuadroForn(vCOD_FORN)
return(.t.)
******************************************************
function BuscaForn()
local vBsc
vBsc := grid("COD_FORN","FORNEC", 2)
//MSGINFO(STR(vBsc))
vCOD_FORN := vBsc
fBotoes("O")
Refresca()
oEdit1:SETFOCUS()
return(.t.)
******************************************************
function Refresca()
// Faz o refresh dos campos
//oEdit1:refresh()
oEdit2:refresh()
oEdit3:refresh()
oEdit4:refresh()
oEdit5:refresh()
oEdit6:refresh()
oEdit7:refresh()
oEdit8:refresh()
oEdit9:refresh()
oEdit10:refresh()
oEdit11:refresh()
oEdit13:refresh()
oEdit12:refresh()
oEdit14:refresh()
oEdit16:refresh()
oEdit15:refresh()
oEdit17:refresh()
oEdit19:refresh()
oEdit20:refresh()
oEdit18:refresh()
oEdit1:setfocus()
// if vPESSOA = "J"
// oPage1:JURIDICA:SetFocus()
// else
// oPage1:FISICA:SetFocus()
// endif
return(.t.)
******************************************************
function fBotoes(tipo)
// Manipula os botões
// habilitando e desabilitando
Tipo := upper(Tipo)
if upper(tipo) = "I"
oButton4:Disable() // Ok
oButton2:Enable() // Salvar
oButton5:Enable() // Desfazer
oEdit2:Disable()
oEdit1:Disable()
oEdit3:Enable()
oEdit4:Enable()
oEdit5:Enable()
oEdit6:Enable()
oEdit7:Enable()
oEdit8:Enable()
oEdit9:Enable()
oEdit10:Enable()
oEdit11:Enable()
oEdit13:Enable()
oEdit12:Enable()
oEdit14:Enable()
oEdit16:Enable()
oEdit15:Enable()
oEdit17:Enable()
oEdit19:Enable()
oEdit20:Enable()
oEdit18:Enable()
oPage1:Enable()
oEdit3:setfocus()
else
oButton4:Enable() // Ok
oButton2:Disable() // Salvar
oButton5:Disable() // Desfazer
oEdit1:Enable()
oEdit2:Disable()
oEdit3:Disable()
oEdit4:Disable()
oEdit5:Disable()
oEdit6:Disable()
oEdit7:Disable()
oEdit8:Disable()
oEdit9:Disable()
oEdit10:Disable()
oEdit11:Disable()
oEdit13:Disable()
oEdit12:Disable()
oEdit14:Disable()
oEdit16:Disable()
oEdit15:Disable()
oEdit17:Disable()
oEdit19:Disable()
oEdit20:Disable()
oEdit18:Disable()
oPage1:Disable()
oEdit1:setfocus()
oEdit2:setfocus()
vCOD_FORN := PEGA_COD()
Refresca()
endif
return(nil)
Álvaro de Oliveira Bernardi
Microline Software
Porto Velho - RO
Microline Software
Porto Velho - RO
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: Retendo a ultima tecla pressionada
Para pegar os numeros das teclas compile o exemplo "BROWSE_3.PRG" que se encontra na pasta "SAMPLES\BROWSE". Para enviar a tecla use:
KEYB_EVENT(vNUMERO_TECLA)
Para pegar a tecla preesciona use:
KEYB_EVENT(vNUMERO_TECLA)
Para pegar a tecla preesciona use:
Código: Selecionar todos
#include "windows.ch"
if getkeystate(VK_F4,.F.,.T.) < 0
msginfo("prescionou F4")
ENDIF
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
marcos.gurupi
- Usuário Nível 4

- Mensagens: 939
- Registrado em: 06 Jul 2004 11:53
- Localização: Gurupi-TO
Re: Retendo a ultima tecla pressionada
Como sei c o usuario pressionou ENTER? Ou seja, com ESC podemos usar:
if getkeystate(VK_ESCAPE)<0
...
ENDIF
Mas e o ENTER. No velho clipper era o lastkey()=13 mas como faco na hwgui?
Marcos Roberto
if getkeystate(VK_ESCAPE)<0
...
ENDIF
Mas e o ENTER. No velho clipper era o lastkey()=13 mas como faco na hwgui?
Marcos Roberto
Marcos Roberto
NetService Software
NetService Software
Re: Retendo a ultima tecla pressionada
Marcos, ja tentou:
OBS: estou tentando postar esta resposta desde das 14h, estou com muita dificuldade em acessar o Forum.
Ate+
Código: Selecionar todos
keyb_event(13) ou keyb_event(VK_RETURN)
OBS: estou tentando postar esta resposta desde das 14h, estou com muita dificuldade em acessar o Forum.
Ate+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
