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 marcosgambeta » 01 Fev 2021 17:33

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
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 alxsts » 01 Fev 2021 17:38

Olá!

Mesmo erro. Ele não encontra uma lib onde exista esta função '_HB_FUN_HB_GT_WVT'.
[]´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 marcosgambeta » 01 Fev 2021 17:40

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
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 18:00

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 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 asimoes » 01 Fev 2021 18:03

Eu tenho isso na minha aplicação

            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 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 18:05

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, 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 18:07

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, 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 18:08

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

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)
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 18:13

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
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 18:22

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 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 asimoes » 01 Fev 2021 18:27

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 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 asimoes » 01 Fev 2021 18:38

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 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 20:24

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, 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 20:52

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)
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 » 02 Fev 2021 07:25

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

#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.


#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
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

Anterior Próximo



Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 9 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