Página 1 de 1

Eu e meus testes... GTWVG, HWGUI, HMG Extended

Enviado: 21 Jul 2025 22:05
por JoséQuintas
Um fonte simples, com partes comentadas.

Código: Selecionar todos

THREAD STATIC oGUI

FUNCTION GUI()

   RETURN oGUI

PROCEDURE Main

   LOCAL nOpc := 1

   SetMode(33,100)
   CLS
   DO WHILE .T.
      @ 1, 0 PROMPT "(H)HWGUI"
      @ 2, 0 PROMPT "(3)HMG3"
      @ 3, 0 PROMPT "(E)HMGE"
      @ 4, 0 PROMPT "(O)OOHG"
      MENU TO nOpc

      DO CASE
      CASE LastKey() == 27; EXIT
      CASE nOpc == 1; hb_ThreadStart( { || Test2( "DLGAUTOHWGUI" ) } )
      CASE nOpc == 2; hb_ThreadStart( { || Test2( "DLGAUTOHMG3" ) } )
      CASE nOpc == 3; hb_ThreadStart( { || Test2( "DLGAUTOHMGE" ) } )
      CASE nOpc == 4; hb_ThreadStart( { || Test2( "DLGAUTOOOHG" ) } )
      ENDCASE
   ENDDO

   RETURN

FUNCTION Test2( xFrmName )

   hb_gtReload("WVG")
   DO CASE
   //CASE xFrmName == "DLGAUTOFIVEWIN" ; oGui := FIVEWINClass():New()
   CASE xFrmName == "DLGAUTOHWGUI" ;   oGUI := HWGUIClass():New()
   CASE xFrmName == "DLGAUTOHMGE" ;    oGUI := HMGECLASS():New()
   //CASE xFrmName == "DLGAUTOHMG3" ;    oGUI := HMG3Class():New()
   //CASE xFrmName == "DLGAUTOOOHG" ;    oGUI := OOHGClass():New()
   ENDCASE
   Do( "DLGAUTO" )

   //PostQuitMessage(0)

   RETURN Nil

FUNCTION HB_GTSYS

   REQUEST HB_GT_WVG_DEFAULT

   RETURN Nil
O HBP, incluindo o DLGAUTO

Código: Selecionar todos

testmix.prg
errorsys.prg
-DDLGAUTO_AS_LIB
-I..\source

..\source\frm*.prg
..\source\test.prg
..\source\test_loadsetup.prg
..\source\test_setup.prg
..\source\test_dbf.prg
..\source\test.rc

hbct.hbc
-mt

-L.
-llib_hwgui
#-llib_hmg3
-llib_hmge
#-llib_oohg
gtwvg.hbc
hwgui.hbc
#hmg3.hbc
hmge.hbc
#oohg.hbc
Notem que compilei LIB_HMGE.PRG e LIB_HWGUI.PRG em separado, cada fonte é uma lib diferente.
Como eu digo aqui, misturo LIBs, NO EXE, mas nunca misturo fonte de uma lib com fonte da outra.

O resultado... é o que parece... GTWVG no menu principal, opção (ou opções) de DLGAUTO rodando em HWGUI e HMGE.
Podendo chamar várias vezes cada um.

Hoje alterei isto na HMG Extended, SÓ ISTO

Código: Selecionar todos

         IF ! _HMG_MainWindowFirst   // 2025.07.21 try MT
            SetFocus ( _HMG_MainHandle )
         ENDIF                       // 2025.07.21 try MT
Parece que resolveu o problema do foco em multithread.
testmix.png
Falta um probleminha pra fechar janela.
Ao fechar a primeira janela da HMGE, em qualquer thread, fecha TUDO.

Nota: O nome da lib fica no título, porque senão nem dá pra saber que lib está rodando, dependendo do que for usado.

Nota2: esses testes ajudam a esquecer um pouco a nova tributação, depois volto nela olhando por outra perspectiva.

Eu e meus testes... GTWVG, HWGUI, HMG Extended

Enviado: 21 Jul 2025 22:29
por JoséQuintas
Só reforçando outra coisa que já falei por aqui:

GTWVG e HWGUI podem ser misturadas com qualquer outra LIB.
Aqui com HMGE, no aplicativo com FIVEWIN.
Só não dá pra misturar HMG3, HMG Extended, OOHG e FIVEWIN no mesmo EXE, elas tem muita função repetida entre si e não compatíveis.
Quem sabe algum dia....

Eu e meus testes... GTWVG, HWGUI, HMG Extended

Enviado: 22 Jul 2025 12:54
por JoséQuintas
Não pensei nisso....

Talvez com isso HMG Extended esteja pronta pra ser usada sozinha com multithread !!!!!

Eu e meus testes... GTWVG, HWGUI, HMG Extended

Enviado: 23 Jul 2025 13:42
por JoséQuintas
Postei lá no fórum da minigui.
Recebi resposta em private que vai ser acrescentado na próxima versão oficial.
Deve melhorar o uso de MAIN WINDOW OFF, com ou sem multithread.

Meus testes são do tipo "vamos alterar pra ver o que dá".
De vez em quando dão resultado.
Acho que deixando zero fica por conta do próprio Windows.

Eu e meus testes... GTWVG, HWGUI, HMG Extended

Enviado: 29 Jul 2025 14:43
por JoséQuintas
Enviei vídeo para o youtube do teste.

https://www.youtube.com/watch?v=uqKXXEUI7b0



Só o detalhe de fechar a janela HMG Extended que falta resolver.

A primeira janela de cada thread parece ser considerada a Main, e fechou uma fecha todas.

Tirando isso, tá tudo perfeito, até o foco ficou resolvido com a alteração que eu fiz.

Eu e meus testes... GTWVG, HWGUI, HMG Extended

Enviado: 29 Jul 2025 15:57
por JoséQuintas
Acréscimo ao vídeo, talvez não dê pra perceber:

As janelas abrem sempre centralizadas.
Movo cada uma para o menu/thread que a abriu.

As duas janelas de cima são dlgauto usando hwgui.
As duas janelas de baixo são dlgauto usando hmg extended.

Lembram ? multithread é igual vários EXEs.
Cada thread tem sua janela de menu, que acionam outras janelas.
É como ter 1 EXE usando GTWVG, 2 EXEs usando HWGUI e 2 EXEs usando HMG Extended.

O problema que mencionei é como fechar o menu de um EXE, mas ele fechar todos os EXEs.
É fechar o menu de uma thread, e ele fecha todas.

Em HWGUI sem problemas.
Deve ser algo simples em HMGE, mas não tenho conhecimento pra resolver isso.