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
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
HWGUI
OOHG
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
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
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
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
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.