GTWVG browse em outra janela

GTWVG com API Windows somente no Harbour.
No Harbouir 3.4 está sendo usado pointer, aonde no 3.2 é numérico.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

GTWVG browse em outra janela

Mensagem por JoséQuintas »

Código: Selecionar todos

FUNCTION BrowseADO( cnSQL, oTBrowse, cFilterKey, bKeyboard, bUserFunction, nFixToCol, aADOFilterList )

   IF Len( appForms() ) > 0 // .AND. oCrt == NIL
      Atail( AppForms()):GuiHide()
   ENDIF
   oFrm := frmGuiClass():New()
   wSave()
   oFrm:FormBegin()
Acima a parte que interessa aqui no assunto.

O que chamo de oFrm, e salvo em AppForms(), seria a informação da parte GUI.
Atail( AppForms() ):GuiHide()
Isso acima esconde todos os componentes GUI da "janela anterior" (que na verdade é a mesma janela)
wSave() é meu SAVE SCREEN.

Traduzindo:
O que é texto, SAVE SCREEN salva, depois dá pra retornar.
O que é componente do Windows, GUI, vou precisar deles depois, então apenas escondo/deixo não visível.
A tela fica livre pra qualquer coisa.

O browse também tem botões, que são criados.
No final destruo esses botões do browse.
restauro a tela, e retorno os componentes windows pra visíveis.

Até aí, tudo bem, tá funcionando direito.
A diferença do uso normal de GUI é esse fato de reaproveitar janela, e é o que dá esse "trabalhinho" a mais.

O que quero fazer agora é abrir uma nova janela pro browse, assim elimina esse "trabalhinho" extra.
Não só isso, passa a ser o funcionamento normal de GUI.

Por enquanto imagino duas possibilidades: ou wvgCrt(), ou hb_gtReload("WVG")
Nos dois casos vai dar uma janela nova, o que acaba com Hide()/Show() e com SAVE SCREEN/RESTORE SCREEN.
O problema que pode aparecer é das janelas inverterem de posição, e o usuário pensar que travou tudo.

Alguém já fez isso em GTWVG ?

Ou talvez um Style de janela.
O radical seria o TOPMOST, que deixa a janela no topo de tudo, mas eu preferia um que fizesse isso POR THREAD, menos radical.
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

GTWVG browse em outra janela

Mensagem por JoséQuintas »

style.png
Tentando entender isso acima.
Tem esta outra também:
If an application is not in the foreground, and should be in the foreground, it must call the SetForegroundWindow function.
Alguém já usou as opções?
Vale pra janelas GUI de qualquer tipo.
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

GTWVG browse em outra janela

Mensagem por JoséQuintas »

Tem também FlashWindow()
Pra fazer piscar a janela e chamar a atenção do usuário.

Apenas listando as opções, ainda vou testar pra ver diferenças, caso ninguém tenha testado.
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

GTWVG browse em outra janela

Mensagem por JoséQuintas »

crt.png
primeiro teste.
Se levar o foco pra janela principal, ele vai pra secundária que é modal.

Na janela secundária um Inkey(0) e na principal nada.
Teclou alguma coisa, fecha tudo, normal.

Só que... tá faltando alguma coisa... e se a principal for fazer mais coisas ?
Tá faltando alguma coisa pra retornar à janela anterior e prosseguir.
E será que o Inkey(0) é da primeira janela ou da segunda?
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

GTWVG browse em outra janela

Mensagem por JoséQuintas »

xbase++zada é phoda.

oCrt:Close() não faz nada.

tem que ser oCrt:Destroy()

Código: Selecionar todos

PROCEDURE Main

   LOCAL oCrt

   SetMode(33,90)
   CLS

   oCrt := wvgCrt():New()
   oCrt:lModal := .T.
   oCrt:Create( ,,{ 0, 0 }, { 25, 80 } )
   Inkey(0)
   oCrt:Destroy()
   Inkey(0)

   RETURN
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

GTWVG browse em outra janela

Mensagem por JoséQuintas »

crt.png
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

GTWVG browse em outra janela

Mensagem por JoséQuintas »

Funcionou exatamente como no fonte.

Código: Selecionar todos

PROCEDURE Main

   LOCAL cTeste := Space(50), GetList := {}

   SetMode(33,90)
   CLS
   @ 1, 0 SAY "teste1" GET cTeste

   ExecutaModulo( "teste2" )

   READ
   Inkey(0)

   RETURN
Acima criou uma janela, montou o GET, MAS.... antes do READ chamou a rotina ExecutaModulo() passando o nome da procedure "teste2"

Código: Selecionar todos

FUNCTION ExecutaModulo( cModule )

   LOCAL oCrt

   oCrt := wvgCrt():New()
   oCrt:lModal := .T.
   oCrt:Create( ,,{ 0, 0 }, { 25, 80 } )
   Do( cModule )
   oCrt:Destroy()

   RETURN Nil
Acima só uma função intermediária, cria janela, chama PROCEDURE, e encerra

Código: Selecionar todos

PROCEDURE teste2

   LOCAL cTeste := Space(20), GetList := {}

   SetColor( "W/R" )
   CLS
   @ 1, 0 SAY "teste2" GET cTeste
   READ

   RETURN
Acima a rotina que foi executada na segunda janela.
Tem até mudança de cor e limpeza de tela (CLS).
crt.png
São duas janelas windows, com direito a título, e a mover a janela de cima como quiser.
o primeiro GET confunde com uma falha, mas é o get normal.
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

GTWVG browse em outra janela

Mensagem por JoséQuintas »

Alterando pra lModal := .F., só aparece a segunda janela, e após o get trava tudo.
Acho que NOMODAL só com multithread.
Vai entender....
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

GTWVG browse em outra janela

Mensagem por JoséQuintas »

crt.png

Código: Selecionar todos

   oCrt := wvgCrt():New()
   oCrt:lModal := .T.
   oCrt:Create( ,,{ 0, 0 }, { 25, 80 } )
   SetMode(30,85)
NÃO pode usar SetMode() depois de criada a Crt.
Na imagem a janela vermelha ficou vermelha só no tamanho criado.
O tamanho que aumentou com SetMode() continua em preto.
O vermelho foi aplicado depois do SetMode(), mas considerou somente o tamanho usado na criação da janela.

Até aí..... normal... não faz sentido criar diferente do que vai usar.

curiosidade: criação da crt. tem mais fonte, incluindo Style da janela, mas essa parte é interessante

Código: Selecionar todos

   IF ::lModal
      ::pGT  := hb_gtCreate( "WVG" )
      ::pGTp := hb_gtSelect( ::pGT )
   ELSE
      hb_gtReload( "WVG" )
      ::pGT := hb_gtSelect()
   ENDIF
hb_gtSelect() é o que seleciona janela em uso, define pra onde vai teclado/mouse

Também nunca usei isso, porque nunca precisei.
Vou começar agora.
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

GTWVG browse em outra janela

Mensagem por JoséQuintas »

Recapitulando pra entenderem:

Hoje executo CADA módulo em uma thread diferente, com janela independente.
Até aí, tudo bem, tudo funciona.

Mas por exemplo o BROWSE, ele usa a mesma janela do módulo.
Isso significa SAVE SCREEN/RESTORE SCREEN, e também deixar os controles windows visíveis/invisíveis.
A idéia é que a partir de agora o browse tenha janela própria, igual qualquer lib GUI.
Essa janela do browse vai ser MODAL.

E o mesmo pra outras janelas, que alguns módulos tem.

Eu ia fazer isso com HWGUI, mas achei muita complicação pra pouca coisa.
De qualquer jeito eu iria fazer em outra janela, apenas vou fazer com GTWVG mesmo.
Algum dia, no futuro, a janela pode virar outra coisa, em outra LIB.

Isso vai simplificar fontes, vou remover aquelas coisas de save screen/restore screen, e aquelas coisas de mostrar/esconder controles windows.
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

GTWVG browse em outra janela

Mensagem por JoséQuintas »

valadic.png
É que a rotina atual é meio genérica.
Posso abrir uma janela de qualquer tamanho, e escondo os botões pra não atrapalhar.
valadic2.png
Não tem problema nenhum nisso, mas vou abrir uma nova janela windows, e deixar os botões na anterior.

ESSA não, mas tem "janelinha" que usa BROWSE de cadastro...
Hoje o browse usa a janela atual, que é grande.
Não posso mudar pra "janelinha" independente, enquanto o browse não tiver sua própria janela grande, separada da que estiver aberta.
Usar o browse em hwgui até ficaria interessante mas.... só o browse é pouco.

De qualquer jeito, fica aí a dica: a primeira coisa a mudar no aplicativo são as telas de browse, porque o browse é usado na grande maioria das telas. (menos na que mostrei agora, de valores adicionais)

Depois que a janela de browse está pronta, próxima etapa podem ser essas "janelinhas" internas.

Depois as janelonas, e por último o menu, quando eu inventar um menu que eu goste - acho que esta vai ser a parte mais difícil.

Com essas mudanças, vou poder usar recursos que deixei de lado, e outros que nunca usei.
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

GTWVG browse em outra janela

Mensagem por JoséQuintas »

browse.png
Primeiro teste falhou.
Os botões do browse ficaram na janela de trás.

Não, não é exatamente erro em fonte.
Se não indicar a janela "pai", assume a default, mas .... está considerando como default a outra.
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

GTWVG browse em outra janela

Mensagem por JoséQuintas »

Error BASE/1004 No exported method: SHOWVENCIDAS
Called from SHOWVENCIDAS(0)
Called from SISTEMA(71)
Called from (b)MAIN(82)
(1) = Tipo: U
Xi..... ainda fazendo testes.
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

GTWVG browse em outra janela

Mensagem por JoséQuintas »

Não deu certo com CRT.
E não sei dizer porque.

Até pensei na possibilidade de ser o handle da janela, ao invés da janela, mas não é.

Código: Selecionar todos

   IF Empty( ::oParent )
      IF ! ::ClassName() $ "WVGCRT,WVGDIALOG"
         ::oParent := WvgSetAppWindow()
      ENDIF
   ENDIF
wvgSetAppWindow() é a janela default, o que significa que é a janela e não o handle dela.
wvgCrt() é a janela Crt

Se passar alguma coisa aborta tudo.
O erro anterior é devido ao programa abortar, mas o programa continuar assim mesmo, por isso deu falta da classe.


Vou tentar entender isso porque agora virou piada.
Uso fora do normal.
Agora que ia usar normal, não quer funcionar kkkk
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

GTWVG browse em outra janela

Mensagem por JoséQuintas »

Quem tiver acostumado a usar wvgCrt(), ou puder fazer testes, é interessante.
Meu primeiro teste foi direto no aplicativo, mas não funcionou.

DEPOIS vou fazer testes em separado.

Agora preciso trabalhar nas mudanças do governo pra abril, porque a contagem regressiva começou.
E pegando mais detalhes não previstos.
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/
Responder