Página 1 de 1

clique no browse

Enviado: 24 Dez 2023 17:56
por JoséQuintas

Código: Selecionar todos

FUNCTION gui_Browse( xDlg, xControl, nRow, nCol, nWidth, nHeight, oTbrowse, cField, xValue, workarea )

   LOCAL aItem

   @ nCol, nRow BROWSE xControl DATABASE SIZE nWidth, nHeight STYLE WS_BORDER + WS_VSCROLL + WS_HSCROLL

   FOR EACH aItem IN oTBrowse
      ADD COLUMN { || Transform( FieldGet( FieldNum( aItem[2] ) ), aItem[3] ) } TO xControl ;
         HEADER aItem[1] ;
         LENGTH Max( Len( aItem[1] ), Len( Transform( FieldGet( FieldNum( aItem[2] ) ), aItem[3] ) ) ) ;
         JUSTIFY LINE DT_LEFT
   NEXT

   xControl:bOther := { |xControl, msg, wParam, lParam| gui_BrowseKeyDown( xControl, msg, wParam, lParam, cField, @xValue ) }

   (xDlg); (workarea)

   RETURN Nil

STATIC FUNCTION gui_BrowseKeyDown( xControl, msg, wParam, lParam, cField, xValue )

   LOCAL nKEY

   IF msg == WM_KEYDOWN
      nKey := hwg_PtrToUlong( wParam )
      IF nKey = VK_RETURN
         IF ! Empty( cField )
            xValue := FieldGet( FieldNum( cField, xValue ) )
         ENDIF
         hwg_EndDialog()
      ENDIF
   ENDIF
   (xControl)
   (lParam)

   RETURN .T.
ENTER ok, agora como fazer funcionar com clique do mouse.

clique no browse

Enviado: 24 Dez 2023 20:24
por alxsts
Olá!
@ <x>,<y> BROWSE <oBrowse>
[ ARRAY ]
[ DATABASE ] && Default
[ OF <oWnd> ];
[ ID <nId> ]
[ SIZE <width>, <height> ]
[ ON INIT <bInit> ]
[ ON SIZE <bSize> ]
[ ON PAINT <bDraw> ]
[ ON CLICK <bClick> ]
[ ON RIGHTCLICK <bRClick> ]
[ ON GETFOCUS <bGetFocus> ]
[ ON LOSTFOCUS <bLostFocus> ]
[ STYLE <nStyle> ]
[ <lNoVScr: NO VSCROLL> ]
[ <lNoBord: NO BORDER> ]
[ FONT <oFont> ]
[ APPEND ]
[ AUTOEDIT ]
[ ON UPDATE <bUpdate> ]
[ ON KEYDOWN <bKeyDown> ]
[ ON POSCHANGE <bPosChg> ]
[ MULTISELECT ]
É só associar codeblocks às propriedades bClick e bRClick...

clique no browse

Enviado: 28 Dez 2023 18:16
por JoséQuintas
Não sei qual o codeblock correto, pelo menos este de bOther não serviu.
Em bOther funciona o ENTER.

Código: Selecionar todos

FUNCTION gui_Browse( xDlg, xControl, nRow, nCol, nWidth, nHeight, oTbrowse, cField, xValue, workarea )

   LOCAL aItem

   @ nCol, nRow BROWSE xControl DATABASE SIZE nWidth, nHeight STYLE WS_BORDER + WS_VSCROLL + WS_HSCROLL

   FOR EACH aItem IN oTBrowse
      ADD COLUMN { || Transform( FieldGet( FieldNum( aItem[2] ) ), aItem[3] ) } TO xControl ;
         HEADER aItem[1] ;
         LENGTH Max( Len( aItem[1] ), Len( Transform( FieldGet( FieldNum( aItem[2] ) ), aItem[3] ) ) ) ;
         JUSTIFY LINE DT_LEFT
   NEXT

   xControl:bOther := { |xControl, msg, wParam, lParam| gui_BrowseKeyDown( xControl, msg, wParam, lParam, cField, @xValue ) }

   (xDlg); (workarea)

   RETURN Nil

STATIC FUNCTION gui_BrowseKeyDown( xControl, msg, wParam, lParam, cField, xValue )

   LOCAL nKEY

   IF msg == WM_KEYDOWN
      nKey := hwg_PtrToUlong( wParam )
      IF nKey = VK_RETURN
         IF ! Empty( cField )
            xValue := FieldGet( FieldNum( cField, xValue ) )
         ENDIF
         hwg_EndDialog()
      ENDIF
   ENDIF
   (xControl)
   (lParam)

   RETURN .T.

clique no browse

Enviado: 04 Mar 2024 16:22
por JoséQuintas
Tinha deixado de lado, agora voltei nele.

Três meses depois, o click no browse ainda não funciona.

HWGUI versão atual.

ON CLICK não resolveu - consta no doc
bClick não resolveu - consta no doc apenas como parâmetro
bEnter não resolveu - consta no fonte como método pra browse

clique no browse

Enviado: 04 Mar 2024 16:58
por JoséQuintas
Para keydown, não precisa bOther.

Ficou chatinho, mas funcionou.

Código: Selecionar todos

      aKeyCodeList:= { { VK_RETURN, { || gui_BrowseEnter( cField, @xValue, xDlg, xControl ) } } }
...
   xControl:bKeyDown := { | o, k, nPos | nKey := k, ;
                          nPos := hb_ASCan( aKeyCodeList, { | e | e[1] == nkey } ), ;
                          Eval( iif( nPos == 0, {||Nil}, aKeyCodeList[ nPos, 2] ) ), ;
                          (o), (nKey) }
Num uso pra valer, com certeza não usaria isso.
E ainda precisa declarar LOCAL que não fiz.

Ainda pendente o click do mouse.

clique no browse

Enviado: 04 Mar 2024 17:55
por Fernando queiroz
uso assim

Código: Selecionar todos

@ 2,30 BROWSE oBrowse1 ARRAY  OF oPage1  SIZE 1018,420 STYLE WS_BORDER + WS_VSCROLL + WS_HSCROLL ;
								ON CLICK {|| ::nProdutos_Id:=LTRIM(str(oDlg:oPage1:oBrowse1:aArray[ oDlg:oPage1:oBrowse1:nCurrent, 1])) ,  ::MANUTENCAO( "ALTERAR" ) , oDlg:oPage1:oBrowse1:aArray := ::MANUTENCAO_CARREGA( "ORDER BY " + cAlvo_Consulta ), oPage1:obrowse1:REFRESH()};
								ON KEYDOWN { | oBrowse1, nKeyPress | ::MANUTENCAO_onKeyDown( oDlg, oBrowse1, nKeyPress,  @cProgressKey ) };
								ON POSCHANGE {|| if(empty(oBrowse1:aArray), ,::nProdutos_Id:=LTRIM(str(oDlg:oPage1:oBrowse1:aArray[ oDlg:oPage1:oBrowse1:nCurrent, 1]))) }

clique no browse

Enviado: 04 Mar 2024 19:16
por JoséQuintas
À primeira vista, com array ou ADO funciona, com DBF não.
Fiz um teste com ADO e funcionou.

clique no browse

Enviado: 04 Mar 2024 20:02
por JoséQuintas
Coloquei hwg_MsgInfo() em tudo que é lugar, até mesmo na rotina de eventos do hbrowse, na parte de mouse e tecla.
Não aparece nunca.

Alguém por aí tem browse de dbf onde funciona o click no browse ?
Quero saber se alguém usa e funciona, com hwgui 2.23
Aqui esgotaram-se as tentativas.

clique no browse

Enviado: 06 Mar 2024 18:43
por alxsts
Olá!
JoséQuintas escreveu:Quero saber se alguém usa e funciona, com hwgui 2.23
O Fernando postou acima o código que ele usa e informa que usa a verão 2.23. Deve funcionar para ele...

Teste especificando o alias no controle browse:

Código: Selecionar todos

xControl:alias := <nome do alias>

clique no browse

Enviado: 06 Mar 2024 19:08
por JoséQuintas
Desculpem, nenhum teste atual foi válido.
Tinha alterado o projeto pra lib, pra outros testes.
O EXE que eu estava executando não era atualizado.

Agora arrumar a bagunça, por conta de várias alterações sem teste válido.

clique no browse

Enviado: 13 Mar 2024 14:49
por JoséQuintas
Só pra finalizar o post., ficou assim:

Código: Selecionar todos

   @ nCol, nRow BROWSE xControl DATABASE SIZE nWidth, nHeight STYLE WS_BORDER + WS_VSCROLL + WS_HSCROLL ;
   ON CLICK { |...| gui_browseenter( @cField, @xValue, @xDlg, @xControl ), .F. }
...
   xControl:bKeyDown := { | o, nKey | (o), ;
      gui_browsekeydown( xControl, xDlg, nKey, cField, workarea, xvalue, aKeyCodeList ) }