Página 1 de 1

getbox com imagem/action

Enviado: 12 Abr 2024 21:01
por JoséQuintas

Código: Selecionar todos

FUNCTION gui_TextCreate( xDlg, xControl, nRow, nCol, nWidth, nHeight, ;
            xValue, cPicture, nMaxLength, bValid, bAction, cImage  )

   IF Empty( xControl )
      xControl := gui_newctlname( "TXT" )
   ENDIF
   DEFINE GETBOX ( xControl )
      PARENT ( xDlg )
      ROW nRow
      COL nCol
      HEIGHT nHeight
      WIDTH nWidth
      FONTNAME DEFAULT_FONTNAME
      IF ValType( xValue ) == "N"
         NUMERIC .T.
         INPUTMASK cPicture
      ELSEIF ValType( xValue ) == "D"
         DATE .T.
         DATEFORMAT cPicture
      ELSEIF ValType( xValue ) == "L" // workaround to do not get error
         xValue := " "
      ELSEIF ValType( xValue ) == "C"
         MAXLENGTH nMaxLength
      ENDIF
      VALUE xValue
      IF ! Empty( bAction )
         ACTION bAction
      ENDIF
      IF ! Empty( cImage )
         IMAGE cImage
      ENDIF
      //ON LOSTFOCUS Eval( bValid )
      VALID bValid
   END GETBOX
   (bValid)

   RETURN Nil
Não está acatando action e image.
Falta alguma coisa ?

getbox com imagem/action

Enviado: 12 Abr 2024 21:10
por JoséQuintas
Faltava sim, olhar pro lugar certo kkkkkkkkkkkkkkkkkkkkkkkkkk

Código: Selecionar todos

            iif( aItem[ CFG_ISKEY ] .OR. ! Empty( aItem[ CFG_VTABLE ] ), { || Nil }, Nil ), ;
            iif( aItem[ CFG_ISKEY ] .OR. ! Empty( aItem[ CFG_VTABLE ] ), "bmpinfo", Nil ) )
Tava olhando pro campo ISKEY mas só tinha colocado no outro.

getbox com imagem/action

Enviado: 12 Abr 2024 21:32
por JoséQuintas
Ainda tem um probleminha.

Do action já resolvi, Eval( bAction )

Mas falhou no campo chave.
telaerro.png
Mesma rotina em todos.
O primeiro, campo chave, falhou.
Talvez algum evento atrapalhando.

Problema de últmo elemento igual HWGUI não é.

TODOS são criados assim:

Código: Selecionar todos

FUNCTION gui_TextCreate( xDlg, xControl, nRow, nCol, nWidth, nHeight, ;
            xValue, cPicture, nMaxLength, bValid, bAction, cImage  )

   IF Empty( xControl )
      xControl := gui_newctlname( "TXT" )
   ENDIF
   DEFINE GETBOX ( xControl )
      PARENT ( xDlg )
      ROW nRow
      COL nCol
      HEIGHT nHeight
      WIDTH nWidth
      FONTNAME DEFAULT_FONTNAME
      IF ValType( xValue ) == "N"
         NUMERIC .T.
         INPUTMASK cPicture
      ELSEIF ValType( xValue ) == "D"
         DATE .T.
         DATEFORMAT cPicture
      ELSEIF ValType( xValue ) == "L" // workaround to do not get error
         xValue := " "
      ELSEIF ValType( xValue ) == "C"
         MAXLENGTH nMaxLength
      ENDIF
      VALUE xValue
      IF ! Empty( bAction )
         ACTION Eval( bAction )
      ENDIF
      IF ! Empty( cImage )
         IMAGE cImage
      ENDIF
      //ON LOSTFOCUS Eval( bValid )
      VALID bValid
   END GETBOX
   (bValid)

   RETURN Nil
São chamadas com estes parâmetros, iguais nos dois casos

Código: Selecionar todos

         iif( aItem[ CFG_ISKEY ] .OR. ! Empty( aItem[ CFG_VTABLE ] ), { || gui_Msgbox( "pesquisa" ) }, Nil ), ;
            iif( aItem[ CFG_ISKEY ] .OR. ! Empty( aItem[ CFG_VTABLE ] ), "bmpinfo", Nil ) )
A diferença é que o campo chave é independente.
Primeiro só está ativo o campo chave.
Só depois de passar pelo campo chave, pelo VALID, o campo chave é desativado, e os demais são ativados.
TODOS eles tem VALID.

getbox com imagem/action

Enviado: 12 Abr 2024 21:57
por JoséQuintas
O VALID é executado antes do CLICK, afinal, o foco saiu do getbox.

No caso do primeiro campo, o VALID desativa e o click não acontece.

No caso dos outros campos, o código inválido aciona o browse, e o click não acontece.

Com código válido, nos outros campos o click tem efeito.
Com código válido, o primeiro campo de qualquer jeito é desativado.

Passei lá pro Grigory pra ver se tem alternativa.

O problema é o VALID ser executado antes do click.

Não dá pra ser a mesma solução do button CANCEL.

getbox com imagem/action

Enviado: 12 Abr 2024 22:03
por JoséQuintas
get1.png
Acima 1 e click, ok, mostrou a ação.
Mas primeiro foi o VALID, pesquisou o código, atualizou o nome do vendedor na tela, e mostrou na tela a mensagem do click.
get2.png
Acima 50 e click, código não cadastrado.
A validação abriu o browse automático, tudo bem que o uso final do click será pra isso, mas no momento a ação é outra.

getbox com imagem/action

Enviado: 12 Abr 2024 22:16
por JoséQuintas
Só pra curiosidade:

Código: Selecionar todos

FUNCTION frm_Validate( aItem, Self )

   LOCAL nSelect, lFound := .T., xValue, nPos

   nPos := hb_AScan( ::aControlList, { | e | e[ CFG_CTLTYPE ] == TYPE_BUTTON .AND. ;
      e[ CFG_CAPTION ] == "Cancel" } )
   IF nPos != 0
      IF gui_IsCurrentFocus( ::xDlg, ::aControlList[ nPos, CFG_FCONTROL ] )
         RETURN .T.
      ENDIF
   ENDIF
...
Desse jeito no VALID eu testo se o foco está indo para o button cancel.
Mas não tenho referência do button do getbox pra fazer a mesma coisa.

getbox com imagem/action

Enviado: 12 Abr 2024 23:44
por alxsts
Olá!

Existe este controle na HwGUI?

getbox com imagem/action

Enviado: 13 Abr 2024 14:41
por JoséQuintas
Na prática, um controle pode ter vários dentro, é mais comum do que se pensa.
Na minigui existe pronto.

Na HWGUI não sei se alguma versão tem.

Outro exemplo, na HWGUI atual a progressbar tem uma dialog própria, acaba fazendo parte da progressbar.

Isso de várias funções é mais comum do que parece.
O combobox pode ser um EDIT com LISTBOX.
A TAB são várias pages

Como eu comento sempre: tudo é janela
vb6-1.png
vb6-2.png
A opção de criar controles no VB6.
Pode colocar vários dentro da janela.

Por exemplo, esse textbox com o button do lado.
E a parte de programação, pra alinhar automático um controle do lado do outro, conforme o tamanho.
No uso depois, é só colocar esse novo controle no formulário, entra como um controle único.

Tanto hwgui quanto minigui contém dicas na documentação sobre criar controles.

Poderia ser um textbox com título (textbox+label)

Pois é... agora imagine a infinidade de possibilidades com isso.

Até mesmo o "owner draw", ele é desenhado a mão, com o visual que quiser.
é uma janela, e desenho a mão, via rotinas no controle, do jeito tradicional do console, mas tela gráfica.
O BROWSE é o mais manual de todos, apenas não se vê durante o uso.

Nota: visualmente desse jeito, acho que fica mais claro sobre criar/mixar/etc.

getbox com imagem/action

Enviado: 16 Abr 2024 09:08
por JoséQuintas
Parece que não, mas é muito interessante isso do VB6.
Mostra que um controle é praticamente uma DIALOG, que pode ter controles dentro.

Para a questão do post, seria tratar o conjunto, e o tratamento está individual.
Seria tratar um VALID ou LOSTFOCUS do conjunto, e não do textbox.
Ao tratar isolado, o CLICK causou o lostfocus do controle interno, e não do controle-conjunto.
Mas como resolver, aí complica.
Talvez nesse ponto facilitaria com objetos/classes, que daria a visão no fonte meio parecida com a visão dessa tela.

Não sei se saberia resolver, mas isso seria meio parecido com minha classe de ADO.
A classe é o objeto, e dentro dela tem os objetos conexão e recordset.
O fonte usa o objeto/classe ADO, sem acesso direto ao que tem dentro.

Esse controle com textbox e button deveria ser igual: um novo controle com textbox e button dentro, e esse novo controle ser o intermediário dos controles internos. Dessa forma o click poderia evitar VALID e LOSTFOCUS do textbox que seriam internos.

E qualquer um poderia criar novos controles, afinal, todos sabem trabalhar com DIALOG.
Isso é o que essa imagem me fez perceber, coisa que por fonte não fica tão claro.


Mas enquanto isso... ainda sem solução para o problema do post.

getbox com imagem/action

Enviado: 16 Abr 2024 09:21
por JoséQuintas
Acabei achando a "quase" solução: BTNTEXTBOX.

Só não está respeitando o ícone definido.

Uia, na FREE SYNTAX, conhecida por ALTERNATE SYNTAX

Código: Selecionar todos

FUNCTION gui_TextCreate( xDlg, xControl, nRow, nCol, nWidth, nHeight, ;
            xValue, cPicture, nMaxLength, bValid, bAction, cImage  )

   IF Empty( xControl )
      xControl := gui_newctlname( "TXT" )
   ENDIF
   IF ! Empty( cImage )
      DEFINE BTNTEXTBOX ( xControl )
   ELSE
      DEFINE GETBOX ( xControl )
   ENDIF
      PARENT ( xDlg )
      ROW nRow
      COL nCol
      HEIGHT nHeight
      WIDTH nWidth
      FONTNAME DEFAULT_FONTNAME
      IF ValType( xValue ) == "N"
         NUMERIC .T.
         INPUTMASK cPicture
      ELSEIF ValType( xValue ) == "D"
         DATE .T.
         DATEFORMAT cPicture
      ELSEIF ValType( xValue ) == "L" // workaround to do not get error
         xValue := " "
      ELSEIF ValType( xValue ) == "C"
         MAXLENGTH nMaxLength
      ENDIF
      VALUE xValue
      IF ! Empty( bAction )
         ACTION Eval( bAction )
      ENDIF
      IF ! Empty( cImage )
         IMAGE cImage
      ENDIF
      //ON LOSTFOCUS Eval( bValid )
      VALID bValid
   IF ! Empty( cImage )
      END BTNTEXTBOX
   ELSE
      END GETBOX
   ENDIF
   (bValid)

   RETURN Nil

Só meu formatador de fonte é que vai se perder com isso kkkk
text.png
BTNTEXTBOX tem o funcionamento desejado, mas a imagem não é a definida, aparece "..."

getbox com imagem/action

Enviado: 16 Abr 2024 21:11
por JoséQuintas
Alarme falso.

talvez caiba a pergunta: pra que usar isso?
Ficou ainda pior.

Vamos ver se aparece solução pra qualquer dos dois casos.