Retendo a ultima tecla pressionada

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

alvaro.bernardi
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 22 Nov 2008 11:02
Localização: Porto Velho

Retendo a ultima tecla pressionada

Mensagem por alvaro.bernardi »

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?
Álvaro de Oliveira Bernardi
Microline Software
Porto Velho - RO
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Re: Retendo a ultima tecla pressionada

Mensagem por ANDRIL »

Tente usar :

Código: Selecionar todos

keyb_event(255)
Ate+,
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
alvaro.bernardi
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 22 Nov 2008 11:02
Localização: Porto Velho

Re: Retendo a ultima tecla pressionada

Mensagem por alvaro.bernardi »

Nada...

não funcionou.....
Álvaro de Oliveira Bernardi
Microline Software
Porto Velho - RO
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Re: Retendo a ultima tecla pressionada

Mensagem por ANDRIL »

Poste um trecho do código para que possamos verificar, em suma, o comando informado deveria ter solucionado o problema.

Ate+,
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
alvaro.bernardi
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 22 Nov 2008 11:02
Localização: Porto Velho

Re: Retendo a ultima tecla pressionada

Mensagem por alvaro.bernardi »

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

Re: Retendo a ultima tecla pressionada

Mensagem por sygecom »

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:

Código: Selecionar todos

#include "windows.ch"
if getkeystate(VK_F4,.F.,.T.) < 0
   msginfo("prescionou F4")
ENDIF
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Re: Retendo a ultima tecla pressionada

Mensagem por marcos.gurupi »

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
Marcos Roberto
NetService Software
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Re: Retendo a ultima tecla pressionada

Mensagem por ANDRIL »

Marcos, ja tentou:

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
Responder