Página 1 de 1

BO em browse

Enviado: 17 Ago 2023 15:10
por JoséQuintas
Problema estranho no browse.
ENTER logo que entra não funciona, só funciona se primeiro movimentar cursor.

BO em browse

Enviado: 17 Ago 2023 17:00
por JoséQuintas
Aqui fica em observação, porque o problema de atualização pode ser do hedit, e não do browse.

BO em browse

Enviado: 18 Ago 2023 08:25
por Fernando queiroz
quintas eu ja tinha relatado isso antes, a primeira tecla nunca funciona , mas da segunda em diante funciona normalmente

tenta setando o focus para o browse oDlg:oPage1:oBrowse1:SetFocus()

BO em browse

Enviado: 18 Ago 2023 09:22
por JoséQuintas
Fernando queiroz escreveu:quintas eu ja tinha relatado isso antes, a primeira tecla nunca funciona , mas da segunda em diante funciona normalmente
É pior que isso.
A tecla funciona, o resultado é que não funciona.
Mas em observação, porque o BO do EDIT acaba confundindo o resultado.

Fiz um browse simples.
O resultado do browse é atualizar o edit.
Como o edit está enfrentando problemas, por enquanto não dá pra saber mais do browse kkkkk

BO em browse

Enviado: 18 Ago 2023 10:47
por JoséQuintas
Meu browse é simples mesmo:
Passo o nome do campo e uma variável de valor para o browse
Se ela retornar com valor, atualizo o textbox

Código: Selecionar todos

   DialogBrowse( oTBrowse, cTable, cField, @xValue )

   IF ! Empty( xValue ) .AND. ! Empty( xControl )
      gui_SetTextValue( xDlg, xControl, xValue )
   ENDIF
No ENTER do browse atualiza essa varável

Código: Selecionar todos

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

   LOCAL nKEY

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

   RETURN .T.
Da vez anterior, ENTER logo de cara no browse saía do browse, mas o campo não era atualizado.
Só atualizava o campo se usasse setas primeiro, antes do ENTER.
Mas se ENTER saía do browse, então a tecla não estava se perdendo, e nada fez sentido.
Mas com o problema do EDIT, agora nada atualiza, não tenho mais referência sobre isso, por enquanto.

BO em browse

Enviado: 18 Ago 2023 13:42
por JoséQuintas
Ferrou.

Código: Selecionar todos

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

   LOCAL nKEY

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

   RETURN .T.
Sim, a primeira tecla não faz efeito, parece ser o ponto de partida do browse funcionar.

Tá lá no fonte, ENTER mostra mensagem e sai do browse.
ENTER logo que abre o browse sai do browse sem mostrar mensagem.

Faz sentido isso ?
Então como explicar sair do browse com ENTER ?

BO em browse

Enviado: 18 Ago 2023 13:51
por Itamar M. Lins Jr.
Olá!
Não achei essa função no hbrowse.prg

Saudações,
Itamar M. Lins Jr.

BO em browse

Enviado: 18 Ago 2023 13:54
por JoséQuintas
Chamando aqui:

Código: Selecionar todos

   xControl:bOther := { |xControl, msg, wParam, lParam| fKeyDown( xControl, msg, wParam, lParam, cField, @xValue ) }
Volte na anterior que editei um pouco sobre o comportamento.

BO em browse

Enviado: 18 Ago 2023 14:01
por Itamar M. Lins Jr.
Olá!

Código: Selecionar todos

@ 005,230 Browse oBrwEL DataBase of oDlg Size 1220,240 Style WS_VSCROLL + WS_HSCROLL ;
    On UPDATE {|oBrwEL, nColPos| BrwELUpdate(oBrwEL, nColPos, oDlg, cCodCliente, cCliente) } ;
    APPEND AUTOEDIT ON RIGHTCLICK {|This,nLine,nCol| MarcarObra(This,nLine,nCol,oBrwEL) } 
Veja se tem AUTOEDIT e APPEND.
Eu uso BrowseEx da pasta\contrib

Saudações,
Itamar M. Lins Jr.

BO em browse

Enviado: 18 Ago 2023 14:02
por JoséQuintas
Talvez sirva de pista:

Código: Selecionar todos

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

   LOCAL nKEY

   hwg_MsgInfo( "rotina fkeydown" )
   IF msg == WM_KEYDOWN
      nKey := hwg_PtrToUlong( wParam ) //wParam
keydown.png
Está executando antes mesmo de abrir o browse, executa 4 vezes antes de abrir o browse.

BO em browse

Enviado: 18 Ago 2023 14:06
por JoséQuintas
Itamar M. Lins Jr. escreveu:Veja se tem AUTOEDIT e APPEND.
Eu uso BrowseEx da pasta\contrib
Não. é browse de principiante bem pelado.

Código: Selecionar todos

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

   LOCAL aItem

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

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

   FOR EACH aItem IN oTBrowse
      ADD COLUMN aItem[2] TO xControl HEADER aItem[1] LENGTH Len( Eval( aItem[2] ) ) JUSTIFY LINE DT_LEFT
   NEXT
   (xDlg)

   RETURN Nil

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

   LOCAL nKEY

   hwg_MsgInfo( "rotina fkeydown" )
   IF msg == WM_KEYDOWN
      nKey := hwg_PtrToUlong( wParam ) //wParam
      IF nKey = VK_RETURN
         hwg_MsgInfo( "RETURN" )
         IF ! Empty( cField )
            xValue := FieldGet( FieldNum( cField, xValue ) )
         ENDIF
         hwg_EndDialog()
      ENDIF
   ENDIF
   (xControl)
   (lParam)

   RETURN .T.
Mas olhando bem, vou alterar a ordem disso, colocar o bother depois das colunas.

BO em browse

Enviado: 18 Ago 2023 14:12
por JoséQuintas
Novo teste.
Bloqueei totalmente a função de sair com ENTER.

Se der ENTER logo que entra no browse, ele sai.

Se movimentar com setas e der ENTER, não sai mais, que é o esperado.

Difícil, mas talvez tenha a ver com aquele ENTER que movimenta entre campos, difícil mas não impossível.
Isso significaria o foco fora do browse, justamente o que o Fernando citou.

BO em browse

Enviado: 18 Ago 2023 15:55
por JoséQuintas
Nenhuma novidade.

Apenas vi que internamente o ENTER é usado pra acionar o EDIT do browse.
Por enquanto só pistas isoladas.

BO em browse

Enviado: 21 Ago 2023 12:25
por JoséQuintas
Por enquanto no meu caso não é bug.
Como só tem um button, não deu pra perceber que o foco estava nele.

Mesmo assim, não consegui setar o foco para o browse.
Tentei no ON INIT, no ON GETFOCUS da Dialog, e no ACTIVATE de quando ativa dialog.
Em todas dá erro de método não existente.