Atualizações Hwgui 28/10/2021

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

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

Atualizações Hwgui 28/10/2021

Mensagem por Itamar M. Lins Jr. »

Olá!
Pois é, no teste que fiz para demonstrar o problema as variáveis são locais.
Mas ele alertou para usar o tal "OF ODLG" foi o que entendi, colocar isso no OwnerButton, mas se é local ?

Código: Selecionar todos

#include "hwgui.ch"
Function main
LOCAL oFormMain, oBt

INIT WINDOW oFormMain MAIN APPNAME "TEST" STYLE WS_POPUP +  WS_CAPTION + WS_SYSMENU ;
AT 0,0 SIZE 500,400 
 @ 10,10 OWNERBUTTON oBt SIZE 70,70 TEXT "CLICK ME" ON CLICK {||DialogA()} 
oFormMain:Activate()

Function DialogA
local oBt, oDlg
INIT DIALOG oDlg CLIPPER NOEXIT AT 70,70 SIZE 800,500 
 @ 10,10 OwnerButton oBt Size 70,70 TEXT "CLICK ME" ON CLICK {||MyFunction()} //Hiden Dlg MyFunction, while mouse cursor exit button.
oDlg:Activate()
Return Nil

Function MyFunction
Local oDlg
INIT DIALOG oDlg CLIPPER NOEXIT AT 300,300 SIZE 300,100
oDlg:Activate() 

return nil
Isso ai em cima escondia o DIALOG anterior, antes da correção dele.

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

Atualizações Hwgui 28/10/2021

Mensagem por JoséQuintas »

Itamar M. Lins Jr. escreveu:Melhor um exemplo demostrando o problema, para todo mundo testar.
Eu sempre faço isso, ai não tem o que reclamar. Dá um trabalho mas é preciso fazer, que as vezes isolando o BUG, achamos alternativas.
O problema é que não sei usar hwgui, e não sei criar as situações, já falei isso.

O que imaginei para o problema foi o seguinte:

A janela modal pode ter como parent a janela anterior, porque ela vai estar bloqueada, e vai destravar ao sair da modal.
Já uma janela não modal... que é de certa forma livre... tem que ficar presa não à janela anterior, talvez até presa a Main e não numa dialog modal.
Como o modal destrava o pai/mãe ao sair... fazer referência a uma dialog modal não deu certo.

E não é sempre que dá o problema, porque não depende da dialog atual, e sim do conjunto anterior + atual.

Acho que por isso apanharam muito, porque isso se traduz em 4 situações.

- modal + modal
- modal + nomodal
- nomodal + modal
- nomodal + nomodal

Era resolver uma situação, e criar problema pra outra.
Talvez até isso permita fazer uma revisão geral.
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

Atualizações Hwgui 28/10/2021

Mensagem por Itamar M. Lins Jr. »

Olá!
Já viu que a "correção" ai pelo exemplo que passei, piorou a situação.
Faz exemplos simples igual a esse que fiz, para demonstrar o problema.
Agora nem a outra dialog abre mais.

É uma faca de muito legumes, mexer na Hwgui.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
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

Atualizações Hwgui 28/10/2021

Mensagem por Itamar M. Lins Jr. »

Olá!
Usando o exemplo que postei dá esse erro:

Código: Selecionar todos

Error BASE/1066  Argument error: conditional
Called from source\winapi\hdialog.prg->HDIALOG:ACTIVATE(132)
Called from bugdialog.prg->DIALOGA(14)
Called from bugdialog.prg->(b)MAIN(7)
Called from source\winapi\hownbtn.prg->HOWNBUTTON:MUP(414)
Called from source\winapi\hownbtn.prg->HOWNBUTTON:ONEVENT(165)
Called from ->HWG_ACTIVATEMAINWINDOW(0)
Called from source\winapi\hwindow.prg->HMAINWINDOW:ACTIVATE(400)
Called from bugdialog.prg->MAIN(8)

HWGUI 2.23 dev Build 1
Date:10/29/21
Time:18:18:10
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

Atualizações Hwgui 28/10/2021

Mensagem por JoséQuintas »

Mal sei usar uma dialog, esse exemplo precisa de pelo menos 3, podendo ser 12 pra simular cada combinaçã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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Atualizações Hwgui 28/10/2021

Mensagem por JoséQuintas »

Itamar M. Lins Jr. escreveu:Usando o exemplo que postei dá esse erro:
Traduza por favor, isso é depois das alteraçòes?
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

Atualizações Hwgui 28/10/2021

Mensagem por JoséQuintas »

Vixe travou tudo.
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

Atualizações Hwgui 28/10/2021

Mensagem por Itamar M. Lins Jr. »

Olá!
podendo ser 12 pra simular cada combinação.
Não é assim não moço!
Senão com 10 janelas iria p/ 400 ?
Veja como é a classe na Hwgui.
Use hb_valtoexp(oDlg) ou hb_valtoexp(oFormMain) p/ ver tudo dentro uma das outras.

hwg_msginfo(hb_valtoexp(oDlg)) mostra a estrutura de objetos, etc da classe.

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

Atualizações Hwgui 28/10/2021

Mensagem por JoséQuintas »

Tô olhando tanto fonte que já estou confundindo tudo.
Analisando ainda.
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

Atualizações Hwgui 28/10/2021

Mensagem por JoséQuintas »

hwgui.png
Reverti, deixando da forma anterior.
Apesar de ter resolvido o problema do Fernando Queiroz, cria problemas pra outras pessoas.
Por enquanto ele mantém os fontes com a mudança.
Pelo menos agora ele está usando a última versão, apenas sem essa última anulação. (equivalente a não ter a alteração de 06/08)

Hoje na hwgui tem aDlgs e aModalDlgs.
Ainda não olhei, mas.... aDlgs contém só nomodal, ou contém tudo?
É... porque se só tem nomodal... como é que dá pra obter a última dialog, independente do 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
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Atualizações Hwgui 28/10/2021

Mensagem por Itamar M. Lins Jr. »

Olá!
Apesar de ter resolvido o problema do Fernando Queiroz
Ai é que está a situação !
Cadê o exemplo demonstrado o problema ?
Eu postei ai o exemplo demonstrando o BUG, mas cadê o exemplo dele ?
Vai resolver como ? sem exemplo ?

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

Atualizações Hwgui 28/10/2021

Mensagem por JoséQuintas »

Uia
Tá aqui o problema dele

Código: Selecionar todos

#include "hwgui.ch"

FUNCTION main

   LOCAL oFormMain, oBt

   INIT WINDOW oFormMain MAIN APPNAME "TEST" STYLE WS_POPUP +  WS_CAPTION + WS_SYSMENU ;
      AT 0,0 SIZE 500,400
   @ 10,10 OWNERBUTTON oBt SIZE 70,70 TEXT "CLICK ME" ON CLICK {||DialogA()}
   oFormMain:Activate()

   RETURN Nil

FUNCTION DialogA

   LOCAL oBt, oDlg

   INIT DIALOG oDlg CLIPPER NOEXIT AT 70,70 SIZE 800,500
   @ 10,10 OwnerButton oBt Size 70,70 TEXT "CLICK ME" ON CLICK {||MyFunction()} //Hiden Dlg MyFunction, while mouse cursor exit button.
   ACTIVATE DIALOG oDlg NOMODAL

   RETURN Nil

FUNCTION MyFunction

   LOCAL oDlg

   INIT DIALOG oDlg CLIPPER NOEXIT AT 300,300 SIZE 300,100
   oDlg:Activate()

   RETURN Nil
Só alterei a janela do meio pra NOMODAL
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

Atualizações Hwgui 28/10/2021

Mensagem por JoséQuintas »

Código: Selecionar todos

   IF ::oParent == Nil
      ::oParent := hwg_GetModalDlg()
   ENDIF
E essa foi a alteração que causou problema pra ele, e resolveu o problema pra você.
Então... ::oParent é liberado no final, mas no caso dele, a MODAL DIALOG é a primeira e não a segunda, e isso causa liberar janela errada.
Com certeza... a liberação não está nessa rotina, assim como não deve estar o bloqueio.
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

Atualizações Hwgui 28/10/2021

Mensagem por JoséQuintas »

Complemento....

Por isso foi comentado com você usar OF oDLG.
Desse jeito você atribui ::oParent manualmente.

Esse tipo de problema eu não tive com GTWVG, mas tem uma explicação (ou duas):

Muita coisa na HWGUI é apenas definida, a criação só vém depois. Com isso, nem sempre pegar o handle da janela funciona, porque ela não existe.

NA GTWVG vai criando na hora, e já tem o handle da janela.
Mas.... NÃO USEI a dialog dela, talvez possa ter os mesmos problemas.

Código: Selecionar todos

   hParent := Iif( ::oParent != Nil .AND. ;
      __ObjHasMsg( ::oParent, "HANDLE" ) .AND. !Empty( ::oParent:handle ), ;
      ::oParent:handle, Iif( ( oWnd := HWindow():GetMain() ) != Nil,  ;
      oWnd:handle, hwg_Getactivewindow() ) )
Repare que tem Hparent e ::oParent
É porque nas classes guarda o objeto, que ainda não tem janela/handle, a janela vai ser criada depois.
Usando o objeto em run-time, com janelas criadas, ele vai ter conteúdo do handle.
De repente o problema é usar essas variáveis antes que elas contenham janela/handle.

Só que aí ferrou... é muita coisa interligada, e é onde entra conhecer bem a API do Windows, e o funcionamento geral da HWGUI.

Talvez nisso que a HMG leve vantagem, muita coisa ela faz direto pela API do Windows, inclusive pra descobrir qual é o :Parent.
Ou... pelo simples fato de que tudo é um array linguição... a janela anterior é o elemento anterior do array.
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

Atualizações Hwgui 28/10/2021

Mensagem por JoséQuintas »

getparent.png
Olhe aí, é passar a janela atual, e o Windows mostra a janela :Parent.
E olhe aqui:
d:\temp>hbmk2 -find parent

gtwvg.hbc (instalado):
wvg_SetParent()
gtwvw.hbc (instalado):
wvw_SetParent()
hbfimage.hbc (não instalado):
fi_IsTransparent()
fi_SetTransparent()
hbgd.hbc (não instalado):
gdImageColorTransparent()
gdImageGetTransparent()
hbhpdf.hbc (instalado):
HPDF_MarkupAnnot_SetInteriorTransparent()
hbmxml.hbc (instalado):
mxmlGetParent()
hbwin.hbc (instalado):
wapi_SetParent()
wapi_TreeView_GetParent()
Núcleo Harbour (instalado):
__clsParent()
não tem isso na hbwin.

Talvez em run-time fosse mais interessante usar essa função do Windows
Mas não é certeza, tudo depende de como "a coisa toda" está organizada.

É o que eu falo: aí começa a depender de rotina em C, e outras coisas mais, e aí cai na limitação do meu conhecimento.
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