Página 3 de 5

Usar GTWVG

Enviado: 11 Dez 2015 15:03
por JoséQuintas
Vamos devagar...

Não precisa colocar no BAT como linha de comando.
Pode colocar tudo isso no HBP.
O melhor é incluir no HBP mesmo, assim tem toda informação/configuração do projeto em um único arquivo.

Dentro do hbp:

Código: Selecionar todos

-oSICCA35GT
*.PRG
HBWIN.HBC 
GTWVG.HBC 
XHB.HBC 
HBCT.HBC 
-m
Não existe uma ordem obrigatória.
Esta ordem é uma questão pessoal minha:
- primeiro o output, pra chamar a atenção sobre o nome que será gerado (-oSICA35GT)
- Depois os PRGs
- Depois os HBCs referentes a LIBs que possuem HBC
- Depois LIBs extras que não possuem HBC
- E por último os parâmetros extras

Só comentário: A opção que uso aqui é incluir TODOS os fontes da pasta, então uso *.PRG
Isso só é válido se sua pasta não contiver PRGs de teste junto.
Facitita pra criar novos fontes. Basta criar na pasta e são inclusos no projeto automaticamente.


Bom, se estiver gráfico, GTWVG, não funciona alterar em propriedades.
Mas basta usar o mouse e redimensionar a janela, ou maximizar, coisa que o usuário sabe fazer numa boa.


Essa é apenas a compilação pra ver GTWVG funcionando, sem nenhum recurso especial da GTWVG.
A partir daí já dá acrescentar alguns recursos:

1. Usar um fonte diferente do fonte padrão (fonte Lucida Console ou outro)

2, Salvar/Restaurar a configuração de tamanho. Assim o usuário vai ver sempre do jeito que deixar

3. Atribuir um ícone para a janela de aplicativo

4. Selecionar qualquer cor do Windows pra usar no lugar das cores originais

5. Verifique o funcionamento do mouse em geral: não sei se me entendeu direito antes, GTWVG e mouse não tem nada a ver. Não é a GTWVG que vai dar recursos de mouse, o Harbour por si só já tem isso, mesmo em console

Aí já vai ter algumas vantagens simples que não tinha antes.

Se depois disso quiser brincar com botões... aí é só dizer.

Não sei se percebeu o que acabou de postar:
"eu tô rindo à toa".

Isso mostra que não precisa de grandes alterações pra gente se animar.
A questão é uma só: ficar tranquilo com o que está fazendo.
Pode acontecer o mesmo do lado do cliente: ele começar a ver progressos, e ficar tranquilo.

Se a gente correr, pode cair e se quebrar.
Se a gente for devagar, a gente chega lá.
Então é ir alterando/aprendendo uma coisa de cada vez.
Devagar pra aprender, e aumentando a velocidade conforme for aprendendo e estiver certo disso.
É por aí.

E aproveitar a empolgação e dividir com o cliente, pra ele se empolgar também.

Usar GTWVG

Enviado: 11 Dez 2015 16:03
por microvolution
OIA NÓIS AQUI TRAVEIS...
por onde pesquiso não encontro material sobre GTWVG a não ser neste tópico/fórum aqui...

onde tem materiais, tutorias, video aula, etc... dos recursos da GTWVG?

Usar GTWVG

Enviado: 11 Dez 2015 16:13
por asimoes
Essas informações você vai encontrar nas compilações do harbour oficial 3.2 e fork 3.4 na pasta contrib\gtwvg

Usar GTWVG

Enviado: 11 Dez 2015 16:49
por microvolution
sim..
asimoes escreveu:Essas informações você vai encontrar nas compilações do harbour oficial 3.2 e fork 3.4 na pasta contrib\gtwvg
descobri essa pasta, pois lembrei-me que tem a contrib\hbwin, "pensei ká com meus butões" --> deve ter também da gtwvg... e realmente tem e testei todos os exemplos (compilei e executei) sem olhar o conteúdo dos .PRGS, mas, os arquivos .PRGS que começam com o "_" (unerline) não compilam. Cada um deles gera algum tipo de erro, informando que falta alguma LIB para ser anexada.
Lembrando que compilei no CMD usando HBMK2 nomedoprg.PRG GTWVG.
exemplo compilando o _xbp.prg:
erro: referenciado, faltando, mas funções desconhecidas: GETRESOURCE().

Qual foi, qual é, que que tu tá nessa? :%

achei até mais interessante (por enquanto) o resultado da compilação com a GTWVG, que inclusive aceita as mensagens YESNO (em modo gráfico - não são as da HMG) que V.Sa. ou o "jquintas" me passou no tópico do WIN_PRN.

Pude observar que até aceitou a minha font (VISUALIB) que criei que relembra a antiga lib VL2 (VISUALIB DO CLIPPER antigo) lembra?
acho que a linha que reconhece tal fonte (que está instalada no windows) é esta aqui que já tinha no meu sistema, mas, não funcionava na HMG 3.0.XX:

Código: Selecionar todos

HB_GtInfo( HB_GTI_FONTNAME, 'VisualLib' )
Por enquanto... vamos nos falando...

Usar GTWVG

Enviado: 11 Dez 2015 17:43
por JoséQuintas
Tem exemplos complexos na pasta harbour\contrib\gtwvg\tests
Quando procuro alguma coisa sobre GTWVG, praticamente só encontro meus posts.

Mas dê uma olhada neste post, tem mais do que apenas GTWVG.

https://pctoledo.org/forum/viewto ... t=allinone

Por exemplo, relatórios em PDF.

Pelo jeito, ao invés de acalmar a parte gráfica, acabei despertando ainda mais o interesse nisso.

Usar GTWVG

Enviado: 11 Dez 2015 18:11
por microvolution
prezados professores,
fui testar a colocação do ícone do meu aplicativo no canto superior esquerdo da tela em run-time, usando a linha de exemplo:

Código: Selecionar todos

AAdd( aBlocks, {|| Wvt_SetIcon( GetResource( "vr_1.ico" ) ) } ) // aparecer ícone no topo da tela inicial gtwvg 11/12/15w
Incluí #include "wvgparts.ch" (os outros já estavam no meu aplicativo) pra ver se era a falta dele...
... mas, infelizmente deu como inexistente a GetResource... pois então, donde vem isso?

Usar GTWVG

Enviado: 11 Dez 2015 19:38
por microvolution
olá pessoal...

bom, andei fazendo alguns testes no meu aplicativo (com base na contrib\gtwvg\tests) de partes do demowvg.prg e esbarrei-me nalgumas zigziras:
as funções abaixo não são reconhecidas:

Código: Selecionar todos

   // WvtSetKeys( .T. ) // não funcionou 11/12/15w
   // Popups( 1 ) // não funcionou 11/12/15w
essa linha abaixo, coloquei-a, mas, para que serve afinal:

Código: Selecionar todos

#include "wvgparts.ch"
a linha abaixo, relata que o GetResource não existe:

Código: Selecionar todos

  // AAdd( aBlocks, {|| Wvt_SetIcon( GetResource( "vr_1.ico" ) ) } ) // aparecer ícone no topo da tela inicial gtwvg 11/12/15w
Também, quando clicamos no botão MAXIMIZAR o botão de retorno (RESTAURAR) fica desabilitado e o botão FECHAR (X) não funciona. Consegui (não sei como) fazer um RESTAURAR e a tela ficou totalmente descontrolada (caracteres desarranjados)...

Se aqui alguém puder voltar ao tópico sobre o WIN_PRN, pra não misturar as coisas, lá postei mais algumas dúvidas:
https://pctoledo.org/forum/viewto ... 71#p101271

Usar GTWVG

Enviado: 11 Dez 2015 20:43
por JoséQuintas
Tome o máximo de cuidado com os exemplos da GTWVG, eles complicam demais.

Vamos ao ícone do aplicativo:

1) Acrescentar a imagem DENTRO do EXE e definir para o aplicativo (no Windows)
Significa apenas que a imagem vai estar disponível, e só vai ser usada pelo Windows quando olhar a pasta

crie um arquivo com extensão RC para o projeto, e acrescente o ícone desta forma
Com o nome de AppIcon funciona em mingw ou msvc

Código: Selecionar todos

-------- exemplo.rc
AppIcon        ICON     "meuicone.ico"

2) Definir o ícone pra janela no PRG
Repare que é o mesmo nome definido no arquivo rc

Código: Selecionar todos

#include "hbgtinfo.ch"
   hb_gtInfo( HB_GTI_ICONRES, "AppIcon" )

3) Última etapa. O arquivo RC passou a fazer parte do seu projeto.
Acrescente o nome no arquivo HBP

Código: Selecionar todos

exemplo.rc
Nessa etapa entra o compilador de resources, o Harbour executa automaticamente de acordo com o PATH.
O que pode dar erro aqui:
- o Harbour não achar o EXE que compila resource
- esquecer de incluir o arquivo RC dentro do HBP
- nome errado do arquivo rc
- nome errado do arquivo de ícone
- nome errado no comando de definir ícone

Então, se der erro é só confirmar se colocou os nomes certos, afinal é você quem vai decidir que nomes vai usar.

Nota:
Até aqui não é nenhum recurso da GTWVG.
Podemos dizer que nem perdeu tempo com GTWVG, porque a única alteração pra ela foi acrescentar gtwvg.hbc

Entendeu o espírito da coisa?
Está começando a mudar o visual sem nem mexer com lib gráfica.

Usar GTWVG

Enviado: 11 Dez 2015 20:58
por microvolution
então... como já disse anteriormente também, quando no RUN-TIME o compilador encontra um erro (variável inexistente, etc) a tela vermelha aparece, mas as linhas onde o erro apareceu não dá pra ler.
como fazemos para dar uma pausa pra gente ler, pois não executa em modo console pra que a gente veja as linhas?
se acontecer no cliente, como o funcionário (usuário final do sistema) vai nos informar onde e quando aconteceu o erro?
na HMG, como executa (literalmente) em modo console é muito fácil descobrir as linhas de erro, mesmo sem um ERRORSYS personalizada...

vlw????

Usar GTWVG

Enviado: 11 Dez 2015 21:14
por JoséQuintas
Aí entra o que comentei: precisa uma errorsys pra GUI justamente por causa disso, a janela fecha por não ser console.

Segue a que uso. Pode acrescentar mais informações aí como versão do seu aplicativo, usuário logado, dados do computador, etc.
Basicamente desviar pra arquivo e abrir no bloco de notas, sempre acumulando os erros em hb_out.log

Ou seja, se enviar esse arquivo por email, tem todos os erros.

Lembre-se disto na hora que for olhar a mensagem de erro: se não apagar esse arquivo hb_out.log, vai ter todos os erros da vida inteira do aplicativo.
Como é aberto no bloco de notas, já aproveita e apaga tudo.

Só pra reforçar: não é alteração exclusiva pra GTWVG. Apenas ao invés de mostrar na tela vai gravar no disco, e abrir no bloco de notas.
Assim funciona em modo console ou modo gráfico.

Código: Selecionar todos

*----------------------------------------------------------------
* ERRORSYS                                                       *
*----------------------------------------------------------------

#include "error.ch"
#include "hbgtinfo.ch"

// put messages to STDERR
#command ? <list,...>   =>  ?? HB_EOL() ; ?? <list>
#command ?? <list,...>  =>  OutErr(<list>)

* ErrorSys()
* Note:  automatically executes at startup

PROCEDURE ERRORSYS

   ErrorBlock( { |e| DefError( e ) } )
   RETURN

* DefError()

STATIC FUNCTION DefError( e )
   LOCAL nCont, cMessage, aOptions, nChoice

   // by default, division by zero yields zero
   IF ( e:GenCode == EG_ZERODIV )
      RETURN ( 0 )
   ENDIF

   // For network open error, set NETERR() and subsystem default
   IF ( e:GenCode == EG_OPEN .AND. e:OsCode == 32 .AND. e:CanDefault )
      NetErr( .T. )
      RETURN ( .F. )	// NOTE
   ENDIF

   // for lock error during APPEND BLANK, set NETERR() and subsystem default
   IF ( e:GenCode == EG_APPENDLOCK .AND. e:CanDefault )
      NetErr( .T. )
      RETURN ( .F. )	// NOTE
   ENDIF

   // build error message
   cMessage := ErrorMessage(e)

   // build options array
   // aOptions := { "Break", "Quit" }
   aOptions := { "Quit" }

   IF e:GenCode == EG_WRITE .OR. e:GenCode == EG_READ .OR. e:GenCode == EG_LOCK .OR. e:GenCode == EG_APPENDLOCK
      e:CanRetry := .T.
   ENDIF

   IF ( e:CanRetry )
      AAdd( aOptions, "Retry" )
   ENDIF

   IF ( e:CanDefault )
      AAdd( aOptions, "Default" )
   ENDIF

   // put up alert box
   IF "DATA WIDTH ERROR" $ Upper( cMessage ) .AND. e:CanDefault
      nChoice := aScan( aOptions, "Default" ) // default
   ELSE
      nChoice := 0
   ENDIF
   DO WHILE ( nChoice == 0 )
      IF ( Empty(e:osCode) )
         nChoice := Alert( cMessage, aOptions )
      ELSE
         nChoice := Alert( cMessage + ";(DOS Error " + Ltrim( Str( e:OsCode ) ) + ")", aOptions )
      ENDIF
      IF ( nChoice == NIL )
         EXIT
      ENDIF
   ENDDO

   IF ( !Empty( nChoice ) )
      // do as instructed
      IF ( aOptions[ nChoice ] == "Break" )
         Break(e)
      ELSEIF ( aOptions[ nChoice ] == "Retry" )
         RETURN (.T.)
      ELSEIF ( aOptions[ nChoice ] == "Default" )
         RETURN (.F.)
      ENDIF
   ENDIF

   // display message and traceback
   IF ( !Empty( e:OsCode ) )
      cMessage += " (DOS Error " + Ltrim( Str( e:OsCode ) ) + ") "
   ENDIF

   WriteErrorLog( , 1 ) // com id maquina
   ? cMessage
   WriteErrorLog( cMessage )
   nCont := 2
   DO WHILE ( .NOT. Empty( ProcName( nCont ) ) )
      cMessage = "Called from " + Trim( ProcName( nCont ) ) + "(" + Ltrim( Str( ProcLine( nCont ) ) ) + ")  "
      ? cMessage
      WriteErrorLog( cMessage )
      nCont++
   ENDDO
   WriteErrorLog( Replicate( "-", 80 ) )
   RUN ( "start notepad.exe hb_out.log" )
   // give up
   ErrorLevel(1)
   QUIT
   RETURN (.F.)


* ErrorMessage()

STATIC FUNCTION ErrorMessage(e)
   LOCAL cMessage

   // start error message
   cMessage := if( e:Severity > ES_WARNING, "Error ", "Warning " )

   // add subsystem name IF available
   IF ( ValType( e:SubSystem ) == "C" )
      cMessage += e:SubSystem()
   ELSE
      cMessage += "???"
   ENDIF

   // add subsystem's error code IF available
   IF ( ValType( e:SubCode ) == "N" )
      cMessage += ( "/" + Ltrim(Str( e:SubCode ) ) )
   ELSE
      cMessage += "/???"
   ENDIF

   // add error description IF available
   IF ( ValType( e:Description ) == "C" )
      cMessage += ( "  " + e:Description )
   ENDIF

   // add either filename or operation
   IF ( ! Empty( e:Filename ) )
      cMessage += (": " + e:Filename )
   ELSEIF ( ! Empty( e:Operation ) )
      cMessage += ( ": " + e:Operation )
   ENDIF
   RETURN ( cMessage )


FUNCTION WriteErrorLog( cText, nDetail )
   LOCAL nHandle, cFileName, nCont, nCont2

   cText   := iif( cText == NIL, "", cText )
   nDetail := iif( nDetail == NIL, 0, nDetail )

   IF nDetail > 0
      WriteErrorLog( Replicate( "-", 80 ) )
      WriteErrorLog( "Error on "       + Dtoc( Date() ) + " " + Time() )
      WriteErrorLog()
   ENDIF
   cFileName := "hb_out.log"
   IF .NOT. File( cFileName )
      nHandle := fCREATE( cFileName )
      fClose( nHandle )
   ENDIF

   nHandle := fOpen( cFileName, 1 )
   fSeek( nHandle, 0, 2 )
   fWrite( nHandle, cText + HB_EOL() )
   IF nDetail > 1
      nCont  := 2
      nCont2 := 0
      DO WHILE nCont2 < 5
         IF Empty( ProcName( nCont ) )
            nCont2++
         ELSE
            cText := "Called from " + Trim( ProcName( nCont ) ) + "(" + Ltrim(Str( ProcLine( nCont ) ) ) + ")  "
            fWrite( nHandle, cText + HB_EOL() )
         ENDIF
         nCont++
      ENDDO
      fWrite( nHandle, HB_EOL() )
   ENDIF
   fClose( nHandle )
   RETURN NIL

Usar GTWVG

Enviado: 15 Dez 2015 22:49
por microvolution
opa boa noite!
implementei e teste o "errorsys" que manda para hb_out, ficou perfeito: manda e acumula os erros.

Agora, quanto as mensagens de erro que citei anteriormente: tais como:
- hb_fun_getresouce
- HB_FUN_WVTSETOBJECTS
- HB_FUN_WVTSETBLOCKS
etc...
o que está faltando do exemplo do DEMOWVG.prg?
alguém sabe?

Estou querendo aos poucos testando, pois não tem nenhum guia de referência, da GTWVG... se tiver alguém me fale, pois no meu site http://www.mvinfo.wmx.net.br/programacao traduzi alguma coisa que compilei da WIN_32PRN (xharbour) que é quase idêntica à WIN_PRN do harbour.

Então, já pesquisei nesses últimos dias, e não achei nada de guia ou manual da GTWVG.

Bom, como ela compila em modo gráfico (parece CONSOLE, mas não é), então, quero aprender a implantar aquelas duas barras que existem na tela padrão:
- barra de cabeçalho
- barra de rodapé
pra que coloquemos alguns botões e substitua o MENU comum por um MENU de botões, e teclas ALT, etc...

alguém gostaria de comentar essas minhas dúvidas?

Usar GTWVG

Enviado: 16 Dez 2015 12:18
por Jairo Maia
Microvolution, acabei de testar o exemplo GTWVG da pasta contrib e compilou sem problemas. Fiz também o teste de isolar a pasta tests e compilar e o resultado foi o mesmo.

Usar GTWVG

Enviado: 16 Dez 2015 18:24
por microvolution
Jairo Maia escreveu:Microvolution, acabei de testar o exemplo GTWVG da pasta contrib e compilou sem problema
Prezado professor e parceiro Jairo, fiz também e tudo funcionou, o, que não entendi é usar partes do demogvw.prg e aconteceu as mensagens de erro.

Afinal, quero:
1 - aprender a usar os GETs amarelos com o mou funcionando perfeitamente como lá está;
2 - colocar botões abaixo do menu. No meu caso só tenho 3 menus: CADASTROS, CONSULTAS e RELATÓRIOS, mas, dentro deles possuem algumas das mais importantes e mais usais opções, que são: CLIENTES, ORÇAMENTOS, BAIXAR (ORÇAMENTOS) e EXTRATOS. Para estas opções quero colocar botões de atalhos, mas, como entendi do prezado professor JQuintas (acho quem foi ele), esta LIB tem aparência de CONSOLE mas é gráfica, coisa que a HMG não é, pois na HMG continua com aparência e funcionamento de CONSOLE.
3 - trocar meu MENU que não funciona MOUSE e suas opções por modo GRÁFICO.

Mas, tudo isso, sem a necessidade de muitas mudanças no código, pois na HMG, não consegui ver jeito de fazer isso sem muitas mudanças.
Se for pra mudar muito, é melhor eu ir pro Delphi XEx e começar um projeto novo por lá. Só não fiz isso ainda, por 2 motivos:
1 - eu amo demais o clipper e foi uma das primeiras que aprendi e me consolidei e o maior desafio, nunca ganhei din din com ele (então é um grande desafio);
2 - no Delphi não consegui usar o banco de dados dbf/ntx, pois lá não é nativo esse tipo de tabela de index. Lá é dbf/cdx. E dbf/cdx achei muito complexo, apesar que um professor daqui do fórum, me foi muito gentil e bem paciente em tentar me ensinar, mas, também percebi que terei que mexer muita coisa no meu código.

Então, me empolguei com essa GTWVG e abri mão temporariamente da IDE da HMG 3.0.xx e não instalei ainda a 3.4.2, apesar de ter já baixo.
Vlw!

Usar GTWVG

Enviado: 02 Fev 2018 20:33
por microvolution
boa noite!
"2015 já passou;
2016 também;
2017 acabou recente; e
2018 já estamos em 02 fevereiro.

Oh my God, como estamos vivendo no fim dos tempos!
"
microvolution escreveu:1 - aprender a usar os GETs amarelos com o mou funcionando perfeitamente como lá está;
2 - colocar botões abaixo do menu. No meu caso só tenho 3 menus: CADASTROS, CONSULTAS e RELATÓRIOS, mas, dentro deles possuem algumas das mais importantes e mais usais opções, que são: CLIENTES, ORÇAMENTOS, BAIXAR (ORÇAMENTOS) e EXTRATOS. Para estas opções quero colocar botões de atalhos, mas, como entendi do prezado professor JQuintas (acho quem foi ele), esta LIB tem aparência de CONSOLE mas é gráfica, coisa que a HMG não é, pois na HMG continua com aparência e funcionamento de CONSOLE.
3 - trocar meu MENU que não funciona MOUSE e suas opções por modo GRÁFICO.
Alguém sabe se tem um mantenedor da GTWVG ou ela está caminhando realmente para o fim?
e a GTWVW?
ou qual a LIB que está mais no gosto dos programadores e mantenedores?

Usar GTWVG

Enviado: 02 Fev 2018 20:43
por JoséQuintas
O Pritpal Bedi, que é o autor, disse que deve dar uma olhada em breve.
Isso foi após e ter feito uma pergunta sobre determinado recurso.