Hwgui 2.22 release 1

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

Hwgui 2.22 release 1

Mensagem por leandrolinauer »

Bom dia aSimoes.
Fiz testes aqui separado com o seu exemplo, mas não obtive exito, o seu teste roda abre executa mas fazendo um menu e executando para chamar modulos em gtwvw executa a hwgui mas não abre nada da gtwvw, nem colocando em thread(), não obtive exito algum com as duas juntas.
Notei na sua imagem, que tem um browse em HWGUI atras da tela em GTWVW, isto que tentei fazer aqui com menu, mas não da certo.

Se puder me ajudar enviando como a tela principal em HWGUI chamar um módulo em gtwvw.
Meu exemplo que funciona a parte hwgui mas não funciona a GTWVW

Código: Selecionar todos

#include "hwgui.ch"
#include "gtk.ch"
#include "hbthread.ch"

Function Main
Local oWndMain
Memvar oFont

   oFont := HFont():Add( "Courier",0,-14 )
   INIT WINDOW oWndMain MAIN TITLE "HWGUI PRINCIPAL" AT 200,100 SIZE 300,300

   MENU OF oWndMain
     MENU TITLE "&Arquivos"
       MENUITEM "&GTWVW" ACTION JanelaGtwvw() //preciso aqui chamar modulos 100% gtwvw
       SEPARATOR
       MENUITEM "&Saída" ACTION oWndMain:Close()
     ENDMENU
   ENDMENU

   ACTIVATE WINDOW oWndMain

Return Nil

Procedure JanelaGtwvw()

cRotina := "Teste()" //sua rotina em gtwvw
nThread := Hb_ThreadStart( HB_BITOR( HB_THREAD_INHERIT_PUBLIC, ;
                                     HB_THREAD_INHERIT_PRIVATE, ;
                                     HB_THREAD_INHERIT_MEMVARS, ;
                                     HB_THREAD_MEMVARS_COPY ), ;
                                     { ||  &cRotina. } )

   WaitThread( nThread )
Return Nil

FUNCTION WaitThread( nThread )

   DO WHILE .T.
      IF Hb_ThreadWait( nThread, 0.1, .T. ) == 1
         EXIT
      ENDIF
      hwg_DoEvents()
   ENDDO
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

Hwgui 2.22 release 1

Mensagem por Fernando queiroz »

duas coisas use DIALOG em vez de WINDOW e separe os arquivos , o que for hwgui fica em um PRG e gt fica em outro, se ficarem juntos da problemas
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

Hwgui 2.22 release 1

Mensagem por leandrolinauer »

Boa tarde.
Sim os fontes estão separados, o que é gtwvw esta em prg separado do hwgui, o código abaixo é em HWGUI ficaria no principal o qual chama o TESTE() que é em GTWVW.

Código: Selecionar todos

Procedure JanelaGtwvw()

cRotina := "Teste()" //sua rotina em gtwvw
nThread := Hb_ThreadStart( HB_BITOR( HB_THREAD_INHERIT_PUBLIC, ;
                                     HB_THREAD_INHERIT_PRIVATE, ;
                                     HB_THREAD_INHERIT_MEMVARS, ;
                                     HB_THREAD_MEMVARS_COPY ), ;
                                     { ||  &cRotina. } )

   WaitThread( nThread )
Return Nil

FUNCTION WaitThread( nThread )

   DO WHILE .T.
      IF Hb_ThreadWait( nThread, 0.1, .T. ) == 1
         EXIT
      ENDIF
      hwg_DoEvents()
   ENDDO

Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Hwgui 2.22 release 1

Mensagem por JoséQuintas »

leandrolinauer escreveu:Boa tarde.
Sim os fontes estão separados, o que é gtwvw esta em prg separado do hwgui, o código abaixo é em HWGUI ficaria no principal o qual chama o TESTE() que é em GTWVW.
Tem duas questões aí:
- HBC acrescentar arquivo CH automático
- HBMK2 acrescentar arquivo CH, por compilar vários fontes ao mesmo tempo

No caso do HBP pode criar subprojetos, pra isolar ao máximo as configurações

--- principal.hbp ---
-hbcontainer
projetowvw.hbp
projetohwgui.hbp

E um projeto transformar em lib, acrescentando -hblib e o nome de saída -onome
E no outro projeto apenas incluir a lib do anterior -lnome

Lembrando que se não existir chamada a um módulo da lib, a lib pode não ser adicionada.
Neste caso ou aproveita o recurso de hbx, ou adiciona chamada no principal.

Código: Selecionar todos

IF .F. // é só pra linqueditar
   seila()
ENDIF
isto é pra casos do tipo do ( "seila" ) ou &( "seila()" ), onde a função fica de fora do EXE.
Apesar que acho que um #request "seila" seria mais adequado.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Hwgui 2.22 release 1

Mensagem por JoséQuintas »

Vamos voltar ao problema inicial, acho que deixamos passar algo:

Dava erro pra alterar o título da janela.
A janela existe? mesmo que invisível?

Dependendo da LIB que entrar primeiro, pode ou não existir a janela Main() da LIB.
Um primeiro "truque", é forçar que existam as duas Main().

Mas lembro na época que testei, que um problema na hwgui foi que ao fechar a Main() da hwgui, fechava o aplicativo inteiro.
Já não lembro como resolvi, ou se resolvi, mas talvez esteja nesses fontes exemplo que postei.

No caso da GTWVG, colocando como principal, ela acaba contendo uma janela invisível, que vai aparecer assim que for usada.
No caso da GTWVW, não sei se precisa alguma coisa a mais.

Vamos complicar mais: quando usa na compilação -gui, se não indicar mais nada, a janela principal é..... GTWVT, a default do Harbour.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
MSDN
Usuário Nível 4
Usuário Nível 4
Mensagens: 741
Registrado em: 28 Nov 2003 15:55
Localização: CWB
Contato:

Hwgui 2.22 release 1

Mensagem por MSDN »

Quintas, tira uma dúvida...vc sempre falou que ter janelas independentes é melhor para o sistema, mas na prática, visto que o resto do mundo utiliza o método tradicional, sendo modal ou child, qual vantagem prática tem o seu método ?
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Hwgui 2.22 release 1

Mensagem por Itamar M. Lins Jr. »

Ola!
GTWVW no Harbour 3.2 não compila com GCC 10.1 64Bits.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Hwgui 2.22 release 1

Mensagem por JoséQuintas »

Pera aí... tem outra coisa importante....

Quem disse que GTWVW é multithread?
MSDN escreveu:Quintas, tira uma dúvida...vc sempre falou que ter janelas independentes é melhor para o sistema, mas na prática, visto que o resto do mundo utiliza o método tradicional, sendo modal ou child, qual vantagem prática tem o seu método ?
Não exatamente isso. multithread é igual EXE separado. Se é igual EXE separado, funciona independente, só misturando o que você quiser.

Um exemplo prático:

Abrir o mesmo DBF, com mesmo alias, em duas janelas.
Se é em thread diferente, cada janela faz o que quiser com o DBF.
Se é na mesma thread... aí precisa muito controle pra não ter problema.
Pode até usar CLOSE DATABASES, que só vai fechar o que foi aberto naquela thread/janela.
E como tudo é independente, abre e fecha como quiser, na ordem que quiser, até QUIT, só fecha a thread/janela do QUIT.

HWGUI parece que vai fazendo uma única pilha de tudo.
E como é uma única pilha, tem que ir fechando as janelas na ordem em que abriu.

Mas considere que GTWVG é diferente, é janela Windows usada como console.
Ao invés de ficar controlando a parte gráfica em troca de telas, mais fácil ter tela independente.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Hwgui 2.22 release 1

Mensagem por JoséQuintas »

Mas legal mesmo da multithread é ver como os antivírus são um lixo.
A Main do meu aplicativo dispara a thread normal.
No caso de antivírus, onde o antivírus congela a thread principal.... o aplicativo consegue checar todos os DBFs, e fazer mais coisas, mesmo com a thread principal congelada.

É simples assim enganar um antivírus, só executar em thread e nada mais.
E quanto mais threads, maior o estrago antes de ser detectado pelo antivírus.
Digamos que o programa roda por 1 minuto ou mais fazendo o que quiser.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

Hwgui 2.22 release 1

Mensagem por leandrolinauer »

Boa tarde JoséQuintas.
Fiz no meu projeto como você recomendou, mas continua da mesma forma.

Meu hbp principal.

Código: Selecionar todos

@hbmk.hbm
@hbmkSQL.hbm

-oGesCom

# -hbcontainer //não entendi pra que serve, mas pelo nome sugere que seja unido em um unico container
-gui
-prgflag=/m /n
-compr

@GescomGTWVW.HBP  //PROJETOS EM GTWVW
@GescomQT.HBP  //PROJETOS EM QT
# @GescomHWGUI.HBP //PROJETOS EM HWGUI

LeSoft.RC
Se eu incluir o projeto HWGUI
@GescomHWGUI.HBP //PROJETOS EM HWGUI
O sistema da erro em qualquer linha inicial em GTWVW.

O que não ocorre com QT, QT inicia junto e executa o módulo em qt, já com HWGUI nem executa o sistema, da erro e pronto.
Nada que eu fiz faz com que HWGUI rode junto com GTWVW, junto no mesmo sistema, mas em módulos separados.

Grato
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
MSDN
Usuário Nível 4
Usuário Nível 4
Mensagens: 741
Registrado em: 28 Nov 2003 15:55
Localização: CWB
Contato:

Hwgui 2.22 release 1

Mensagem por MSDN »

Obrigado por responder Quintas, mas sinceramente acho que é mais gosto pessoal mesmo, não notei algo que fosse significativo.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Hwgui 2.22 release 1

Mensagem por JoséQuintas »

Erro na idéia.

-hbcontainer indica um projeto sem arquivos, apenas subprojetos.

O problema é:

Isto gera cada projeto, compila e linquedita cada um, gera lib, exe, até mais de um, se for o caso
projeto1.hbp
projeto2.hbp

Isto junta os hbps no hbp atual, compila e linquedita tudo como um EXE só ou uma LIB só, a mesma coisa de fazer um hbp único
@projeto1.hbp
@projeto2.hbp
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Hwgui 2.22 release 1

Mensagem por JoséQuintas »

MSDN escreveu:Obrigado por responder Quintas, mas sinceramente acho que é mais gosto pessoal mesmo, não notei algo que fosse significativo.
Talvez interesse mais pra GTWVG ou GT multithread.
Compile usando -mt gtwvg.hbc
Vai ver 10 janelas independentes... desde que tire uma de cima da outra.... rs

Código: Selecionar todos

#include "inkey.ch"

PROCEDURE Main

   LOCAL nCont

   FOR nCont = 1 TO 5
      hb_ThreadStart( { || Test1() } )
      Inkey(0.3)
      hb_ThreadStart( { || Test2() } )
      Inkey(0.3)
   NEXT
   hb_ThreadWaitForAll()

   RETURN

FUNCTION Test1()

   LOCAL nCont := 0

   hb_GtReLoad( "WVG" )
   SetMode( 30, 50 )
   CLS
   DO WHILE Inkey() != K_ESC
      ? nCont++
   ENDDO

   RETURN NIL

PROCEDURE Test2

   LOCAL cTexto1 := Space(30), cTexto2 := Space(30), GetList := {}

   hb_gtReload( "WVG" )
   SetMode( 30, 50 )
   CLS
   @ 1, 0 SAY "linha1" GET cTexto1
   @ 2, 0 SAY "linha2" GET cTexto2
   READ

   RETURN

PROCEDURE HB_GTSYS

   REQUEST HB_GT_WVG_DEFAULT

   RETURN
Não sei se ajuda no problema do tópico.
Ao definir GTWVG como default, o Harbour já entra com a janela GTWVG ativa, mas oculta.
Se não fizer isso, provavelmente entra a console ou outra no lugar, e talvez nem funcione direito.

hb_gtReload() é onde a thread carrega uma janela pra ela, separada da principal.
Lembrando que JANELA NÃO significa apenas a janela, mas input/output, teclado/mouse/saída pra tela

Esse é o ponto onde a mistura de LIBs pode encrencar, porque cada uma vai querer ser a primeira, e as demais podem depender da primeira.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Hwgui 2.22 release 1

Mensagem por JoséQuintas »

JoséQuintas escreveu:Esse é o ponto onde a mistura de LIBs pode encrencar, porque cada uma vai querer ser a primeira, e as demais podem depender da primeira.
E aí também pode entrar a multithread: como fica igual EXE separado.... isso dá uma isolada nas LIBs, deixando uma em cada thread, e evitando interferência.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Hwgui 2.22 release 1

Mensagem por JoséQuintas »

Só pra lembrar os planos B e C:

Plano B: se conseguir compilar junto, pode chamar o mesmo EXE ora gtwvw ora hwgui.

Código: Selecionar todos

FUNCTION Main( cModulo )
   IF cModulo != NIL
      // configura hwgui
      do ( cModulo )
      RETURN
   ENDIF
   // usa GTWVW
....

DO WHILE .T.
   @ 1, 0 PROMPT "1 - compras wvw"
   @ 2, 0 PROMPT "2 - vendas hwgui"
   MENU TO nOpc
   DO CASE
   CASE nOpc == 1
      // modulo
   CASE nOpc == 2
      RUN ( "ESTE.EXE   MODULO0020" )
      RETURN
   ENDCASE
ENDDO
E o plano C, a mesma coisa, mas com EXEs separados, um pra tudo que é GTWVW e outro pra tudo que é HWGUI.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder