Clipper On Line • Ver Tópico - testar se janela é main

testar se janela é main

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

testar se janela é main

Mensagempor JoséQuintas » 24 Set 2020 11:07

Como eu faço o teste pra saber se a janela é main ou não?
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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

testar se janela é main

Mensagempor Itamar M. Lins Jr. » 24 Set 2020 11:55

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

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

testar se janela é main

Mensagempor JoséQuintas » 24 Set 2020 12:05

Ok, é que estava tentando entender o comportamento da hwgui na mistura.
Mas já entendi.
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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

testar se janela é main

Mensagempor JoséQuintas » 24 Set 2020 21:16

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

Consegui uma luz:

#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, 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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

testar se janela é main

Mensagempor JoséQuintas » 24 Set 2020 21:20

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, 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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

testar se janela é main

Mensagempor JoséQuintas » 24 Set 2020 22:03

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, 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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

testar se janela é main

Mensagempor JoséQuintas » 25 Set 2020 01:06

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, 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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

testar se janela é main

Mensagempor Itamar M. Lins Jr. » 25 Set 2020 08:02

Olá!
Tá lá no exemplo dentro do TUTOR.
#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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

testar se janela é main

Mensagempor sygecom » 25 Set 2020 18:27

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.

***************************************
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
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7006
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 130 vezes

testar se janela é main

Mensagempor JoséQuintas » 25 Set 2020 19:03

Valeu.
Com a lista de janelas, dá pra ver se tem Main
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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

testar se janela é main

Mensagempor asimoes » 25 Set 2020 20:22

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

testar se janela é main

Mensagempor JoséQuintas » 25 Set 2020 21:00

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, 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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

testar se janela é main

Mensagempor asimoes » 25 Set 2020 21:52

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

testar se janela é main

Mensagempor asimoes » 25 Set 2020 22:34

Outra forma de "esconder" a janela main

Esconder
ThisformMain:Move( 0, 0, 0, 0 )

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

testar se janela é main

Mensagempor asimoes » 25 Set 2020 22:48

Parâmetros do Move

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

Próximo



Retornar para HwGui

Quem está online

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