Duplo clique na linha do Browse??

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Cezar
Usuário Nível 3
Usuário Nível 3
Mensagens: 189
Registrado em: 27 Mai 2006 14:03

Duplo clique na linha do Browse??

Mensagem por Cezar »

Bom dia,

Como pego o duplo click do mouse numa linha do browse??

Exemplo:
ON CLICK {|o,key| OnClick(o,key) }

function Onclick( Brow, key )

Key = ??????


Grato
v_cez@yahoo.com.br
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Duplo clique na linha do Browse??

Mensagem por sygecom »

Exemplo abaixo:

@ 10,40 BROWSE oBrw DATABASE OF oFrm SIZE GETDESKTOPWIDTH()-30, GETDESKTOPHEIGHT()-250 ;
STYLE WS_VSCROLL + WS_HSCROLL;
ON CLICK {|o,key| BrowseKey9_Cli(o, key ) }

***************************************
FUNCTION BrowseKey9_Cli( oBrowse, key )
***************************************
DO CASE
CASE KEY= VK_ESCAPE
EndDialog()
return .f.
CASE KEY = 1 // CLIK DO MOUSE NAO ACHEI A DEFINE?
Busca_Boleto_CLI() // CHAMA MINHA FUNÇÃO
CASE KEY = VK_F1
Sobre()
CASE KEY = VK_F5
Gera_Excel(oBrowse)
CASE KEY = VK_F9
ShellExecute("calc")
OTHERWISE
ENDCASE
Return .T.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Cezar
Usuário Nível 3
Usuário Nível 3
Mensagens: 189
Registrado em: 27 Mai 2006 14:03

Re: Duplo clique na linha do Browse??

Mensagem por Cezar »

Ola Sygecom,

Estive olhando o hBrowse encontrei:
VK_LBUTTONDBLCLK
no Window.ch :
#define VK_LBUTTONDBKCLK 515

mas na browse_key( o, key )
o MsgInfo( str(key,4) ) mostra resultado 2 ...

Não sei o que acontece??

v_cez@yahoo.com.br
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Duplo clique na linha do Browse??

Mensagem por sygecom »

Cesar, eu já tinha visto esse Define, porem nunca entendi bem pq ele não fecha em Browse, por isso uso conforme coloquei acima !
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Duplo clique na linha do Browse??

Mensagem por Itamar M. Lins Jr. »

Olá!
É WM, não VK.

Código: Selecionar todos

...
oBrw:bOther:= {|oBrw, msg, wParam, lParam| fKeyDown(oBrw, msg, wParam, lParam, oTab, cAlias)}

FUNCTION fKeyDown(oBrw, msg, wParam, lParam, oTab, cAlias)
LOCAL nKey := hwg_PtrToUlong( wParam ) //wParam

IF msg == WM_KEYDOWN 
   IF nKey = VK_ESCAPE
    etc...
ENDIF

IF msg = WM_LBUTTONDBLCLK //WM_LBUTTONDOWN  1 clique na linha ou 2 cliques para executar.
   DocVer(cALias)
ENDIF  
 
IF msg == WM_CHAR
   IF chr(nKey) ... etc.
 
ENDIF

Return .T. //Aqui se retornar .F. Cancela a tecla(ação) em questão. Pode colocar onde desejar para cancelar.(Return(.f.))

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Duplo clique na linha do Browse??

Mensagem por JoséQuintas »

É VK mesmo e não WM.

WM são mensagens da API Windows, usadas no bOther, que foge do normal.
VK é teclado mesmo

Cheguei a registrar log desses eventos na WVG pra procurar pipino.

Código: Selecionar todos

//STATIC FUNCTION WriteLogWndProc( nEvent, cWhere, nControlID )
//
//   LOCAL xEvent := "Unknown", xLogFile := "HB_OUT.LOG", xText, hFileOutput
//
//   nControlId := iif( HB_ISNUMERIC( nControlId ), nControlId, -1 )
//
//   DO CASE
//   CASE .T.  ; RETURN NIL // remove when need debug
//   CASE nEvent == 0 /* WM_NULL */ ;      /*   0 */ xEvent := "WM_NULL"
//   CASE nEvent == WM_CREATE ;            /*   1 */ xEvent := "WM_CREATE"
//   CASE nEvent == WM_DESTROY ;           /*   2 */ xEvent := "WM_DESTROY"
//   CASE nEvent == WM_MOVE ;              /*   3 */ xEvent := "WM_MOVE "
//   CASE nEvent == WM_SIZE ;              /*   5 */ xEvent := "WM_SIZE"
//   CASE nEVent == WM_ACTIVATE ;          /*   6 */ xEvent := "WM_ACTIVATE"
//   CASE nEvent == WM_SETFOCUS ;          /*   7 */ xEvent := "WM_SETFOCUS"
//   CASE nEvent == WM_KILLFOCUS ;         /*   8 */ xEvent := "WM_KILLFOCUS"
//   CASE nEvent == WM_ENABLE ;            /*  10 */ RETURN NIL // xEvent := "WM_ENABLE"
//   CASE nEvent == WM_SETREDRAW ;         /*  11 */ xEvent := "WM_SETREDRAW"
//   CASE nEvent == WM_SETTEXT ;           /*  12 */ RETURN NIL // xEvent := "WM_SETTEXT"
//   CASE nEVent == WM_GETTEXT ;           /*  13 */ xEvent := "WM_GETTEXT"
//   CASE nEvent == WM_GETTEXTLENGTH ;     /*  14 */ xEvent := "WM_GETTEXTLENGTH"
//   CASE nEvent == WM_PAINT ;             /*  15 */ xEvent := "WM_PAINT"
//   CASE nEvent == WM_CLOSE ;             /*  16 */ xEvent := "WM_CLOSE"       // On Trackbar value changed
//   CASE nEvent == WM_QUERYENDSESSION ;   /*  17 */ xEvent := "WM_QUERYENDSESSION"
//   CASE nEvent == WM_ERASEBKGND ;        /*  20 */ xEvent := "WM_ERASEBKGND"
//   CASE nEvent == 25 /* WM_CTLCOLOR */ ; /*  25 */ xEvent := "WM_CTLCOLOR"
//   CASE nEvent == WM_SETFONT ;           /*  48 */ xEvent := "WM_SETFONT"
//   CASE nEvent == WM_GETFONT ;           /*  49 */ xEvent := "WM_GETFONT"
//   CASE nEvent == WM_NOTIFY ;            /*  78 */ xEvent := "WM_NOTIFY"
//   CASE nEvent == WM_GETICON ;           /* 127 */ xEvent := "WM_GETICON"
//   CASE nEvent == WM_SETICON ;           /* 128 */ xEvent := "WM_SETICON"
//   CASE nEvent == WM_COMMAND ;           /* 273 */ xEvent := "WM_COMMAND"
//   OTHERWISE
//   ENDCASE
//   xText := Time() + " " + cWhere + " " + Str( nControlId, 6 ) + " " + Str( nEvent, 6 ) + " " + xEvent
//   IF ! File( xLogFile )
//      hFileOutput := fCreate( xLogFile, FC_NORMAL )
//      fClose( hFileOutput )
//   ENDIF
//   hFileOutput := fOpen( xLogFile, FO_READWRITE )
//   fSeek( hFileOutput, 0, FS_END )
//   fWrite( hFileOutput, xText + HB_EOL() )
//   fClose( hFileOutput )
//
//   RETURN NIL
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Duplo clique na linha do Browse??

Mensagem por Itamar M. Lins Jr. »

Olá!
Pois é ! É WM, não VK. Na Hwgui não tem.

oBrw:bOther:= {|oBrw, msg, wParam, lParam| fKeyDown(oBrw, msg, wParam, lParam, oTab, cAlias)}

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Duplo clique na linha do Browse??

Mensagem por JoséQuintas »

bOther trata diretamente os eventos do Windows.
bKeyDown trata teclas, e acho que mouse fica de fora.

Código: Selecionar todos

METHOD onEvent( msg, wParam, lParam )  CLASS HBrowse

   LOCAL nPos, iParHigh, iParLow, nRet

   //hwg_WriteLog( "Brw: " + Str(msg,6) +" "+Str(hwg_PtrToUlong(wParam),10)+" "+Str(hwg_PtrToUlong(lParam),10) )
   IF ::active .AND. !Empty( ::aColumns )

       IF ::bOther != NIL
         IF ValType( nRet := Eval( ::bOther, Self, msg, wParam, lParam ) ) != "N"
            nRet := iif( ValType( nRet ) = "L" .AND. ! nRet, 0, - 1 )
         ENDIF
         IF nRet >= 0
            RETURN - 1
         ENDIF
      ENDIF
...
      ELSEIF msg == WM_KEYDOWN
         wParam := hwg_PtrToUlong( wParam )
         IF ::bKeyDown != Nil
            IF !Eval( ::bKeyDown, Self, wParam )
               RETURN 1
            ENDIF
         ENDIF
...
      ELSEIF msg == WM_LBUTTONDBLCLK // <<<====
         ::ButtonDbl( lParam )
Por default hwgui usa pra outra coisa.

Tá bom de mudar isso.
Fivewin criou bKeyChar, além do bKeyDown, não reparei se é pra tratamento total, mas poderíamos criar bInkey no padrão harbour.
Criando como extra, não atrapalha compatibilidade.

O problema de lib windows pra harbour é que fica pedindo benção ao Windows pra tudo.
HWGUI, que também é Linux, poderia fugir dessa regra.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder