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.