Clipper On Line • Ver Tópico - Tutorial GTWVG

Tutorial GTWVG

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

Tutorial GTWVG

Mensagempor JoséQuintas » 14 Jun 2019 01:36

Talvez falte isso pra alguém dar uma olhada.
Vamos lá....

O básico: basta acrescentar GTWVG.hbc na compilação.

console: hbmk2 test.prg
GTWVG: hbmk2 test.prg GTWVG.hbc

Só que GTWVG usa ambiente gráfico do Windows, isso exige uma janela Windows.
Em caso de erro aparece o erro na tela, mas aquela outra mensagem mais detalhada sobre o erro deixa de existir, porque a janela vai se fechar.

Com esse básico o usuário já pode redimensionar a janela, e todo conteúdo vai ampliar/reduzir automaticamente.

Optei por salvar a configuração da letra (fonte) ao sair do aplicativo, e restaurar na entrada.
Com isso, o usuário ajusta do jeito que quiser, e quando chamar o aplicativo, volta do jeito que ele deixou.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 11905
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 12 vezes
Mens.Curtidas: 759 vezes

Tutorial GTWVG

Mensagempor JoséQuintas » 14 Jun 2019 01:45

A parte gráfica:
Convém entender isso antes de partir pro uso.

Dá pra considerar a janela GTWVG é algo parecido com isto:
Não vou formatar o fonte, porque é só um fonte fictício.

DO WHILE .T.
CLS
DesenhaTexto()
//DesenhaGrafico()
ENDDO


O default da GTWVG seria algo parecido com isso acima.
A tela é gráfica, mas o texto sempre tem preferência.
Como texto entende-se qualquer caractere, inclusive o espaço em branco.
Resultado: TUDO é coberto por texto a cada atualização da tela.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 11905
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 12 vezes
Mens.Curtidas: 759 vezes

Tutorial GTWVG

Mensagempor JoséQuintas » 14 Jun 2019 02:05

Opções:

1) Wvt_Paint()
Uma opção é usar uma rotina com o nome WVT_Paint()
Essa rotina seria a DesenhaGrafico() mostrada no exemplo fictício anterior.
A todo instante, o texto apaga tudo, e o que for gráfico é desenhado novamente.
Outro exemplo fictício:

aDesenhos := {}
DO WHILE .T.
CLS
DesenhaTexto()
DesenhaGrafico( aDesenhos )
ENDDO


Internamente é isso que acontece mas, como o Windows otimiza a atualização de tela, não se enxerga a "repintagem".
Pra acabar com o desenho, teria que limpar a lista em aDesenhos
E se não usar Wvt_Paint()... os desenhos vão sumir (buttons, e tudo mais)

2) Controles WVG/GUI
Os controles que começam com wvg são iguais a qualquer ambiente GUI, eles são janelas que ficam por cima da outra.
Ao atualizar o texto da janela GTWVG que apaga tudo que é gráfico, essa janela que fica por cima não é apagada.
Resultado: se é um button, pode limpar a tela (CLS) que o button não vai ser apagado - é outra janela.

Então temos dois métodos diferentes.
No primeiro método temos que ficar repintando o gráfico senão o gráfico some.
No segundo método temos que retirar o gráfico quando não quisermos mais, porque CLS não resolve.

Porque isso de retirar o gráfico?
Numa LIB GUI é criada uma janela pra cada módulo, já na GTWVG, geralmente o usuário usa a mesma janela pra tudo.
Se é a mesma janela, cabe ao usuário controlar os gráficos que ficam ou que saem.

Mas então não dá no mesmo os dois métodos?
Não.
No primeiro método, o programa tem que ficar repintando a tela toda hora - digamos 1 vez por segundo, mas na prática é a cada atualização.
No segundo método o Windows cuida disso, igual qualquer LIB GUI, ou seja, o programa não repinta nenhuma vez.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 11905
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 12 vezes
Mens.Curtidas: 759 vezes

Tutorial GTWVG

Mensagempor MSDN » 14 Jun 2019 09:52

Parabéns pela iniciativa ! :-Y
Marcelo Neves
Harbour+MiniGUI : harbourdeveloper.blogspot.com.br
Harbour 3.2, MiniGUI Extended, Borland C++ 5.5.1, xEdit, DBF/CDX, MySQL
(41) 99786-3995
skype : msdn.xbase
https://www.facebook.com/groups/459684654564715/
https://www.youtube.com/channel/UC3IsY8Gwwulg0aWOgW-o-Qg
marcelo.souza.das.neves@gmail.com
MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 529
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: Curitiba - PR
Curtiu: 112 vezes
Mens.Curtidas: 84 vezes

Tutorial GTWVG

Mensagempor JoséQuintas » 14 Jun 2019 10:53

Vou colocar um exemplo de cada, é que interrompi pra outras tarefas.
Exemplo do que funciona e do que não funciona - ou funciona, mas pra alguma finalidade específica.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 11905
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 12 vezes
Mens.Curtidas: 759 vezes

Tutorial GTWVG

Mensagempor MSDN » 14 Jun 2019 11:06

Depois que vc fizer as postagens que programou, seria muito bom se o link do tópico estive dentro um TXT na pasta contrib do Harbour, trazendo os programadores para cá, ou mesmo no grupo de usuários do Google, aposto que tem muito programador interessado no assunto.
Marcelo Neves
Harbour+MiniGUI : harbourdeveloper.blogspot.com.br
Harbour 3.2, MiniGUI Extended, Borland C++ 5.5.1, xEdit, DBF/CDX, MySQL
(41) 99786-3995
skype : msdn.xbase
https://www.facebook.com/groups/459684654564715/
https://www.youtube.com/channel/UC3IsY8Gwwulg0aWOgW-o-Qg
marcelo.souza.das.neves@gmail.com
MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 529
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: Curitiba - PR
Curtiu: 112 vezes
Mens.Curtidas: 84 vezes

Tutorial GTWVG

Mensagempor lugab » 14 Jun 2019 11:47

Obaaa...
:))
lugab
lugab
Colaborador

Colaborador
 
Mensagens: 862
Data de registro: 19 Mai 2009 15:58
Curtiu: 126 vezes
Mens.Curtidas: 37 vezes

Tutorial GTWVG

Mensagempor JoséQuintas » 14 Jun 2019 22:27

Um exemplo simples, peguei do DEMOWVG mesmo.


PROCEDURE Main

   SetMode( 40, 100 )
   CLS

   @ 3, 5 SAY "Ola"
   wvt_DrawLabel( 1, 40, "Um Teste", 6,, WIN_RGB( 255, 255, 255 ), WIN_RGB( 198, 198, 198 ), "Arial", 26, , , , , .T., .T. )
   wvt_DrawBoxRecessed( 7, 61, 13, 70 )
   wvt_DrawBoxGroup( 15, 59, 18, 72 )
   wvt_DrawBoxGroup( 5, 6, 19, 44 )
   wvt_DrawBoxRecessed( 7, 48, 13, 55 )
   wvt_DrawLine( MaxRow() - 2, 0, MaxRow() - 2, MaxCol(), WVT_LINE_HORZ, WVT_LINE_RECESSED, WVT_LINE_BOTTOM )
   wvt_DrawLine( MaxRow() - 1, 41, MaxRow(), 41, WVT_LINE_VERT, WVT_LINE_RECESSED, WVT_LINE_CENTER )

   Inkey(0)

   RETURN


demowvg.png


Funcionou?
Sim, mas pode estar errado, depende a intenção/uso.
Se movimentar a janela, ampliar, reduzir, somem os desenhos.
Porque? texto tem preferência.. é como save/restore screen, mas só do texto. gráfico não entra nisso.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 11905
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 12 vezes
Mens.Curtidas: 759 vezes

Tutorial GTWVG

Mensagempor JoséQuintas » 14 Jun 2019 22:34

A mesma coisa, movendo a parte de desenhos pra Wvt_Paint()


PROCEDURE Main

   SetMode( 40, 100 )
   CLS

   @ 3, 5 SAY "Ola"

   Inkey(0)

   RETURN

FUNCTION WVT_Paint()

   wvt_DrawLabel( 1, 40, "Um Teste", 6,, WIN_RGB( 255, 255, 255 ), WIN_RGB( 198, 198, 198 ), "Arial", 26, , , , , .T., .T. )
   wvt_DrawBoxRecessed( 7, 61, 13, 70 )
   wvt_DrawBoxGroup( 15, 59, 18, 72 )
   wvt_DrawBoxGroup( 5, 6, 19, 44 )
   wvt_DrawBoxRecessed( 7, 48, 13, 55 )
   wvt_DrawLine( MaxRow() - 2, 0, MaxRow() - 2, MaxCol(), WVT_LINE_HORZ, WVT_LINE_RECESSED, WVT_LINE_BOTTOM )
   wvt_DrawLine( MaxRow() - 1, 41, MaxRow(), 41, WVT_LINE_VERT, WVT_LINE_RECESSED, WVT_LINE_CENTER )

   RETURN NIL


tela.png


Só executei o EXE duas vezes, pra mostrar que numa das telas reduzi o tamanho.
Colocando em Wvt_Paint(), tudo foi repintado.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 11905
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 12 vezes
Mens.Curtidas: 759 vezes

Tutorial GTWVG

Mensagempor JoséQuintas » 14 Jun 2019 22:46

Lembrei que já comentei uma coisa aqui, talvez simplifique explicar/entender.
Vamos usar o termo Windows, e do dia a dia, ao invés de janela: OBJETO

som (2).JPG


Quantos objetos tem aí?
Cinco ???

Errado.
um único objeto, uma única foto.

A tela GTWVG que mostrei até agora, é igual a essa foto, é um único objeto.
CLS limpa tudo, se desenhar, continua sendo um único objeto com tudo.
Se desenhar várias vezes essa foto, continua sendo uma única janela, uma única foto.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 11905
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 12 vezes
Mens.Curtidas: 759 vezes

Tutorial GTWVG

Mensagempor JoséQuintas » 14 Jun 2019 23:03

fonte:
fonte.png


tela:
tela.png


É aí que todos se confundem.
Continua sendo um único objeto, uma única "foto"
Não é porque tem imagem, que virou tela normal igual do Windows, ou HMG, ou OOHG, ou HWGUI.
Não tem nada a ver uma coisa com a outra.
A tela GTWVG é gráfica, e aceita texto e desenho, até agora só usamos essa tela e nada mais - é uma foto que pode ser "desenhada".

Se for comparar isso com HMGE ou HWGUI....
É como o form vazio dessas LIBs, e desenhar à vontade nesse form, talvez usando Bostaurus que tá disponível pra isso.
NENHUM outro objeto, apenas o form/janela.

o fonte acima e as imagens.
test.zip
(96.86 KiB) Baixado 16 vezes


Só comentário: se os exemplos existentes da GTWVG são feios, é porque as imagens são feias, ou, mais provável, usaram imagens pequenas, pra não sobrecarregar o download. Como dá pra ver aí... dá pra usar imagens de qualidade.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 11905
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 12 vezes
Mens.Curtidas: 759 vezes

Tutorial GTWVG

Mensagempor JoséQuintas » 15 Jun 2019 11:49

Agora vamos ao ambiente GUI.... é... apesar de tudo é ambiente GUI.


PROCEDURE Main

   LOCAL oButton

   SetMode( 40, 100 )
   CLS

   oButton := wvgPushButton():New()
   oButton:Caption := "teste 1"
   oButton:PointerFocus := .F.
   oButton:Activate := { || Ola() }
   oButton:Create( ,,{ -1, -5 }, { -3, -50 } )

   oButton := wvgPushButton():New()
   oButton:Caption := "teste 2"
   oButton:PointerFocus := .F.
   oButton:Activate := { || Ola() }
   oButton:Create( ,,{ -5, -5 }, { -3, -50 } )

   Inkey(0)

   RETURN

FUNCTION Ola()

   wapi_MessageBox( , "Ola" )

   RETURN NIL
Anexos
wvg2.png
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 11905
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 12 vezes
Mens.Curtidas: 759 vezes

Tutorial GTWVG

Mensagempor JoséQuintas » 15 Jun 2019 12:18

Agora vamos ao ambiente Windows, estilo LIBs gráficas.

PROCEDURE Main

   LOCAL oButton

   SetMode( 40, 100 )
   CLS

   oButton := wvgPushButton():New()
   oButton:Caption := "teste 1"
   oButton:PointerFocus := .F.
   oButton:Activate := { || Ola() }
   oButton:Create( ,,{ -1, -5 }, { -3, -50 } )

   oButton := wvgPushButton():New()
   oButton:Caption := "teste 2"
   oButton:PointerFocus := .F.
   oButton:Activate := { || Ola() }
   oButton:Create( ,,{ -5, -5 }, { -3, -50 } )

   Inkey(0)

   RETURN

FUNCTION Ola()

   wapi_MessageBox( , "Ola" )

   RETURN NIL


wvg2.png


Qual a diferença deste, para os métodos anteriores?

Agora temos aí 4 objetos:
1 - tela da GTWVG
2 - button teste1
3 - button teste 2
4 - mensagem

Isso não é uma única janela, CADA objeto tem sua janela própria.
Lembram daquilo do texto ter preferência e apagar os gráficos?
Isso continua... mas somente na janela GTWVG, e não nos objetos que estão encima dela.

É como se fossem 4 programas separados, cada um cuidando de uma parte.
O button cuida de si próprio, ele fica lá... aguardando alguma mensagem dizendo o que fazer.
O Windows se vira com esses objetos pra ficar repintando, então o programa só vai dizer se é pra aparecer ou pra sumir.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 11905
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 12 vezes
Mens.Curtidas: 759 vezes

Tutorial GTWVG

Mensagempor JoséQuintas » 15 Jun 2019 12:37

Ao copiar um fonte é bom fazer testes e entender se precisa, ou porque aquela parte

Porque isto?

oButton:PointerFocus := .F.

Isso é pro button não receber o foco. Retirem a linha e testes o programa. Vai parecer travado o ESC não vai funcionar depois de clicar num button.
Porque?
Cada objeto é uma janela e cada janela é independente.
Se o foco está no button... é o button que vai responder às teclas, e não o programa da janela GTWVG.
Então... o PointerFocus := .F. é para o Windows não deixar o foco parar no button, assim não atrapalha.

Resumo:
GTWVG pode ser usada numa única janela gráfica, tudo desenhada nela
Ou usando objetos diferentes - cada um com sua janela - igual qualquer LIB GUI.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 11905
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 12 vezes
Mens.Curtidas: 759 vezes

Tutorial GTWVG

Mensagempor JoséQuintas » 15 Jun 2019 14:00

Faltou complementar:

Cada objeto é como se fosse um programa rodando, com sua própria janela.
Como fazer para apagar/encerrar o button?
obutton:Destroy()

E os outros?
Depende de como fez aquilo. Nos exemplos acima nem dá.
Se usar um array de codeblocks no Wvt_Paint(), seria limpar esse array, para parar de repintar, e forçar alguma atualização de tela.

A partir daqui é escolher as funções wvt* ou os objetos wvg*, e vai verificando a necessidade conforme o uso.

Convém destacar o objeto WvgCrt()
É uma nova janela, com recursos semelhantes à janela principal.
Também pode ter desenhos ou objetos dentro dela.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 11905
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 12 vezes
Mens.Curtidas: 759 vezes

Próximo



Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 2 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro