Página 1 de 2

Como contornar o VALID

Enviado: 14 Ago 2023 10:09
por JoséQuintas
get.png
Tem lá o GET com VALID.
Tem lá o botão cancelar.
Ao clicar no cancelar, não deixa sair do VALID.

Também fica ruim que o destaque de foco desaparece.
Olhando a tela não há destaque para o que está sendo validado (hwg_SetColorInFocus() perdeu o efeito porque perdeu o foco)

Tem alternativa pra isso ?

Como contornar o VALID

Enviado: 14 Ago 2023 10:36
por Itamar M. Lins Jr.
Olá!
Verificando se o foco estava no get com valid e teclou ENTER.

Código: Selecionar todos

If hwg_Getkeystate(VK_RETURN)< 0
Saudações,
Itamar M. Lins Jr.

Como contornar o VALID

Enviado: 14 Ago 2023 11:19
por JoséQuintas
E como usa isso ?

Num primeiro momento testei todas as possibilidades: menor, maior e igual e nenhuma teve efeito.

Código: Selecionar todos

   IF aItem[ CFG_ISKEY ] .AND. hwg_GetKeyState( VK_RETURN ) == 0

Como contornar o VALID

Enviado: 14 Ago 2023 11:25
por JoséQuintas
engraçado...

Código: Selecionar todos

STATIC FUNCTION OkCurrent( aItem, Self )

   LOCAL nSelect, lEof, xStatus

   xStatus := hwg_GetKeyState( VK_RETURN )
   hwg_MsgInfo( xStatus )

   IF aItem[ CFG_ISKEY ] .AND. hwg_GetKeyState( VK_RETURN ) == 0
valid.png
Mesma rotina, aí não perdeu o foco.

Como contornar o VALID

Enviado: 14 Ago 2023 11:30
por JoséQuintas
Única explicação: ter atualizado o label antes da mensagem.

Código: Selecionar todos

      lEof := Eof()
      SetLabelValue( ::oDlg, aItem[ CFG_VCONTROL ], FieldGet( FieldNum( aItem[ CFG_VSHOW ] ) ) )
      SELECT ( nSelect )
      IF lEof
#ifdef HBMK_HAS_HWGUI
         hwg_MsgInfo( "Código não cadastrado" )
#endif
         RETURN .F.
      ENDIF
   ENDIF

   RETURN .T.
Alterar essa ordem pode resolver sobre o foco, mas ainda resta o VALID.

Como contornar o VALID

Enviado: 14 Ago 2023 12:23
por JoséQuintas
focus.png
focus2.png
Aproveitei pra deixar o fonte mais genérico.
Colocando outra mensagem no VALID, o destaque de foco não desaparece nunca.
Mas deixando só a que interessa, o foco some.

Notas:

1) Os #ifdef são porque as outras LIBs não tem hwg_MsgInfo()

2) A outra mensagem é só em determinada condição, mas é a mesma hwg_MsgInfo()

3) Depois que postei, vi que o outro SEEK também pode ser simplificado pra SEEK xValue, o que não deixa nenhum comando de GUI entre as mensagens

Como contornar o VALID

Enviado: 14 Ago 2023 12:52
por JoséQuintas
Não dá pra usar o gravador de imagem do Windows pra mostrar isso.
O gravador do Windows é meio lixo: se perde com ampliação ativada, além disso, ele só grava a janela principal, mesmo com o foco na janela secundária.

Com a hwg_MsgInfo() dentro do IF: o amarelo do foco desaparece
Com a hwg_MsgInfo() FORA do IF, em todos os VALIDs, o foco vai ficando em todos os GETs.

Tirando isso, que não é o mais importante sobre o VALID, ainda tem o problema de não cancelar o VALID.

ESC até faz isso, mas além de abandonar o GET também abandona o módulo.

Como contornar o VALID

Enviado: 14 Ago 2023 12:57
por Itamar M. Lins Jr.
Olá!
E como usa isso ?
Eu uso com um FLAG lBtn := .F.
If teclou enter no valid ...
If Pressionou botão cancelar ...

Em qualquer controle eu uso {|| lBtn:=.t. ou lOk := .T....} para saber o que aconteceu.
GUI é foco o tempo todo.
E ainda tem o ON KEYDOWN {]|} do get...

Saudações,
Itamar M. Lins Jr.

Como contornar o VALID

Enviado: 14 Ago 2023 13:12
por Itamar M. Lins Jr.
Olá!
hwg_msginfo() //só mostra caracteres não mostra variaveis tipo logical, numeric, date... tem que transformar em charectere.

Saudações,
Itamar M. Lins Jr.

Como contornar o VALID

Enviado: 14 Ago 2023 15:28
por JoséQuintas

Código: Selecionar todos

   hwg_MsgInfo( Transform( hwg_GetKeyState( VK_RETURN ), "" ) )
Recebi retornos 0, 1, -127, -128

Como contornar o VALID

Enviado: 14 Ago 2023 15:45
por pauloa1
No começo da função da valid coloca

if selffocus(objeto:handle)
return(.t.)
endif

Obs> Objeto: nome do botão cancelar

Paulo

Como contornar o VALID

Enviado: 14 Ago 2023 16:06
por Itamar M. Lins Jr.
Olá!
Não sei se com OwnnerButton vai funcionar. selffocus()
Será o evento ON CLICK neste caso.

Saudações,
Itamar M. Lins Jr.

Como contornar o VALID

Enviado: 14 Ago 2023 16:59
por JoséQuintas
Itamar M. Lins Jr. escreveu:Não sei se com OwnnerButton vai funcionar. selffocus()
Será o evento ON CLICK neste caso.
Não pode, se executar o click antes do valid, também executaria de um SAVE mesmo com conteúdo inválido.

Acaba dependendo de algo meio equivalente a NextKey(), que seria testar pra onde vai.
Se o SelfFocus() estiver testando se o foco está indo para o button poderá ser a melhor saída.
Só que ele terá que ser conhecido no momento do VALID - alguma variável visível ou equivalente

Como contornar o VALID

Enviado: 14 Ago 2023 17:09
por JoséQuintas
Função não existe.

Mas ok:
addons\hwgui.hbc (not installed):
HWG_DRAWFOCUSRECT()
HWG_GETFOCUS()
HWG_SELFFOCUS()
HWG_SETCOLORINFOCUS()
HWG_SETFOCUS()

Como contornar o VALID

Enviado: 14 Ago 2023 17:12
por Itamar M. Lins Jr.
Olá!
Ele "Paulo" deve usar hwgui bem antiga.

Saudações,
Itamar M. Lins Jr.