Clipper On Line • Ver Tópico - HMG | EXECUTAR MÓDULO CONSOLE DENTRO DE FORM WINDOW MAIN

HMG | EXECUTAR MÓDULO CONSOLE DENTRO DE FORM WINDOW MAIN

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

HMG | EXECUTAR MÓDULO CONSOLE DENTRO DE FORM WINDOW MAIN

Mensagempor microvolution » 01 Fev 2021 09:29

Bom dia a Todos(as)!
Migramos um grande sistema para harbour usando a HMG modo console.
Para LIB gráfica (temporária) usamos a GTWVG que vem inclusa na HMG 3.4 e 3.5 dentro da pasta \CONTRIBS\
Então, o sistema está rodando certinho...
Agora, estamos querendo aos poucos fazer as trocas das telas e implantando-as no cliente final, pois será um trabalho manual e árduo.
Então, começamos pelo começo:
TROCAR AS TELAS:
- DE SPLASH;
- DE LOGIN;
- TELA PRINCIPAL.

Bom, agora a pergunta que não quer calar:
Como faço para ACIONAR/CHAMAR telas em modo CONSOLE (@ SAY, GET, READ) que ainda não foram substituídas com o FORM WINDOW (@ LABEL, TEXTBOX, BUTTONS, etc), de dentro do FORM WINDOW (MAIN MENU) sem a necessidade de usar qualquer outra LIB GRÁFICA?
ou seja, sem necessidade de usar GTWVG, GTWVW, etc?
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
microvolution
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

HMG | EXECUTAR MÓDULO CONSOLE DENTRO DE FORM WINDOW MAIN

Mensagempor JoséQuintas » 01 Fev 2021 10:26

microvolution escreveu:ou seja, sem necessidade de usar GTWVG, GTWVW, etc?


Impossível.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

HMG | EXECUTAR MÓDULO CONSOLE DENTRO DE FORM WINDOW MAIN

Mensagempor marcosgambeta » 01 Fev 2021 11:42

Tente compilar este exemplo e veja se é o que deseja fazer:

#include "minigui.ch"
#include "hbgtinfo.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)

   hb_gtReload("WVT")

   CLS

   hb_gtInfo( HB_GTI_WINTITLE, "Janela console 1" )
   hb_gtInfo( HB_GTI_ALTENTER, .T. )
   hb_gtInfo( HB_GTI_CLOSABLE, .F. )

   @ 10,10 SAY "CAMPO1:" GET cCampo1

   READ
   
   ? cCampo1

   WAIT

   hb_gtReload("GUI")

RETURN NIL

STATIC FUNCTION telaconsole2()

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

   hb_gtReload("WVT")

   CLS

   hb_gtInfo( HB_GTI_WINTITLE, "Janela console 2" )
   hb_gtInfo( HB_GTI_ALTENTER, .T. )
   hb_gtInfo( HB_GTI_CLOSABLE, .F. )

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

   READ

   ? cCampo1
   ? cCampo2

   WAIT

   hb_gtReload("GUI")

RETURN NIL


Se for isto, pode servir de ponto de partida.
Atenciosamente,
Marcos Antonio Gambeta
marcosgambeta
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 318
Data de registro: 16 Jun 2005 22:53
Curtiu: 2 vezes
Mens.Curtidas: 40 vezes

HMG | EXECUTAR MÓDULO CONSOLE DENTRO DE FORM WINDOW MAIN

Mensagempor marcosgambeta » 01 Fev 2021 13:51

Para evitar que o usuário abra mais de uma janela de console, pode-se usar uma flag (entre outros recursos):

#include "minigui.ch"
#include "hbgtinfo.ch"

REQUEST hb_gt_gui_default
REQUEST hb_gt_wvt

STATIC lFlag := .F.

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 lFlag
      RETURN NIl
   ENDIF

   lFlag := .T.

   hb_gtReload("WVT")

   CLS

   hb_gtInfo( HB_GTI_WINTITLE, "Janela console 1" )
   hb_gtInfo( HB_GTI_ALTENTER, .T. )
   hb_gtInfo( HB_GTI_CLOSABLE, .F. )

   @ 10,10 SAY "CAMPO1:" GET cCampo1

   READ

   ? cCampo1

   WAIT

   hb_gtReload("GUI")

   lFlag := .F.

RETURN NIL

STATIC FUNCTION telaconsole2()

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

   IF lFlag
      RETURN NIl
   ENDIF

   lFlag := .T.

   hb_gtReload("WVT")

   CLS

   hb_gtInfo( HB_GTI_WINTITLE, "Janela console 2" )
   hb_gtInfo( HB_GTI_ALTENTER, .T. )
   hb_gtInfo( HB_GTI_CLOSABLE, .F. )

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

   READ

   ? cCampo1
   ? cCampo2

   WAIT

   hb_gtReload("GUI")

   lFlag := .F.

RETURN NIL
Atenciosamente,
Marcos Antonio Gambeta
marcosgambeta
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 318
Data de registro: 16 Jun 2005 22:53
Curtiu: 2 vezes
Mens.Curtidas: 40 vezes

HMG | EXECUTAR MÓDULO CONSOLE DENTRO DE FORM WINDOW MAIN

Mensagempor JoséQuintas » 01 Fev 2021 16:08

Tá aí uma solução interessante.
Ao trocar pra "janela GUI", a janela GTWVG é liberada, porque nada mais prende a janela.

Funciona também com hb_gtLoad( "WVG" ) nos dois lugares.
Isso porque a "nova" janela WVG não foi aberta, e não existe.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

HMG | EXECUTAR MÓDULO CONSOLE DENTRO DE FORM WINDOW MAIN

Mensagempor asimoes » 01 Fev 2021 16:20

Se quiser mostrar a tela maximizada:

Hb_GtInfo( HB_GTI_MAXIMIZED, .T. )
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

HMG | EXECUTAR MÓDULO CONSOLE DENTRO DE FORM WINDOW MAIN

Mensagempor JoséQuintas » 01 Fev 2021 16:29

Fiz um teste adicional, mas executa uma janela por vez.

            ITEM "As duas"  ACTION { || TelaConsole1(), TelaConsole2() }


Mas fiz outra coisa: chamar a opção 1 e depois chamar a opção 2

Fica a execução da opção 2 e depois trava tudo.

NÃO vai poder ter duas janelas WVG abertas, tem que ser uma de cada vez.

Já prepare pra evitar o travamento.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

HMG | EXECUTAR MÓDULO CONSOLE DENTRO DE FORM WINDOW MAIN

Mensagempor asimoes » 01 Fev 2021 16:34

Funciona +- com a HwGUi o problema é isso

@ 10,10 SAY "CAMPO1:" GET cCampo1

A hwgui tem o objeto say e quando a tela é exibida não mostra nada, tem conflito
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

HMG | EXECUTAR MÓDULO CONSOLE DENTRO DE FORM WINDOW MAIN

Mensagempor JoséQuintas » 01 Fev 2021 16:40

Já acrescentei como exemplo na HMG.
IMPEDIR a abertura de mais de uma janela é OBRIGATÓRIO.
E nem pode ter mensagem de alerta, pelo menos não da GTWVG.

demo.prg
(1.21 KiB) Baixado 122 vezes


Nota: talvez aí possa entrar a wvgCrt()
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

HMG | EXECUTAR MÓDULO CONSOLE DENTRO DE FORM WINDOW MAIN

Mensagempor JoséQuintas » 01 Fev 2021 16:50

Só comentário:

Acho que fica interessante usar só o hb_gtLoad( "WVG" ) nos dois lugares, assim fica claro que é uma necessidade da GTWVG, e não uma interferência da LIB gráfica.
Do mesmo jeito que aconteceria com GTWVG sozinha, vai acontecer com ela misturada a LIB gráfica.
Não é o fato de poder chamar duas vezes a janela GTWVG, que vai transformar a janela default em multithread.

Talvez com wvgCrt() dê certo, ou talvez precise de outra janela GTWVG Main escondida.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

HMG | EXECUTAR MÓDULO CONSOLE DENTRO DE FORM WINDOW MAIN

Mensagempor asimoes » 01 Fev 2021 16:51

Talvez em uma janela thread, funcione
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

HMG | EXECUTAR MÓDULO CONSOLE DENTRO DE FORM WINDOW MAIN

Mensagempor marcosgambeta » 01 Fev 2021 16:52

Segue outro exemplo para testes, usando hb_gtCreate e hb_gtSelect:

#include "minigui.ch"
#include "hbgtinfo.ch"

REQUEST hb_gt_gui_default
REQUEST hb_gt_wvt

STATIC lFlag := .F.

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 pNewGT
   LOCAL pOldGT
   LOCAL cCampo1 := space(30)

   IF lFlag
      RETURN NIl
   ENDIF

   lFlag := .T.

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

   CLS

   hb_gtInfo( HB_GTI_WINTITLE, "Janela console 1" )
   hb_gtInfo( HB_GTI_ALTENTER, .T. )
   hb_gtInfo( HB_GTI_CLOSABLE, .F. )

   @ 10,10 SAY "CAMPO1:" GET cCampo1

   READ

   ? cCampo1

   WAIT

   //hb_gtReload("GUI")
   hb_gtSelect( pOldGT )
   pNewGT := NIL

   lFlag := .F.

RETURN NIL

STATIC FUNCTION telaconsole2()

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

   IF lFlag
      RETURN NIl
   ENDIF

   lFlag := .T.

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

   CLS

   hb_gtInfo( HB_GTI_WINTITLE, "Janela console 2" )
   hb_gtInfo( HB_GTI_ALTENTER, .T. )
   hb_gtInfo( HB_GTI_CLOSABLE, .F. )

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

   READ

   ? cCampo1
   ? cCampo2

   WAIT

   //hb_gtReload("GUI")
   hb_gtSelect( pOldGT )
   pNewGT := NIL

   lFlag := .F.

RETURN NIL


Os passos são estes:

1. criar o novo GT
2. selecionar o novo GT, recebendo o anterior como retorno
3. usar o GT
4. selecionar o anterior
5. destruir o novo GT

Mas também precisa de controle para não abrir mais de uma vez.
Atenciosamente,
Marcos Antonio Gambeta
marcosgambeta
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 318
Data de registro: 16 Jun 2005 22:53
Curtiu: 2 vezes
Mens.Curtidas: 40 vezes

HMG | EXECUTAR MÓDULO CONSOLE DENTRO DE FORM WINDOW MAIN

Mensagempor asimoes » 01 Fev 2021 16:58

Consegui também na HwGui, tem que ser em fontes separados, ai funciona, ou seja não pode hwgui.ch onde vai usar Console
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

HMG | EXECUTAR MÓDULO CONSOLE DENTRO DE FORM WINDOW MAIN

Mensagempor alxsts » 01 Fev 2021 17:02

Olá!

Tentei compilar o primeiro exemplo com a instalação padrão da Minigui Extended BCC 5.8 que tenho instalados mas está dando o erro abaixo:
C:\MiniGUI\SAMPLES\Advanced\MixGUI-WVT>call ..\..\..\batch\compile.bat demo
Harbour 3.2.0dev (r2011030937)
Copyright (c) 1999-2020, https://harbour.github.io/
Compiling 'demo.prg'...
Lines 23269, Functions/Procedures 3
Generating C source output to 'demo.c'... Done.
demo.c:
Turbo Incremental Link 5.69 Copyright (c) 1997-2005 Borland
Error: Unresolved external '_HB_FUN_HB_GT_WVT' referenced from C:\MINIGUI\SAMPLES\ADVANCED\MIXGUI-WVT\DEMO.OBJ

Link error.

Como resolver isto?
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

HMG | EXECUTAR MÓDULO CONSOLE DENTRO DE FORM WINDOW MAIN

Mensagempor JoséQuintas » 01 Fev 2021 17:27

Talvez adicionar?

-gtgui
-gtwvt

Lembrando de um uso normal também:

ANNOUNCE HB_GTSYS

PROCEDURE HB_GTSYS

   REQUEST HB_GT_GUI
   REQUEIST HB_GT_WVT

   RETURN


O announce obriga que o linqueditor procure nesse fonte antes de qualquer outra coisa.
E a hb_gtsys é um ponto de partida pra GTs.

Algumas LIBs usam isso pra empurrar a GT_GUI sozinha, sem mais nada, e isso pode impedir mudanças.
Mas do jeito acima acaba anulando o que possa existir em lib.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Próximo



Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 5 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
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro