Página 1 de 3

GTWVG - Harbour 3.2

Enviado: 08 Mar 2023 13:28
por JoséQuintas
De novo?

O que mudou?

- Harbour 3.2, qualquer um pode testar/usar

- Modo mix, muito mais fácil do que todas as vezes anteriores

- Modo allmix, misturar muito mais que antes

- Talvez vantagens pra outros, depende de testes

Porque ?

HWGUI ia ser uma alternativa pra testes, mas tem bugs pra corrigir.
Uma simples tela com GETs já tem bug, o VALID do último GET falha.
Tratamento de ícones precisa melhorias.

MAS.... nada impede de testes mixados, de contribuir, etc.
Tudo que vale pra uma LIB também vale pras outras LIBs.

GTWVG - Harbour 3.2

Enviado: 08 Mar 2023 13:49
por JoséQuintas
Primeiro ponto importante:

GT é GT, não é GUI.

Digamos que em GUI o Windows toma conta de tudo, lógico, junto com o aplicativo, que tem que se virar com a API Windows.
O Windows faz as coisas, e vai conversando com o aplicativo.

Em GT o Harbour toma conta de tudo. Parece a mesma coisa, mas não é.
O foco é sempre a GT, se tirar o foco da GT o usuário vai detestar, vai achar que travou tudo, vai exigir coisas do usuário que ele não faz.

Não adianta querer usar textbox, aqueles "GETs" windows, porque eles precisam de foco.
Se o foco for pro GET, ele sai da GT, o usuário precisaria clicar na janela, por exemplo, pro ESC da janela funcionar.
Se não clicar, vai parecer que travou tudo.
Então.... esqueça textbox em GT.

textbox é o nome no Visual Basic, cada LIB chama de um jeito.
GTWVG até tem SLE e MLE, um pra uma linha e outro pra multilinha, apesar de na prática serem os mesmos.
HWGUI é o HEDIT
MINGUI sinceramente não lembro o nome

Trabalhar com API Windows não é fácil, se fosse fácil o bug da hwgui estaria resolvido há tempos.
Aliás.... me veio uma coisa à cabeça:
Pra contornar o bug da hwgui o que o usuário faz? acrescenta um GET fantasma.
Então.... à primeira vista.... seria acrescentar esse GET fantasma na GetList da HWGUI !!!
Se fizer isso dentro da LIB, pro usuário vai estar tudo resolvido !!!
Pelo menos na teoria, mas não é assunto daqui.

GTWVG - Harbour 3.2

Enviado: 08 Mar 2023 14:04
por JoséQuintas
GTWVT,GTWVG e até GTWVW usam uma tela Windows, NÃO uma tela console.
A diferença ? TELA GRÁFICA e não texto, e principalmente.... JANELA WINDOWS.

O que dá pra fazer ? TUDO

Dá pra usar os mesmos controles GUI, com limitações, como já disse antes sobre TEXTBOX, e também dá pra desenhar diretamente.

O que é desenhar diretamente:
TUDO

Exemplo 1:
Pode copiar o fonte do ownerbutton da hwgui, e criar o controle ownerbutton na gtwvg
Neste caso é uma janela encima da GT, o Windows se vira pra repintar, e mexer na GT não mexe com ele.
Nem limpar toda tela GT não vai apagar o controle.

Exemplo 2:
Mesma coisa, mas usar diretamente na janela.
Neste caso o Harbour/GT vai ficar apagando o desenho, precisa repintar, nos exemplos da GTWVG é o WVT_Paint()

Nos dois casos, tem o efeito colateral:

1) se o controle não apaga, se quiser trocar janela vai precisar esconder ou destruir o controle.
2) no segundo caso, vai ter que ficar repintando e também em algum momento vai ter que parar de repintar.

É nisso que multithread facilita: ter janelas independentes vai livrar desse trabalho extra.
Igual GUI: pra tudo tem uma janela nova, não se reaproveita a janela pra nada.

Pronto, essa é a parte teórica.

GTWVG - Harbour 3.2

Enviado: 08 Mar 2023 14:15
por JoséQuintas
test.png
Tá aí o button, só com o texto "teste"
E mais o GET, precisa de um ponto de parada, senão a tela fecha.

GTWVG - Harbour 3.2

Enviado: 08 Mar 2023 14:20
por JoséQuintas
test.png
Ainda não parou ali.
Agora com arquivo manifest.
O visual do button mudou de aparência.
Nada mudou no fonte, apenas foi acrescentado o arquivo manifest como resource da compilação.

GTWVG - Harbour 3.2

Enviado: 08 Mar 2023 14:40
por JoséQuintas
test.png
É GTWVG ORIGINAL DO HARBOUR 3.2
só texto, ou ícone + texto, e escolhendo a posição do texto: acima, abaixo, esquerda, direita.
Não ajustei tamanho dos botões, tá tudo do mesmo tamanho
NÃO redimensiona imagem automático, mas já sabem que dá.

GTWVG - Harbour 3.2

Enviado: 08 Mar 2023 15:21
por JoséQuintas
test.png
Muito fonte?
Pode criar rotinas pra facilitar.
Ao invés de colocar fonte WVG em tudo que é lugar, centralize em funções.

Nota:
Neste exemplo não usa, mas está guardando as variáveis com os controles.
Também não foi definida ação para os buttons, foi só pra mostrar o visual.

GTWVG - Harbour 3.2

Enviado: 08 Mar 2023 15:25
por carlaoonline
Duas perguntas:
1) Onde eu encontro a lista de propriedades desse botão:

2) É possível salvar e restaurar a tela com esses botões?

Grato.

GTWVG - Harbour 3.2

Enviado: 08 Mar 2023 15:27
por JoséQuintas
janela.png
Então, é basicamente isso que uso no meu aplicativo, o button, mas redimensionando o ícone.

Tem também a barra de rolagem na lateral do browse, é o wvgScrollbar(), não foge do uso do button, de definir posição e tamanho.
E multithread pra abrir várias janelas à vontade, e já destruir os buttons na saída.

Tem muitas coisas que podem ser usadas, mas ainda não tive idéia pra uso.
GET com contorno parecendo TEXTBOX também dá pra fazer, mas não achei vantagem nisso.

GTWVG - Harbour 3.2

Enviado: 08 Mar 2023 15:35
por JoséQuintas
printscreen.png
Esse daí.
É basicamente isto:

Código: Selecionar todos

   @ 2, 1 SAY "Any...:" GET xValue1
   @ 3, 1 SAY "Any...:" GET xValue2
   @ 4, 1 SAY "Any...:" GET xValue3
   @ 5, 1 SAY "Any...:" GET xValue4
   @ 6, 1 SAY "Any...:" GET xValue5
   SetPaintGetList( GetList )
   READ
Uma linha de fonte.

Mas achei que só serve pra deixar a tela mais poluída ainda.

Nos exemplos da GTWVG ela usa funções próprias pra desenhar as linhas, imitando estilo 3d.
Nesse teste usei um frame, que criei, que deve dar pra fazer com o wvgStatic() original.

Código: Selecionar todos

FUNCTION SetPaintGetList( GetList )

   LOCAL oGet, oControl

   FOR EACH oGet IN GetList
      oControl := wvgTstFrame():New()
      oControl:Create( , , { -oGet:Row, -oGet:Col }, { -1, -Len( Transform( oGet:VarGet(), oGet:Picture ) ) } )
      AAdd( oControlList, oControl )
   NEXT

   RETURN NIL
GetList tem todas as coordenadas, mais fácil pegar da GetList.
Como vai desenhar os traços é questão de escolha.
Mas além de poluir o visual, vai ter a questão de repintar e/ou mostrar/esconder.
INFELIZMENTE, não temos controle na GT pra mudar a altura das linhas, isso deixaria o visual melhor.
Achei que não valia a pena.

GTWVG - Harbour 3.2

Enviado: 08 Mar 2023 15:39
por JoséQuintas
carlaoonline escreveu:Duas perguntas:
1) Onde eu encontro a lista de propriedades desse botão:

2) É possível salvar e restaurar a tela com esses botões?
1) Acaba tendo que dar uma olhada no fonte da classe (parece até hwgui kkkk)

2) ESSES NÃO. São controles GUI, janelas independentes.
Outros desenhados na tela SIM, MAS.... de uma forma geral não serve pra nada.
Salvar tela gráfica não serve pra nada, porque a tela pode ser redimensionada, e a imagem salva não vai "encaixar".

GTWVG - Harbour 3.2

Enviado: 08 Mar 2023 15:43
por JoséQuintas
telas.png
Pra não complicar, é onde uso multithread por módulo.
Cada módulo tem sua própria janela, e seus buttons.

GTWVG - Harbour 3.2

Enviado: 08 Mar 2023 15:49
por JoséQuintas
E no caso de reaproveitar janela pra outra coisa...
É onde uso o nome do controle, pra fazer :Hide(), :Show(), mostrar ou esconder
Ou outro pra desativar.

É igual GUI, mas GUI normalmente não reaproveita janela.

Código: Selecionar todos

   METHOD GUIHide()       INLINE AEval( ::aControlList, { | oElement | oElement[ 2 ]:Hide() } )
   METHOD GUIShow()       INLINE AEval( ::aControlList, { | oElement | oElement[ 2 ]:Show() } ), wvgSetAppWindow():InvalidateRect()
   METHOD GUIDestroy()    INLINE AEval( ::aControlList, { | oElement | oElement[ 2 ]:Destroy(), oElement[ 2 ] := Nil } ), ::aControlList := {}, wvgSetAppWindow():Refresh()
   METHOD GUIEnable()     INLINE AEval( ::aControlList, { | oElement | oElement[ 2 ]:Enable() } )
   METHOD GUIDisable()    INLINE AEval( ::aControlList, { | oElement | oElement[ 2 ]:Disable() } )
Antes de abrir o browse, por exemplo, na mesma janela, escondo os controles oBtn:Hide()
No final, volto a mostrar oBtn:Show()

Já no browse, no final destruo tudo dele. oBtn:Destroy(), porque acabou a tela.

Nota: a GTWVG se baseou no XBase++ pra definir os nomes.

GTWVG - Harbour 3.2

Enviado: 08 Mar 2023 15:53
por JoséQuintas
debug.png
Aqui acompanhando pelo debug.
Veja que o debug toma conta da tela GT.
Os buttons continuam, porque são janelas por cima da GT.
CLS não apaga os buttons.
SAVESCREEN não salva os buttons.
RESTORESCREEN não devolve os buttons - ESSES QUE SÃO GUI.

Se criar um button no menu principal, e não fizer mais nada com ele, ele vai ficar durante todo o aplicativo no mesmo lugar.

GTWVG - Harbour 3.2

Enviado: 08 Mar 2023 16:00
por JoséQuintas
Já comentei por aqui:

É como se a GT fosse o PAPEL DE PAREDE, a IMAGEM DE FUNDO.

Numa janela GUI, não pode colocar uma imagem de fundo?
Então... a GT é essa imagem.
E ESSES CONTROLES WVG são os controles de uma GUI normal, sempre janelas.

Nessa imagem, o DEBUG passou a ser a nova imagem de fundo, o resto continua - os buttons.