testar se janela é main

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

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

testar se janela é main

Mensagem por JoséQuintas »

Como eu faço o teste pra saber se a janela é main ou não?
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
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

testar se janela é main

Mensagem por Itamar M. Lins Jr. »

Ola!
O nome do objeto. Como é o nome da Janela Main ?

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

testar se janela é main

Mensagem por JoséQuintas »

Ok, é que estava tentando entender o comportamento da hwgui na mistura.
Mas já entendi.
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

testar se janela é main

Mensagem por JoséQuintas »

Aviso: testes como este podem deixar o programa zumbi, e ter que fechar no gerenciador de tarefas.

Consegui uma luz:

Código: Selecionar todos

#include "hwgui.ch"

FUNCTION Main
LOCAL oMainW, nGT

nGT := hb_gtSelect()
hb_ThreadStart( { || test() } )
INIT WINDOW oMainW  ;
   TITLE "Dummy Main Window" AT 0,0 SIZE 0 , 0
hwg_Msginfo(Transform( nGT,"" ) )
oMainW:Close()

RETURN NIL

function Test()

LOCAL nGT
nGT := hb_gtSelect()
hb_gtReload( "WVG" )
CLS
? nGT
Alert( "WVG" )

return ""
gtwvg.png
Mesmo com erro, significa que aparentemente funcionou.

Se usar hb_gtReload("WVG") sem multithread, isso equivale a uma janela MODAL.
Significa que a janela anterior vai ficar congelada, até que a atual seja liberada.

Se usar em multithead, a coisa fica interessante.
Aí acontece o contrário: nada segurou a janela Main(), nem nada segurou a rotina Main(), fechou Main() fechou tudo.

A conclusão é:
- uma rotina segura a janela que criou.
- uma janela MODAL prende a janela anterior, porque as rotinas NÃO tem multithread.
- uma janela NÃO MODAL, não fica presa à rotina, parece livre, mas está presa à janela Main()

hb_gtSelect() justamente retorna a rotina de eventos da janela, e isso acaba valendo igual a transformar uma janela pai da outra.

Resumindo:
O que impediu de fechar TODA GTWVG, foi a variável nGT.
E o que impediu de fechar TODA HWGUI, foi a variável oMainW.
Isso manteve as duas Main() de cada uma aberta.
Agora pensar em como usar isso a meu favor.

É porque TODAS as próximas janelas dependem dessas.
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

testar se janela é main

Mensagem por JoséQuintas »

JoséQuintas escreveu:Isso manteve as duas Main() de cada uma aberta.
Correção: isso manteve as duas Main() funcionando, mesmo sem janela visí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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

testar se janela é main

Mensagem por JoséQuintas »

E fechando GTWVG fecha GTWVG, e fechando HWGUI fecha HWGUI.
Não importa a ordem !

Esse é o ponto de partida agora pra encontrar solução.
A partir daí, janelas hwgui vão ficar presas à Main HWGUI, e janelas GTWVG vão ficar presas à janela Main da GTWVG.

Como eu já disse, GTWVG já estou craque.

Falta confirmar:
- o que realmente segura a main() hwgui
- o que muda se o aplicativo iniciar pela gtwvg
- o que acontece com hwgui em multithread

Esta última é porque multithread pode causar confusão pra hwgui.
É porque se uma thread não enxerga a outra, a hwgui pode não enxergar a própria janela Main(), e criar outra Main().
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

testar se janela é main

Mensagem por JoséQuintas »

Qual a forma correta de definir nas janelas, que vão ser todas isoladas?
Ou quais as opções existentes pra:

janela modal e não modal

Como fica pra isso: a janela main e as demais janelas?

MDI, CHILD, etc.
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
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

testar se janela é main

Mensagem por Itamar M. Lins Jr. »

Olá!
Tá lá no exemplo dentro do TUTOR.

Código: Selecionar todos

#include "hwgui.ch"
Function Test
   Local oMain

   /* MENUPOS clause sets the submenu, where items with child windows names
      will appear. It is set by position, starting with 0. */
   INIT WINDOW oMain MDI TITLE "MDI window" AT 100, 100 SIZE 400, 300 ;
         MENUPOS 1

   MENU OF oMain
      MENU TITLE "&File"
         MENUITEM "&Create Child" ACTION CreateChildWindow()
         SEPARATOR
         MENUITEM "&Exit" ACTION oMain:Close()
      ENDMENU
      MENU TITLE "&Windows"
         // Rearrange child windows
         MENUITEM "&Tile" ACTION hwg_Sendmessage(HWindow():GetMain():handle,WM_MDITILE,MDITILE_HORIZONTAL,0)
      ENDMENU
      MENU TITLE "&Help"
         MENUITEM "&About" ACTION hwg_Msginfo( HwG_Version(), "About" )
      ENDMENU
   ENDMENU

   ACTIVATE WINDOW oMain
  
Return Nil

Function CreateChildWindow
Local oChildWnd

   INIT WINDOW oChildWnd MDICHILD TITLE "Child "+Time()

     // Here may be any controls...
   oChildWnd:Activate()
Return Nil
Uma janela comum, dentro de outra comum.
Até hoje faço confusão com isso. Pq uma DIALOG aberto não deixa o usuário minimizar a MAIN, são detalhes que só usando para ver, mesmo com explicações, só com uso para ver como é o comportamento.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

testar se janela é main

Mensagem por sygecom »

Zé,
Não entendi bem, mas veja esse exemplo abaixo, usamos para identificar as DIALOG, MDI E MDIMAIN abertas, talvez lhe ajude.

oWnd = objeto da tela principal do sistema.

Código: Selecionar todos

***************************************
FUNCTION FECHA_JANELAS(oWnd,lFECHATUDO)
***************************************
LOCAL oDLGS      := HDIALOG():ADIALOGS
LOCAL oDLGSMODAL := HDIALOG():aModalDialogs
LOCAL oDLGSMDI   := HWindow():aWindows
LOCAL nHANDLE    := oWnd:handle
LOCAL lRET       :=.T.
LOCAL nI, nI2

IF lFECHATUDO=NIL
   lFECHATUDO:=.F.
ENDIF

IF LEN(oDLGS)>0
   FOR nI= 1 TO LEN(oDLGS)
      IF lFECHATUDO
         oDLGS[nI]:close()
      ELSE
         lRET:=.F.
      ENDIF
   NEXT
ENDIF

IF LEN(oDLGSMODAL)>0
   FOR nI= 1 TO LEN(oDLGSMODAL)
      IF lFECHATUDO
         oDLGSMODAL[nI]:close()
      ELSE
         lRET:=.F.
      ENDIF
   NEXT
ENDIF

FOR nI2= 1 TO LEN(oDLGSMDI)
   IF nI2 > 3
      IF nHANDLE != oDLGSMDI[nI2]:handle
         lRET:=.F.
         //ShowMsg(valtoprg(oDLGSMDI[i]:handle))
         //oDLGSMDI[i2]:close()
      ENDIF
   ENDIF
NEXT
RETURN(lRET)
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

testar se janela é main

Mensagem por JoséQuintas »

Valeu.
Com a lista de janelas, dá pra ver se tem Main
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

testar se janela é main

Mensagem por asimoes »

Itamar M. Lins Jr. escreveu:Até hoje faço confusão com isso. Pq uma DIALOG aberto não deixa o usuário minimizar a MAIN, são detalhes que só usando para ver, mesmo com explicações, só com uso para ver como é o comportamento.
Mas pode fazer Hide() na MAIN

oThisFormMain:Hide()
►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

testar se janela é main

Mensagem por JoséQuintas »

Itamar M. Lins Jr. escreveu: Pq uma DIALOG aberto não deixa o usuário minimizar a MAIN,
Pera aí....
Deixei passar...
Se não pode minimizar, então também não pode abrir com Main oculta.
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

testar se janela é main

Mensagem por asimoes »

JoséQuintas escreveu:Pera aí....
Deixei passar...
Se não pode minimizar, então também não pode abrir com Main oculta.
Pode fazer hide()
►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

testar se janela é main

Mensagem por asimoes »

Outra forma de "esconder" a janela main

Esconder

Código: Selecionar todos

ThisformMain:Move( 0, 0, 0, 0 )
Exibir

Código: Selecionar todos

With Object ThisformMain
   :Move( 0, 0, ::nWidth, ::nHeight )
   :Restore()
End
►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

testar se janela é main

Mensagem por asimoes »

Parâmetros do Move

Código: Selecionar todos

   Move(nCol, nRow, nWidth, nHeight)
►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)
Responder