Página 1 de 6

Iniciando com HWGUI

Enviado: 20 Set 2020 12:00
por JoséQuintas
Tenho lá meu Main() oculto.

acrescentei no fonte

Código: Selecionar todos

ANNOUNCE HB_GTSYS
REQUEST HB_GT_WVG_DEFAULT
Compilei, testei, à primeira vista tudo ok.

Iniciando com HWGUI

Enviado: 20 Set 2020 12:46
por JoséQuintas
Por enquanto sem ambiente especial:

Criei uma pasta para os fontes hwgui, criei o projeto, e vou usar um fonte teste.

fonte: pteshwgui.prg

Código: Selecionar todos

#include "windows.ch"
#include "guilib.ch"

PROCEDURE pTesHWGUI()
   LOCAL oForm, oFont
        Local nCombo := 1
        Local cCombo := 'Four'
        Local xCombo := 'Test'
        Local aItems := {'First', 'Second', 'Third', 'Four'}
        Local cEdit  := Space(50)
        Local oCombo1, oCombo2, oCombo3, oCombo4, oCombo5, oCombo6

        PREPARE FONT oFont NAME "Courier New" WIDTH 0 HEIGHT -11

        INIT DIALOG oForm CLIPPER NOEXIT TITLE "ComboBox Demo";
             FONT oFont ;
             AT 0, 0 SIZE 700, 425 ;
             STYLE DS_CENTER + WS_VISIBLE + WS_POPUP + WS_VISIBLE + WS_CAPTION + WS_SYSMENU

            @ 20, 20 GET COMBOBOX oCombo1 VAR nCombo ITEMS aItems SIZE 100, 150
            @ 20, 50 GET COMBOBOX oCombo2 VAR cCombo ITEMS aItems SIZE 100, 150 TEXT
            @ 20, 80 GET COMBOBOX oCombo3 VAR xCombo ITEMS aItems SIZE 100, 150 EDIT TOOLTIP 'Type any thing here'

            @ 20,110 COMBOBOX oCombo4 ITEMS aItems SIZE 100, 150
            @ 20,140 COMBOBOX oCombo5 ITEMS aItems SIZE 100, 150 TEXT
            @ 20,170 COMBOBOX oCombo6 ITEMS aItems SIZE 100, 150 EDIT

            @ 20,200 GET cEdit SIZE 150,23

            @ 380, 395 BUTTON 'Test'    SIZE 75,25 ON CLICK {|| xCombo := 'Temp', oCombo3:refresh(), nCombo := 2, oCombo1:refresh(), oCombo2:SetItem(3), oCombo4:SetItem(3), oCombo5:value := 'Third', oCombo5:refresh(), oCombo6:SetItem(2) }
            @ 460, 395 BUTTON 'Combo 1' SIZE 75,25 ON CLICK {|| hwg_Msginfo(str(nCombo)) }
            @ 540, 395 BUTTON 'Combo 2' SIZE 75,25 ON CLICK {|| hwg_Msginfo(cCombo, xCombo) }
            @ 620, 395 BUTTON 'Close'   SIZE 75,25 ON CLICK {|| oForm:Close() }

        ACTIVATE DIALOG oForm
Return
meu projeto jpahwgui.hbp

Código: Selecionar todos

-ojpahwgui
-hblib
hwgui.hbc
*.prg
No meu menu principal, acrescentei uma opção

Código: Selecionar todos

            MenuOption( "Módulo hwgui",              "PTESHWGUI", { || pteshwgui() } )
O codeblock só serve pra puxar a rotina hwgui pra dentro do JPA.EXE

Nada mais alterado.
Vou na pasta hwgui: C <ENTER>
Vou na pasta do meu aplicativo C <ENTER>

NÃO alterei mais nada, então, normal o erro:

Código: Selecionar todos

c:/temp/jpa_menu.o:jpa_menu.c:(.data+0x388): undefined reference to `HB_FUN_PTESHWGUI'
Agora, lógico, preciso acrescentar a minha LIB e HWGUI, e a pasta da minha lib

C hwgui.hbc -ljpahwgui -Lhwgui <ENTER>

Pronto, um novo EXE.

Código: Selecionar todos

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
  21261824 ->   6667264   31.36%    win32/pe     jpa.exe                                                                                                       
hwgui.png
hwgui2.png
Esse é um ponto de partida para o restante.

Iniciando com HWGUI

Enviado: 20 Set 2020 12:52
por JoséQuintas
Uma necessidade aqui:

A dialog acaba sendo MODAL.
NÃO sei se vai ser possível, talvez aqui precise conversar com o desenvolvedor da HWGUI, pra ver se dá pra criar DIALOGs NÃO MODAL.
Isso porque a janela que chama a DIALOG NÃO é uma WINDOW da HWGUI.

Iniciando com HWGUI

Enviado: 20 Set 2020 12:59
por JoséQuintas
Opa, mostrei cedo demais.
hwgui3.png
Meu menu cria automático a janela para o módulo.
O aplicativo está totalmente livre, apenas tem uma janela a mais.
A janela a mais é porque ele criou, mas não precisava.....
Estamos chegando lá...

Iniciando com HWGUI

Enviado: 20 Set 2020 13:10
por JoséQuintas
Agora é conversar com o desenvolvedor.
Consegui o que eu queria, janelas à vontade, sem limites, mas....
Módulos em hwgui precisam ser fechados na ordem em que foram abertos.
jpa.png
Apenas coloquei tratamento diferenciado pra módulo HWGUI.
Aquilo de travar a janela que chama a dialog, tudo bem, é uma janela oculta mesmo, o usuário não vê nada.

Código: Selecionar todos

FUNCTION DoPrg( cModule, cTitulo, p1, p2, p3 )

   LOCAL mHrInic //, oStatusbar
   PRIVATE m_Prog

   m_Prog := cModule
   hb_gtReload( "WVG" )
   AppInitSets( ! "HWGUI" $ Upper( cModule ) )
   HB_GtInfo( HB_GTI_WINTITLE, cTitulo )
   IF ! ( "HWGUI" $ Upper( cModule ) )
      SetColor( SetColorNormal() )
      CLS
      SayTitulo( cTitulo )
      @ MaxRow() - 2, 0 TO MaxRow() - 2, MaxCol() COLOR SetColorTraco()
      mHrInic := Time()
   ENDIF
   Do( cModule, p1, p2, p3 )
   IF ! ( "HWGUI" $ Upper( cModule ) )
      LogDeUso( mHrInic, cModule )
   ENDIF
   //  HB_SYMBOL_UNUSED( oStatusbar )

   RETURN NIL

Iniciando com HWGUI

Enviado: 20 Set 2020 13:32
por JoséQuintas
Tem como definir uma janela main hwgui oculta?
Talvez se as dialogs partirem dela não fiquem presas à ordem.

Iniciando com HWGUI

Enviado: 20 Set 2020 13:39
por Itamar M. Lins Jr.
Ola!
Meu aplicativo 90% só tem dois níveis. Acredito que de todo mundo é assim.
A Window MAIN e a DIALOG. Depois pode eventualmente ter mais outro nível, botão que chama uma DIALOG com opções de impressão.
Lembre-se que a DIALOG pode ser nomodal. Fica solta, sem ter uma janela de origem.
Veja o DESIGNER como ele é feito, as JANELAS ficam SOLTAS. Não obedece essa ordem para fechar.

Saudações,
Itamar M. Lins Jr.

Iniciando com HWGUI

Enviado: 20 Set 2020 14:36
por Itamar M. Lins Jr.
Ola!
Esconder um janela.
Objeto : HIDE() //Se tiver essa opção.

Código: Selecionar todos

oWnd:Hide()
Saudações,
Itamar M. Lins Jr.

Iniciando com HWGUI

Enviado: 20 Set 2020 15:05
por JoséQuintas
Não adianta, não dá certo.

Tentei com oform:activate(.f.)

Tudo bem, vai ficar assim até talvez o desenvolvedor dar uma resposta.

Tomei um baile muito grande pra descobrir um problema que fazia travar tudo.

Código: Selecionar todos

   hb_gtReload( "WVG" )
   AppInitSets()
Inverti essas duas linhas e travava tudo.
Meio normal, tudo tem a ver com a janela ativa.
Foi o GIT que me salvou, porque conferi as mudanças.
Não funcionava mais nem o jeito anterior kkkk

Mas ok, definido o jeito de trabalhar.

hwgui\*.* vão ser meus fontes hwgui, transformados em LIB

Código: Selecionar todos

-o${hb_addons}/josequintas/lib/${hb_plat}/${hb_comp}/jpahwgui
-hblib
-hbx=${hb_addons}/josequintas/jpahwgui
hwgui.hbc
-w3 -es2
*.prg
Vou desviar a LIB pra pasta addons/josequintas

No projeto principal:

Código: Selecionar todos

hwgui/jpahwgui.hbp
-ljpahwgui
hwgui.hbc
Coloquei a outra pasta como subprojeto, assim compila o que eu mexer lá, já criando uma nova LIB
E compila o projeto geral juntando essa LIB, e as da hwgui

Pronto.
A partir de agora, é igual todo mundo que usa hwgui.
A única diferença é que a entrada é gtwvg.
Se eu descobrir como fazer a dialog independente, melhor ainda.

Iniciando com HWGUI

Enviado: 20 Set 2020 15:10
por JoséQuintas
Agora é liberar alguma coisa pro usuário brincar.

Precisa ver o comportamento do lado do cliente, incluindo uso via terminal service.

Isso ok, é começar a colocar a mão na massa.

Iniciando com HWGUI

Enviado: 20 Set 2020 15:14
por JoséQuintas
Itamar M. Lins Jr. escreveu:Lembre-se que a DIALOG pode ser nomodal. Fica solta, sem ter uma janela de origem.
Veja o DESIGNER como ele é feito, as JANELAS ficam SOLTAS. Não obedece essa ordem para fechar.
Talvez ela fique como container da Main, talvez não.
Seria interessante descobrir isso.

Nessa parte, nada a ver com GTWVG, mas sim com começar o aplicativo sem janela Main(), mas com uma ou duas dialogs.

Iniciando com HWGUI

Enviado: 20 Set 2020 15:23
por JoséQuintas
Acho que estou quase lá....

Código: Selecionar todos

        ACTIVATE DIALOG oForm

Código: Selecionar todos

        ACTIVATE DIALOG oForm NOMODAL
Assim não tem dialog.

Iniciando com HWGUI

Enviado: 20 Set 2020 15:36
por JoséQuintas
Nada feito.

Com NOMODAL a dialog não existe.
Acho que ela precisa ficar presa a alguma coisa.

Iniciando com HWGUI

Enviado: 20 Set 2020 15:39
por Itamar M. Lins Jr.
Ola!
NOMODAL usamos o tempo todo, para mostrar avisos, BARRA DE PROGRESSO... como não funciona ?
Olhe o fonte da hprogres.prg

Código: Selecionar todos

   INIT DIALOG ::oParent TITLE cTitle       ;
      At nLeft, nTop SIZE nWidth, nHeight   ;
      STYLE WS_POPUP + WS_VISIBLE + WS_CAPTION + WS_SYSMENU + WS_SIZEBOX + iif( nTop == 0, DS_CENTER, 0 ) + DS_SYSMODAL + MB_USERICON

   @ ::nLeft, nTop + 5 SAY ::LabelBox CAPTION iif( Empty( lPercent ), "", "%" )  SIZE ::nWidth, 19 ;
      STYLE SS_CENTER

   IF bExit != Nil
      ::oParent:bDestroy := bExit
   ENDIF

   ACTIVATE DIALOG ::oParent NOMODAL
Saudações,
Itamar M. Lins Jr.

Iniciando com HWGUI

Enviado: 20 Set 2020 15:51
por JoséQuintas
Teste simples:

Código: Selecionar todos


#include "hwgui.ch"

FUNCTION Main()
   LOCAL oFont, oForm
        Local nCombo := 1
        Local cCombo := 'Four'
        Local xCombo := 'Test'
        Local aItems := {'First', 'Second', 'Third', 'Four'}
        Local cEdit  := Space(50)
        Local oCombo1, oCombo2, oCombo3, oCombo4, oCombo5, oCombo6

        PREPARE FONT oFont NAME "Courier New" WIDTH 0 HEIGHT -11

        INIT DIALOG oForm CLIPPER NOEXIT TITLE "ComboBox Demo";
             FONT oFont ;
             AT 0, 0 SIZE 700, 425 ;
             STYLE DS_CENTER + WS_VISIBLE + WS_POPUP + WS_VISIBLE + WS_CAPTION + WS_SYSMENU

            @ 20, 20 GET COMBOBOX oCombo1 VAR nCombo ITEMS aItems SIZE 100, 150
            @ 20, 50 GET COMBOBOX oCombo2 VAR cCombo ITEMS aItems SIZE 100, 150 TEXT
            @ 20, 80 GET COMBOBOX oCombo3 VAR xCombo ITEMS aItems SIZE 100, 150 EDIT TOOLTIP 'Type any thing here'

            @ 20,110 COMBOBOX oCombo4 ITEMS aItems SIZE 100, 150
            @ 20,140 COMBOBOX oCombo5 ITEMS aItems SIZE 100, 150 TEXT
            @ 20,170 COMBOBOX oCombo6 ITEMS aItems SIZE 100, 150 EDIT

            @ 20,200 GET cEdit SIZE 150,23

            @ 380, 395 BUTTON 'Test'    SIZE 75,25 ON CLICK {|| xCombo := 'Temp', oCombo3:refresh(), nCombo := 2, oCombo1:refresh(), oCombo2:SetItem(3), oCombo4:SetItem(3), oCombo5:value := 'Third', oCombo5:refresh(), oCombo6:SetItem(2) }
            @ 460, 395 BUTTON 'Combo 1' SIZE 75,25 ON CLICK {|| hwg_Msginfo(str(nCombo)) }
            @ 540, 395 BUTTON 'Combo 2' SIZE 75,25 ON CLICK {|| hwg_Msginfo(cCombo, xCombo) }
            @ 620, 395 BUTTON 'Close'   SIZE 75,25 ON CLICK {|| oForm:Close() }

        ACTIVATE DIALOG oForm NOMODAL
Return oForm
Tente uma dialog sozinha, sem mais nada.
com NOMODAL, nada feito.