Página 1 de 1

HMG | SET WINDOW MAIN ON/OFF

Enviado: 05 Fev 2021 16:21
por microvolution
Boa tarde!
alguém sabe dizer como é realmente a sintaxe e em qual condição pode se usar os comandos:

Código: Selecionar todos

SET WINDOW MAIN ON
SET WINDOW MAIN OFF
pelo que percebi se eu usar antes da criação do MAIN WINDOW ela funciona...
se colocar depois não funciona...
mas, afinal, onde tem um tutorial com a sintaxe correta e como usar?

Onde quero usar:
- tenho uma main window em hmg 3.5 e quero chamar módulos (feitos em GTWVG) que ainda não estão em form window da hmg (nem pretendo fazer a migração).
Então, quero chamar o módulo e desativar a WINDOW MAIN da HMG, usando o SET WINDOW MAIN OFF.
Após encerrar o processo quero usar SET WINDOW MAIN ON.
Mas, apareceu erro de sintaxe na compilação.
se alguém souber!
antes que alguém solicite pra eu ver... já vi o exemplo da tela de splash em hmg\samples\

HMG | SET WINDOW MAIN ON/OFF

Enviado: 05 Fev 2021 17:43
por marcosgambeta
Se você quer esconder a janela principal e depois voltar a mostra-la, os comandos são outros:

Código: Selecionar todos

// do arquivo i_window.ch

#xcommand SHOW WINDOW <name> ;
	=>;
	DoMethod ( <"name"> , 'Show' )

#xcommand HIDE WINDOW <name> ;
	=>;
	DoMethod ( <"name"> , 'Hide' )

HMG | SET WINDOW MAIN ON/OFF

Enviado: 05 Fev 2021 18:04
por marcosgambeta
Testei aqui e a ideia funcionou corretamente.

Código: Selecionar todos

#include "minigui.ch"

REQUEST hb_gt_gui_default
REQUEST hb_gt_wvt

PROCEDURE Main()

   DEFINE WINDOW MainWindow ;
      AT 100, 100 ;
      WIDTH 640 ;
      HEIGHT 480 ;
      TITLE "Teste" ;
      MAIN

      DEFINE MAIN MENU
         POPUP "Menu"
            ITEM "Janela 1" ACTION telaconsole1()
            ITEM "Janela 2" ACTION telaconsole2()
         END POPUP
      END MENU

   END WINDOW

   ACTIVATE WINDOW MainWindow

RETURN

STATIC FUNCTION telaconsole1()

   LOCAL cCampo1 := space(30)

   IF !OpenConsole( "Janela console 1", .T., .F. )
      RETURN NIl
   ENDIF

   @ 10,10 SAY "CAMPO1:" GET cCampo1

   READ

   ? cCampo1

   WAIT

   CloseConsole()

RETURN NIL

STATIC FUNCTION telaconsole2()

   LOCAL cCampo1 := space(30)
   LOCAL cCampo2 := space(50)

   IF !OpenConsole( "Janela console 2", .T., .F. )
      RETURN NIl
   ENDIF

   @ 8,10 SAY "CAMPO1:" GET cCampo1
   @ 10,10 SAY "CAMPO2:" GET cCampo2

   READ

   ? cCampo1
   ? cCampo2

   WAIT

   CloseConsole()

RETURN NIL

Código: Selecionar todos

#include "hbgtinfo.ch"

STATIC lFlag := .F.
STATIC pNewGT
STATIC pOldGT

FUNCTION OpenConsole( cTitle, lAltEnter, lClosable )

   IF lFlag
      RETURN .F.
   ENDIF
   
   DoMethod( "MainWindow", "Hide" )

   lFlag := .T.

   pNewGT := hb_gtCreate( "WVT" )
   pOldGT := hb_gtSelect( pNewGT )

   CLS

   hb_gtInfo( HB_GTI_WINTITLE, cTitle )
   hb_gtInfo( HB_GTI_ALTENTER, lAltEnter )
   hb_gtInfo( HB_GTI_CLOSABLE, lClosable )

RETURN .T.

FUNCTION CloseConsole()

   IF !lFlag
      RETURN .F.
   ENDIF

   lFlag := .F.

   hb_gtSelect( pOldGT )
   pNewGT := NIL

   DoMethod( "MainWindow", "Show" )

RETURN .T.
Talvez fazendo desta forma (esconder a janela main sempre que mostrar a janela de console), você consiga a estabilidade que precisa.

HMG | SET WINDOW MAIN ON/OFF

Enviado: 05 Fev 2021 19:47
por Claudio Soto
Por defecto en HMG siempre debe existir una ventana MAIN y debe ser la primera ventana en activarse y siempre que se cierra la ventana MAIN se termina el programa.

SET WINDOW MAIN [ FIRST ] ON|OFF

Cuando es OFF permite que otras ventanas que no sean la MAIN se activen primero, inclusive cuando es OFF no es necesario que exista una ventana MAIN en la aplicacion.

HMG | SET WINDOW MAIN ON/OFF

Enviado: 05 Fev 2021 22:37
por microvolution
meu caso é o seguinte:
- compilei um grande sistema usando a LIB GTWVG para simular o CONSOLE com uma cara mais bonita;
- uso apenas PUSHBUTTON apenas numa tela e uso LOADIMAGE apenas para splash;
- tudo é compilado dentro da IDE/HMG ou via BUILD.BAT e tem funcionado perfeitamente...
até... que resolvi melhorar um pouco mais o visual da aplicação, fazendo o seguinte:
- tela splash, resolvi, usar o exemplo SPLASH da SAMPLES HMG e deu certo;
- as mensagens de interação com o usuário (todas) são da HMG e deu certo;
- então, resolvi fazer um FORM MAIN WINDOW para só ele ser 100% em HMG...
aí que começou os problemas...
para alguns, já estão atá cansados de eu falar sobre isso...
mas, quem sabe, num futuro o Viktor e/ou o(s) mantenedores da HMG achem uma solução, pois, quando a partir do momento que se é acionada a janela GTWVG, ao retornar (retorna perfeitamente) e fecha, pois a janela GTWVG é iniciada com o objeto WVGCRT ou WVGDIALOG...
no momento do DESTROY e isso ocorre perfeitamente, é criada uma outra tela PRETA do nada que fica (escondida) atrás da FORM WINDOW MAIN da HMG.
Mas, a partir daí, aparecem erros de macrosubstitução ("&") ou "=" ou "==" nos arquivos da LIB HMG, que já falei sobre eles noutros grupos.
Então, estou pensando numa forma de separar as LIBs em tempo de execução, talvez um MT=YES (não sei como fazer os comandos/funções) para que quando a HMG chamar a instância GTWVG ela seja como se fosse outro programa e quando retornar ao FORM MAIN WINDOW da HMG, não interfira na HMG.
Daí, alguém me disse pra testar SET WINDOW MAIN ON/OFF que daria certo...
é KKK pra não isniff, traduzindo: "é rir pra não chorar"

HMG | SET WINDOW MAIN ON/OFF

Enviado: 06 Fev 2021 15:11
por Claudio Soto
En la carpeta SAMPLES de HMG vienen algunos ejemplos de aplicacion MT en ambiente GUI.