Página 4 de 11

Gerador/criação de telas/executor

Enviado: 25 Ago 2023 09:59
por Itamar M. Lins Jr.
Olá!
Como esperado, a mudança da hwgui está sendo meio radical, e tudo pode acontecer.
Não peguei esse bug aqui.
Os que peguei, foram corrigidos.
Sem um exemplo pequeno que demonstre o problema, não tem como saber.

Saudações,
Itamar M. Lins Jr.

Gerador/criação de telas/executor

Enviado: 25 Ago 2023 11:42
por JoséQuintas
Tá no outro post.
Foi o Kresin que me passou o fonte.
Ao atualizar o texto, não atualiza.
Ao colocar refresh, tá ficando tudo rebatido, o conteúdo anterior e o atual, e vai acumulando eternamente, como dá pra ver na imagem.

Não é tamanho, é um texto encima do outro mesmo.
Veja CLIENT@CLIENT@CLIENT@
Conforme o registro é 1,2,3,4,5,6, somente o número está rebatido que é a parte diferente.
Na primeira parte é JOAO, MARIA, FRANCISCO, etc. fica totalmente rebatido

Talvez seja a falta de FillRect() ou algo assim, pra limpar primeiro, mas como é transparente, tem que ser com a cor transparente.

Parece piada, mas é isso mesmo: transparente não existe. Uma determinada cor é definida pra ser tratada como transparente.

Gerador/criação de telas/executor

Enviado: 25 Ago 2023 13:05
por JoséQuintas
Postei o fonte disto no grupo minigui.
Vamos ver se tem comentários.

Foi tudo sem querer, conforme foi acontecendo, só pra organizar o fonte.

É de principiante, no que se refere a GUI.
São telas simples, no que se refere ao visual.
É interessante ver uma simulação de aplicativo usando 1 textbox, 1 label, 1 button, e tab.
É interessante poder compilar com várias LIBs.
Dá pra testar LIBs ou recursos, basicamente mexendo no lib_xxxx.prg da lib, ou adicionando novos com alternativas pra LIB existente, ou pra novas LIBs.
E enquanto isso, dá pra ir fazendo funcionar cada LIB , e pensar em possibilidades pra acrescentar mais recursos.

É como mexer no aplicativo, mas sem mexer no aplicativo.
É resolver problemas que iriam acontecer no aplicativo, antes deles acontecerem no aplicativo.

Acho que esse conjunto de possibilidades é que deixou o gerador interessante.

Mas pra mim, como resultado pra mim, é que vou testando as LIBs, e procurando pensar em possibilidades.

Por exemplo: talvez já interessante criar uma tela de login, mesmo que não obedeça senha...

Gerador/criação de telas/executor

Enviado: 25 Ago 2023 17:33
por JoséQuintas
erro.png
LIB GUI no Harbour é uma coisa extraordinária

Segundo a mensagem de erro, deu erro em H_PDF.PRG.
Mas o que PDF tem a ver com isso ?
Aconteceu algo assim na HWGUI também.

Gerador/criação de telas/executor

Enviado: 25 Ago 2023 18:48
por JoséQuintas

Código: Selecionar todos

FUNCTION gui_ButtonCreate( xDlg, xControl, nRow, nCol, nWidth, nHeight, cCaption, cResName, bAction )

   IF Empty( xControl )
      xControl := gui_newctlname( "BUTTON" )
   ENDIF

   IF cCaption == "Cancel"
      @ nRow, nCol BUTTON ( xControl ) ;
         PARENT ( xDlg ) ;
         CAPTION  cCaption ;
         PICTURE  cResName ;
         ACTION   Eval( bAction ) ;
         WIDTH    nWidth ;
         HEIGHT   nHeight ;
         IMAGEALIGN TOP ;
         CANCEL // abort valid
   ELSE
      @ nRow, nCol BUTTON ( xControl ) ;
         PARENT ( xDlg ) ;
         CAPTION  cCaption ;
         PICTURE  cResName ;
         ACTION   Eval( bAction ) ;
         WIDTH    nWidth ;
         HEIGHT   nHeight ;
         IMAGEALIGN TOP
   ENDIF

   RETURN Nil
Encontrei.
Em OOHG, a cláusula CANCEL no button faz com que ao clicar no button ele anule a validação.
Na dúvida, mas acho que é igual no VB6.

Nota: acendeu uma luz, e procurei por VALID nos exemplos

Gerador/criação de telas/executor

Enviado: 26 Ago 2023 19:13
por JoséQuintas

Código: Selecionar todos

FUNCTION gui_TabCreate( xDlg, xControl, nRow, nCol, nWidth, nHeight )

   IF Empty( xControl )
      xControl := gui_newctlname( "TAB" )
   ENDIF
   DEFINE TAB ( xControl ) ;
      PARENT ( xDlg ) ;
      AT nRow, nCol;
      WIDTH nWidth ;
      HEIGHT nHeight ;
      VALUE 1

   xControl := xDlg // because they are not on tab
   (nRow);(nCol);(nWidth);(nHeight);(xDlg)

   RETURN Nil
Sei lá.... em OOHG se disser que o parent é a TAB, diz que TAB não existe.
Com parent DIALOG ok, e fica tudo lá, certinho em cada PAGE da TAB.

Simulador de aplicativos (criação de telas)

Enviado: 26 Ago 2023 19:36
por JoséQuintas
HMG Extended
hmge.png
HWGUI
hwgui.png
OOHG
oohg.png
Situação atual: tab e pages sendo criadas em todas

GTWVG parou naquilo, só cria as telas, não sei usar como GUI. Também tem TAB mas acho que incompleta.
Poderiam ser usados buttons, labels, com GET tradicional, mas isso foge do padrão do simulador, não dá pra usar a mesma lógica.

Gerador/criação de telas/executor

Enviado: 28 Ago 2023 11:30
por JoséQuintas
Uma ocorrência curiosa:
Pra acertar GTWVG, mudei de ON INIT para antes do ACTIVATE.
Só na HWGUI precisou ser diferente.

Em hwgui

Código: Selecionar todos

FUNCTION gui_DialogActivate( xDlg, bCode )

   xDlg:Center()
   IF Empty( bCode )
      xDlg:Activate()
   ELSE
      ACTIVATE DIALOG xDlg ON ACTIVATE bCode
   ENDIF

   RETURN Nil
Em GTWVG

Código: Selecionar todos

FUNCTION gui_DialogActivate( xDlg, bCode )

   (xDlg)
   IF ! Empty( bCode )
      Eval( bCode )
   ENDIF

   RETURN Nil
Em HMGE

Código: Selecionar todos

FUNCTION gui_DialogActivate( xDlg, bCode )

   IF ! Empty( bCode )
      Eval( bCode )
   ENDIF
   DoMethod( xDlg, "CENTER" )
   ACTIVATE WINDOW ( xDlg )

   RETURN Nil
Até dá pra entender: a tela precisa existir pra ocorrer a atualização.
gtwvg, por não ser dialog, já cria durante a definição, chega no activate está tudo desenhado.
No final, o estranho foi HMGE aceitar.

Mas agora GTWVG também atualizando a tela. Não tinha colocado codeblock nos buttons.

Gerador/criação de telas/executor

Enviado: 28 Ago 2023 12:11
por JoséQuintas
gywvg.png
A tela da GTWVG.
Isso são buttons, textbox e label do Windows, que EXISTEM na GTWVG, e usando coordenadas pixel.

Código: Selecionar todos

FUNCTION gui_ButtonCreate( xDlg, xControl, nRow, nCol, nWidth, nHeight, cCaption, cResName, bAction )

   ( xDlg );(xControl);(nRow);(nCol);(nWidth);(nHeight);(cCaption);(cResName);(bAction)
   xControl := wvgPushButton():New()
   WITH OBJECT xControl
      :PointerFocus := .F.
      :Style += BS_TOP
      :Create( xDlg,,{nCol,nRow},{nHeight,nWidth})
      :SetCaption( {, WVG_IMAGE_ICONRESOURCE, cResName } )
      :SetCaption( cCaption )
      :Activate := bAction
   ENDWITH

   RETURN Nil

FUNCTION gui_LabelCreate( xDlg, xControl, nRow, nCol, nWidth, nHeight, xValue, lBorder )

   (xDlg);(xControl);(nRow);(nCol);(nWidth);(nHeight);(xValue);(lBorder)
   xControl := wvgStatic():New()
   WITH OBJECT xControl
      :Type := WVGSTATIC_TYPE_TEXT
      :Options := WVGSTATIC_TEXT_LEFT
      :Style += iif( lBorder, WS_BORDER, 0 )
      :SetColorFG( "W/B" )
      :SetColorBG( "W/B" )
      :Caption := xValue
      :SetFont( "Arial" )
      :Create(xDlg,,{nCol,nRow},{nWidth,nHeight})
   ENDWITH

   RETURN Nil

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

   (xDlg);(xControl);(nRow);(nCol);(nWidth);(nHeight);(xValue);(cPicture);(nMaxLength);(bValid)
   /*
   xControl := wvgStatic():New()
   WITH OBJECT xControl
      :Type := WVGSTATIC_TYPE_TEXT
      :Options := WVGSTATIC_TEXT_LEFT
      :SetColorFG( "W/B" )
      :SetColorBG( "W/B" )
      :Caption := xValue
      :SetFont( "Arial" )
      :Create(xDlg,,{nCol,nRow},{nWidth,nHeight})
   ENDWITH
   */
   xControl := wvgSle():New()
   WITH OBJECT xControl
      :Create( xDlg,,{nCol,nRow},{nWidth,nHeight})
      :SetData( Transform( xValue, "" ) )
   ENDWITH

   RETURN Nil
Na GTWVG são SLE pra linha única e MLE pra multilinhas, acho que esses nomes tem a ver com algum programa xbase - XPP.
Só lembrando: número positivo é considerado pixel, número negativo é considerado linha/coluna.
Por isso, mesmas coordenadas usadas nas outras libs.
SAY/GET, se fosse usado, sairia na tela de fundo.
Nota: falhando atualizar o label com borda.

Gerador/criação de telas/executor

Enviado: 28 Ago 2023 12:43
por JoséQuintas
gtwvg.png
Resolvido label.
Eu estava usando caption=, alterando só a variável interna, o correto é :SetCaption()

O Edit do textbox ainda não funciona, só funciona apagar letras.
Acho que é a falta da janela DIALOG, e por isso as letras são desviadas pra GT (janela texto) e não pro controle textbox.
Mas funciona o enable/disable deles.

Simulador/criação de telas/executor

Enviado: 28 Ago 2023 13:04
por JoséQuintas
Curiosidade do demoxbp.prg

Código: Selecionar todos

   oAddr := WvgSLE():new()
   oAddr:bufferLength := 500
   oAddr:border       := .T.
   cNavigate          := "http://www.harbour.vouch.info"
   oAddr:dataLink     := {| x | iif( x == NIL, cNavigate, cNavigate := x ) }
   oAddr:setColorFG( RGB( 0, 0, 255   ) )
   oAddr:setColorBG( RGB( 0, 255, 255 ) )
   oAddr:create( oDA, , { 120, oTBar:currentSize()[ 2 ] }, { 500, 20 }, , .T. )
   oAddr:setData()
   oAddr:killInputFocus := {| m1, m2, oS | m1 := m1, m2 := m2, oS:getData(), oCom:navigate( cNavigate ) }
:bufferLength, deve ser o conhecido MAXLENGTH
:DataLink, é o conhecido Value da hwgui, cria o link com a variável
:KillInputFocus, deve ser o conhecido LostFocus, atualizando a variável

Só pra curiosidade, afinal, é a única GUI que faz parte do Harbour, mesmo que nunca usada.
Nem eu que uso GTWVG nunca usei essa parte somente GUI, por isso achei interessante acrescentar no simulador, mais como curiosidade.

Gerador/criação de telas/executor

Enviado: 28 Ago 2023 13:10
por JoséQuintas
JoséQuintas escreveu::bufferLength, deve ser o conhecido MAXLENGTH
E não é que o problema do textbox era esse.
Após o post fiz o teste.
Faltava definir o tamanho máximo.

Gerador/criação de telas/executor

Enviado: 28 Ago 2023 14:58
por JoséQuintas
hmg.png
Veja que em HMG tem exemplos do que seriam controles estilizados, criados por usuários.
Com as mudanças da HWGUI, ela pode entrar nessa fase.

De modo simples, aquilo de controle "feito a mão", pra fazer do jeito que quiser.

Acho que nem precisa dizer... as mesmas rotinas podem ser usadas em qualquer LIB incluindo WVG.

Quanto à atualização do PNG, acho que foi no Harbour da LIB e não no Harbour geral, não confirmei.

Gerador/criação de telas/executor

Enviado: 30 Ago 2023 20:32
por JoséQuintas
hmg3x.png
UIA !!!!
Mais uma LIB no simulador HMG 3
Falta acertar o browse.

A notícia talvez ruim: é a MINHA HMG3, modificados CH parcialmente pra funcionar igual HMG Extended

Gerador/criação de telas/executor

Enviado: 30 Ago 2023 21:06
por JoséQuintas
Isto é .... incrível.....

O browse abriu, mas não mostrou campos.

Então.... fui procurar exemplo de browse

NÃO TEM
NÃO É USADO EM LUGAR NENHUM
Incrível.