Página 1 de 1

Duplo clique na linha do Browse??

Enviado: 26 Mai 2008 11:04
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

Re: Duplo clique na linha do Browse??

Enviado: 26 Mai 2008 11:23
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.

Re: Duplo clique na linha do Browse??

Enviado: 26 Mai 2008 11:55
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

Re: Duplo clique na linha do Browse??

Enviado: 26 Mai 2008 12:12
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 !

Duplo clique na linha do Browse??

Enviado: 26 Fev 2025 21:17
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.

Duplo clique na linha do Browse??

Enviado: 26 Fev 2025 22:51
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

Duplo clique na linha do Browse??

Enviado: 28 Fev 2025 11:14
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.

Duplo clique na linha do Browse??

Enviado: 28 Fev 2025 12:00
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.