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

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

marcosgambeta
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 16 Jun 2005 22:53

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

Mensagem por marcosgambeta »

O arquivo batch\compile.bat usa a gtwin.lib. Experimente isto:

1. Faça uma cópia do arquivo original
2. Para cada ocorrência da gtwin, crie uma linha igual logo abaixo, mas trocando gtwin por gtwvt

Se a compilação for com hbmk2, é apenas questão de usar o parâmetro -gtwvt.
Atenciosamente,
Marcos Antonio Gambeta
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

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

Mensagem por alxsts »

Olá!

Mesmo erro. Ele não encontra uma lib onde exista esta função '_HB_FUN_HB_GT_WVT'.
[]´s
Alexandre Santos (AlxSts)
marcosgambeta
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 16 Jun 2005 22:53

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

Mensagem por marcosgambeta »

Neste último exemplo, com hb_gtCreate e hb_gtSelect, quase foi possível usar duas janelas simultâneas. Mas ocorre este problema:

A digitação, na janela criada por último, funciona normal. Mas na primeira janela, fica presa enquanto a segunda não for fechada.

Quando a segunda é fechada, o que foi digitado na primeira aparece.

Mesmo usando LOCAL getlist := {}, o problema persiste.
Atenciosamente,
Marcos Antonio Gambeta
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

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

Mensagem por asimoes »

marcosgambeta escreveu:Neste último exemplo, com hb_gtCreate e hb_gtSelect, quase foi possível usar duas janelas simultâneas. Mas ocorre este problema:
Tentou o uso com thread ?
►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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

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

Mensagem por asimoes »

Eu tenho isso na minha aplicação

Código: Selecionar todos

            IF pWindowGTI != Nil
               wapi_DestroyWindow( pWindowGTI ) 
            ENDIF
►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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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

Mensagem por JoséQuintas »

asimoes escreveu:Tentou o uso com thread ?
Melhor nem complicar.
Se pro usuário já é difícil entender sem multithread, com multithread piorou....
Além disso, com multithread aí sim vai ter que reescrever tudo, ou vai sugerir gambiarra com tudo visível.
É melhor deixar isso pra quem já mexe com isso.
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

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

Mensagem por JoséQuintas »

Depois, quando sobrar tempo, vou brincar com tudo isso.

Talvez a hb_gtSelect() presa a rotina da LIB GUI, ou coisa do tipo, só testando pra ver se dá.
De repente ao invés de usar multithread pra geral, usa só pra guardar esse hb_gtSelect(), se isso funcionar.
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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

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

Mensagem por asimoes »

Só completando o meu último post para destruir a janela

Código: Selecionar todos

pWindowGTI := Hb_gtInfo( HB_GTI_WINHANDLE )

IF pWindowGTI != Nil
   wapi_DestroyWindow( pWindowGTI ) 
ENDIF
►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)
marcosgambeta
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 16 Jun 2005 22:53

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

Mensagem por marcosgambeta »

Com thread não tentei.

A ideia era obter o mesmo efeito quando se tem duas janelas GUI. O usuário pode digitar numa, mudar o foco para outra e digitar nela, sem problemas. Sem ter de lidar com threads.

Mas com janelas de console, tem este detalhe da digitação.

Por enquanto, o mais seguro é abrir uma janela por vez para o usuário, assim como é num programa em modo texto.
Atenciosamente,
Marcos Antonio Gambeta
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

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

Mensagem por asimoes »

Com thread
2021-02-01 18_21_09-Greenshot.png
►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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

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

Mensagem por asimoes »

Isso mesmo Marcos, tem que usar LOCAL GetList := {}, cada uma com o seu objeto get
Mesmo usando thread
►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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

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

Mensagem por asimoes »

2021-02-01 18_37_27-Greenshot.png
►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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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

Mensagem por JoséQuintas »

marcosgambeta escreveu:Com thread não tentei.
A ideia era obter o mesmo efeito quando se tem duas janelas GUI. O usuário pode digitar numa, mudar o foco para outra e digitar nela, sem problemas. Sem ter de lidar com threads.
Mas com janelas de console, tem este detalhe da digitação.
Por enquanto, o mais seguro é abrir uma janela por vez para o usuário, assim como é num programa em modo texto.
Com thread pode cair no problema de precisar reescrever fonte, e com isso, criamos mais uma dificuldade para o usuário.
Com certeza, TEORICAMENTE, resolve qualquer parada.

Mas na prática.... podemos criar um problema muito maior.
Começa em que.... quem disse que as LIBs estão preparadas pra multithread?
Aí... resolver o problema inicial vai se tornar até suporte pra modificar a LIB, e explicar multithread, e outras coisas mais...

Tendo a janela GTWVG, ele se vira com o que costuma usar e pronto.

Eu quero terminar essa remontagem inicial que comecei das LIBs, e por enquanto não quero desviar com testes, mas talvez facilite muito usar a WVG como default, ao invés de GUI.

A montagem inicial é apenas usar HBP, e modificar o nome das LIBs.
Depois... aí vou começar a misturar ao máximo, mas alterando o mínimo possível.
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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

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

Mensagem por asimoes »

Na minha opinião ele deveria iniciar o projeto totalmente MINIGUI, colocar em homologação pro usuário testar e deixar o outro sem modificações, vai dar trabalho de qq jeito, com thread ou sem thread, essa coisa de misturar console/gui tem trabalho mesmo, quando eu tinha issso, eu fiz um fonte que iniciava e chamava todas as janelas consoles a partir da gui, também só escrevi uma única vez, código com 30 linhas ou menos, ai é decisão do microvolution, usei thread com waitthread, não queria várias janelas abertas ao mesmo tempo
►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)
marcosgambeta
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 16 Jun 2005 22:53

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

Mensagem por marcosgambeta »

Mais um exemplo, adaptado para usar funções:

Código: Selecionar todos

#include "hbgtinfo.ch"

STATIC lFlag := .F.
STATIC pNewGT
STATIC pOldGT

FUNCTION OpenConsole( cTitle, lAltEnter, lClosable )

   IF lFlag
      RETURN .F.
   ENDIF

   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

RETURN .T.

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
Talvez fique mais simples de usar, fazendo desta forma. Não é necessário ficar repetindo o mesmo código em cada rotina. Apenas abrir o console no início e fechar no final.
Atenciosamente,
Marcos Antonio Gambeta
Responder