Página 1 de 1

Cláusula ON CLICK não me devolve valor nenhum

Enviado: 12 Mai 2010 18:33
por alaminojunior
Caros, preciso de ajuda no seguinte:
Tenho esta rotina de browse com hwgui, para seleção de município, caso o municipio digitado não seja encontrado na tabela.
Até funciona, mas eu gostaria que na chamada da função "encontrou(...)" fosse passado algum valor de clique de mouse ou tecla, para que outras rotinas possam ser disparadas.
Se eu dou duplo clique ou teclo ENTER, o registro é selecionado, e a rotina transcorre normalmente. Mas eu gostaria de implementar outras rotinas dependendo do evento do mouse ou teclado. E para isso eu preciso identificar o que ocorreu com os mesmos.
O "X" da questão está na função _browse() justamente na cláusula ON CLICK.

Código: Selecionar todos

#include "hwgui.ch"
#include "windows.ch"

FUNCTION browse( p1 )
private b1:= select()
abnfe1()
select cdnfe000
ordsetfocus("indnfe05")
if dbseek(p1)
   c9 = sigla_uf
   close cdnfe000
   select(b1)
   return .t.
endif
RETURN _browse()

FUNCTION _browse
 PRIVATE oBrowse1, oBrowse, key

  INIT DIALOG oDlg TITLE "Selecione o município desejado" ;
    AT 475,151 SIZE 529,394 ;
        FONT HFont():Add( 'Arial',0,-13,400,,,) CLIPPER  NOEXIT  ;
     STYLE WS_POPUP+WS_CAPTION+WS_SYSMENU+WS_SIZEBOX+DS_CENTER 

   @ 50,40 BROWSE oBrowse1 DATABASE SIZE 360,310 ;
        STYLE WS_VSCROLL + WS_HSCROLL;
        ON CLICK {|o,key| encontrou(o,key)} // Aqui eu esperava que enviasse algum valor, mas não envia.
 

     oBrowse1:AddColumn( HColumn():New( "MUNICÍPIO", FieldBlock(Fieldname(5)),"C", 30,00) )
     oBrowse1:AddColumn( HColumn():New( "SIGLA UF" , FieldBlock(Fieldname(3)),"C", 02,00) )		        

     oBrowse1:aColumns[1]:length := 30          
     oBrowse1:aColumns[2]:length := 02          
     
     oBrowse1:aColumns[1]:nJusHead := DT_CENTER  
     oBrowse1:aColumns[2]:nJusHead := DT_CENTER

   ACTIVATE DIALOG oDlg 

RETURN oDlg:lresult

FUNCTION encontrou( oBrowse, key )
msginfo(oBrowse) // AQUI CHEGA SEM VALOR, MAS COM TIPO O
msginfo(key) // AQUI CHEGA SEM VALOR, MAS COM TIPO N
c8 = hb_ansitooem(upper(nome_mun))
c9 = sigla_uf
EndDialog()
close cdnfe000
select(b1)
return .t.
Desculpem a falta de jeito, mas eu estou cozinhando essa HwGui em fogo baixo.

Re: Cláusula ON CLICK não me devolve valor nenhum

Enviado: 12 Mai 2010 19:02
por sygecom
Não tinha vindo aqui e lhe respondi seu e-mail, mas para não ficar a duvida aqui no fórum vou postar a minha resposta para você:
Na verdade para poder ver o que está retornando em msginfo() você tem que usar:
msginfo(valtoprg(oBrowse)) //vai retornar todas propriedades filhas da classe browse
msginfo(valtoprg(key)) //vai retornar o numero da tecla preecionada

Ou seja seu exemplo não vai retornar o que está querendo buscar no Browse(), então mudei sei codigo para retornar o que você deseja, olhe como ficou abaixo, onde mudei coloquei alguns comentarios //:

Código: Selecionar todos

#include "hwgui.ch"
//#include "windows.ch"  // não precisa a hwgui.ch já chama ela automaticamente

FUNCTION browse( p1 )
Local nRECNO:=0
private b1:= select()
abnfe1()
select cdnfe000
ordsetfocus("indnfe05")
if dbseek(p1)
   c9 = sigla_uf
   close cdnfe000
   select(b1)
   return .t.
endif
_browse()
c8 = hb_ansitooem(upper(nome_mun)) // nome da cidade
c9 = sigla_uf                      // uf da cidade
/*
*ou ainda poderia pegar o retorno do recno que o _browse() está retornando ai ficaria assim:
SELECT cdnfe000
DbGoto(nRECNO)
IF EOF()
   alert('Não achou o registro')
   close cdnfe000
   select(b1)
   return .t.
ENDIF
c8 = hb_ansitooem(upper(nome_mun)) // nome da cidade
c9 = sigla_uf                      // uf da cidade

*/

RETURN

FUNCTION _browse
 PRIVATE oBrowse1  // esses dois não precisa -->, oBrowse, key

   INIT DIALOG oDlg TITLE "Selecione o município desejado" ;
   AT 475,151 SIZE 529,394 ;
   FONT HFont():Add( 'Arial',0,-13,400,,,) CLIPPER  NOEXIT  ;
   STYLE WS_POPUP+WS_CAPTION+WS_SYSMENU+WS_SIZEBOX+DS_CENTER

   @ 50,40 BROWSE oBrowse1 DATABASE SIZE 360,310 ;
   STYLE WS_VSCROLL + WS_HSCROLL;
   ON CLICK {|o,key| EndDialog() } // Esse ON CLICK serve para capturar o dois clique do mouse

   oBrowse1:alias := 'cdnfe000'  //funciona sem esse, mas se tiver dois browse com dbf diferente aberto isso ajuda os browse a saber qual o alias do dbf dele

   oBrowse1:bKeyDown := {|o,key| encontrou(o, key ) } //navegação das teclas

     oBrowse1:AddColumn( HColumn():New( "MUNICÍPIO", FieldBlock(Fieldname(5)),"C", 30,00) )
     oBrowse1:AddColumn( HColumn():New( "SIGLA UF" , FieldBlock(Fieldname(3)),"C", 02,00) )

     oBrowse1:aColumns[1]:length := 30
     oBrowse1:aColumns[2]:length := 02

     oBrowse1:aColumns[1]:nJusHead := DT_CENTER
     oBrowse1:aColumns[2]:nJusHead := DT_CENTER

   ACTIVATE DIALOG oDlg

RETURN(oBrowse1:nCurrent) //Aqui está retornando o RECNO do ponteiro

STATIC FUNCTION encontrou( oBrowse, key )
DO CASE
   CASE KEY= VK_ESCAPE // tecla esq
        EndDialog()
   CASE KEY = VK_RETURN // tecla enter
        EndDialog()
   CASE KEY = 1  //dois clique do mouse
        EndDialog()
   CASE KEY = VK_F1  //F1
        //Sobre()
   CASE KEY = VK_F2
        //BUSCA_NOME(oBrowse)
   CASE KEY = VK_F4
        //Lista_ordem(oBrowse)
   CASE KEY = VK_F5
        //Gera_Excel(oBrowse)
   CASE KEY = VK_F9
        ShellExecute("calc")
   otherwise
ENDCASE
Return .T.
/*
FUNCTION encontrou( oBrowse, key )
//msginfo(valtoprg(oBrowse)) //vai retornar todas propriedades filhas da classe browse
//msginfo(valtoprg(key))  //vai retornar o numero da tecla preecionada
c8 = hb_ansitooem(upper(nome_mun))
c9 = sigla_uf
EndDialog()
close cdnfe000
select(b1)
return .t.
*/


Re: Cláusula ON CLICK não me devolve valor nenhum

Enviado: 13 Mai 2010 10:28
por alaminojunior
Com as alterações, deu certinho para o que eu precisava.
Devido ao pouco tempo (como falta tempo, não !?) nem me dei ao luxo de querer entender o quê exatamente cada linha significa, mas assim que resolver uma pendência aqui, volto a debruçar aobre a questão.
Obrigado mais uma vez.

Re: Cláusula ON CLICK não me devolve valor nenhum

Enviado: 13 Mai 2010 11:48
por sygecom
Tranquilo, faz parte...qualquer coisa prende o grito.