"Começando" com GUI

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

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

"Começando" com GUI

Mensagem por JoséQuintas »

Sobre a codepage, achei esta parte em Init() da HMGE
Se for Harbour, deixa a codepage default como EN.
No meu caso, chamar a HMGE no meio do aplicativo fez alterar a codepage pra EN.

Código: Selecionar todos

#if ! defined( __XHARBOUR__ ) && ( ( __HARBOUR__ - 0 ) > 0x030100 )
   InitCodePage()
#endif
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

"Começando" com GUI

Mensagem por JoséQuintas »

Só a título de curiosidade:

Acabei instalando em um cliente sem querer hoje.... rs
GTWVG + HWGUI + HMG Extended

Mas... tinha colocado isto aqui:

Código: Selecionar todos

   IF AppUserName() == "JOSEQ"
      IF nBrowse == 1
         HwguiBrowse( oTBrowse )
      ELSE
         HmgeBrowse( oTBrowse )
      ENDIF
      nBrowse := iif( nBrowse == 1, 2, 1 )
      RETURN NIL
   ENDIF
HWGUI e HMG Extended só no meu usuário/senha.

Um perfeito "monstrinho" de teste:

- Harbour 3.4
- mingw 7.1 (não oficialmente no Harbour)
- gtwvg
- hwgui 2.20 alterada
- hmg extended 17.04 alterada

Cedo pra considerar isso, se é que deve ser considerado, mas o EXE ficou com 2.8 MB
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/
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

"Começando" com GUI

Mensagem por microvolution »

era isso q tenho tentado falar o tempo todo, mas, não sou dizer e acabei confundindo os demais programadores.
Quando migrei no final de 2015, já o fiz com base em harbour + GTWVG dentro da HMG.
HMG -> Para usar as mensagens (já em janela windows) usei as MSGINFO/EXLAMATION/STOP, etc;
HARBOUR -> 96% de todos os meus programas estão ainda intáctos;
GTWVG -> para acrescentar o movimento do mouse no menu horizontal/vertical antigo e acrescentar os pushbuttons pra dar aquela cara de CONSOLE mas os usuários verem os botões, e, ele pensar, então não é nada "preto" do DOS, e, sim, igual aos sistemas do BANCO DO BRASIL, CASAS BAHIA, etc, que são gráficos mas, com cara de console.

Vou continuar acompanhando...
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

"Começando" com GUI

Mensagem por microvolution »

ah! quando me refiro à HMG, é a RLopez HMG 3.4.4. Aguardando a versão 3.4.5 que dizem já estar ficando pronta ainda este ano, segundo o fórum oficial http://hmgforum.com.
syslink
Usuário Nível 3
Usuário Nível 3
Mensagens: 132
Registrado em: 20 Fev 2018 13:13
Localização: joinvile/sc

"Começando" com GUI

Mensagem por syslink »

JoséQuintas escreveu:- hmg extended 17.04 alterada
você já testou com a HMG (Roberto Lopez)?
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

"Começando" com GUI

Mensagem por microvolution »

vamos brincar então:
HARBOR + gtwvg + hmg.
1º 100% harbour + tela gráfica PDV 100% WVG (nem parece né - mas é)
a parte do GET fica assim:

Código: Selecionar todos

                @ 04 ,66 get mCDPRODUTO picture pCDPRODUTO  when empty (mCDPRODUTO)      valid fCDPRODUTO_WVG ()
                @ 08 ,72 get mQT_VENDA  picture pQT_VENDA   valid fQT_VENDA_WVG ()
                read
a parte da função fCDPRODUTO_WVG:

Código: Selecionar todos

static function fCDPRODUTO_WVG ()
     local ARQUIVO := select ()

     LIMPA_MENSAGEM ()
     if lastkey () <> K_UP
          if empty (mCDPRODUTO)
			   mostra_listagem_prd_hmg()
               select (ARQUIVO)
               return (.f.)
          endif
          select ('DCI10010') // arquivo de produtos já indexado no início do main
          if .not. EXISTE (str (mCDPRODUTO,13) )
               MsgInfo('C¢digo do Produto n„o cadastrado')
               mostra_listagem_prd_hmg()
               select (ARQUIVO)
               return (.f.)
          endif
          mDSPRODUTO := left (DSPRODUTO,32)
          mVR_UNITAR := VR_PREVEN * (1+(mVR_PERJUR/100))
		  AAdd( aPaint, { "Label8", {|| Wvt_DrawLabel( 02, 01, mDSPRODUTO, 00, 00, RGB( 220, 220, 220 )	, RGB( 063, 096, 150 ), "Arial"			, 30, , , , , .f., .f., .f. ) }, 		{ WVT_BLOCK_LABEL, 01, 02, ,  } } )
               mCD_GRADE := DSUNIDADE
          select (ARQUIVO)
     endif
return
2º harbour + gráficos 100% HMG:
função MOSTRA_LISTAGEM_PRD_HMG() - tambem feita em harbour + HMG:

Código: Selecionar todos

static function mostra_listagem_prd_hmg()
       define window form_pesquisa;
              at 0,0;
              width 760;
              height 610;
              title 'DCI10010 - Produtos';
              icon 'icone';
              modal;
              nosize

              define grid grid_pesquisa
                     parent form_pesquisa
                     col 0
                     row 0
                     width 755
                     height 580
                     headers {'Código','Nome','Preço R$'}
                     widths {140,460,130}
                     showheaders .F.
                     nolines .T.
                     fontname 'courier new'
                     fontsize 12
                     backcolor {157,255,255}
                     fontcolor BLACK
                     ondblclick mostra_informacao_prd_hmg()
					 onenter mostra_informacao_prd_hmg()
              end grid

              on key escape action thiswindow.release

       end window

	   popula_grid_prd_hmg()
	   
       form_pesquisa.grid_pesquisa.setfocus
       form_pesquisa.grid_pesquisa.value := 1

       form_pesquisa.center
       form_pesquisa.activate
return(nil)
Função "popula_grid_prd_hmg()":

Código: Selecionar todos

static function popula_grid_prd_wvg()

       // local ARQUIVO := select ()
       delete item all from grid_pesquisa of form_pesquisa
       dbselectarea('DCI10010')
       DCI10010->(dbgotop())

       while .not. eof()
       		 add item {alltrim(str(DCI10010->CDPRODUTO)),alltrim(DCI10010->DSPRODUTO),trans(DCI10010->VR_UNITAR,'@E 999,999.99')} to grid_pesquisa of form_pesquisa
             DCI10010->(dbskip())
       end
return(nil)
Função MOSTRA_INFORMACAO_PRD_HMG()

Código: Selecionar todos

static function mostra_informacao_prd_hmg()
       local x_codigo := valor_coluna('grid_pesquisa','form_pesquisa',1)
       local x_nome   := valor_coluna('grid_pesquisa','form_pesquisa',2)
	   _codigo   := val(x_codigo)
	   _nome     := alltrim(x_nome)
	   mNMPRODUTO:=_nome
      
       form_pesquisa.release // tanto faz esta linha quanto a abaixo o resultado não fica como o esperado.
       // form_pesquisa.minimize
eturn(nil)
FUNÇÃO VALOR_COLUNA():

Código: Selecionar todos

function valor_coluna(xObj,xForm,nCol)
	     local nPos := GetProperty(xForm,xObj,'Value')
	     local aRet := GetProperty(xForm,xObj,'Item',nPos)
return aRet[nCol]
Bom, o resultado é espetacular, vejam as 3 telas antes, durante e após a pesquisa
1ª tela: ANTES DA PESQUISA 100% gráficos da WVG↓
TELA PDV 01 - antes da pesquisa - 100% gráfica com WVG
TELA PDV 01 - antes da pesquisa - 100% gráfica com WVG
2ª tela: DURANTE A PESQUISA 100% gráficos HMG (após o 1º enter sem digitar nada no campo CÓDIGO)↓
tela PDV 02 - durante a pesquisa
tela PDV 02 - durante a pesquisa
3ª tela: APÓS ENCONTRAR O PRODUTO e pressionar o ENTER ou DUPLO CLIQUE ↓
TELA PDV 03 - após a pesquisa o FORM_WINDOW 100% HMG é fechado
TELA PDV 03 - após a pesquisa o FORM_WINDOW 100% HMG é fechado
Bom, conclusão da brincadeira:
- a compilação foi feita usando a interface IDE/HMG 3.4.4 com apenas a inclusão da GTWVG na lista de libs;
- no início do main só contém #include "hmg.ch"
- não contém #require "gtwvg"
- tudo funciona perfeitamente, exceto que:

1) no momento de ESC do formulário 100% HMG o controle retorna para o GET 100% harbour perfeitamente. PONTO POSITIVO;
2) quando do DUPLO CLIQUE ou do ENTER para escolher o produto, o FORMULÁRIO 100% HMG fecha mas parece que trava a TELA anterior que contém o GET e o relógio fica travado. Nada mais funciona, a não ser fechar o sistema com o clique no X da janela.

Faltam, alguns ajustes para voltar o controle ao GET.
Tirando isso, podem observar que há misturas gráficas e perfeitas entre as LIBs GTWVG e HMG-3, mas, que não retorna como nos exemplos do QUINTAS o controle para o GET, no caso, do produto.

Se, o JPA / Quintas tiver uma ideia, vamo que vamo!
vlw!
syslink
Usuário Nível 3
Usuário Nível 3
Mensagens: 132
Registrado em: 20 Fev 2018 13:13
Localização: joinvile/sc

"Começando" com GUI

Mensagem por syslink »

uau que maravilha vcs manipularam com a junção das libs gráficas!
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

"Começando" com GUI

Mensagem por JoséQuintas »

1) no momento de ESC do formulário 100% HMG o controle retorna para o GET 100% harbour perfeitamente. PONTO POSITIVO;
2) quando do DUPLO CLIQUE ou do ENTER para escolher o produto, o FORMULÁRIO 100% HMG fecha mas parece que trava a TELA anterior que contém o GET e o relógio fica travado. Nada mais funciona, a não ser fechar o sistema com o clique no X da janela.
GUI é GUI... console é console....

Numa janela console, todo funcionamento da janela depende de teclado/mouse e da própria janela.
Acabou teclado/mouse, acabou janela, tchau janela e tchau teclado/mouse.

Numa janela GUI.... a janela tem vida própria, qualquer parte da janela funciona como um programa ativo.
Fechou a rotina... não significa que fechou a janela, ou que liberou teclado/mouse.
Provavelmente a GTWVG está esperando o retorno da outra JANELA, incluindo teclado e mouse, mas a rotina retornou sem teclado/mouse.
É como ter ficado metade do programa numa janela e metade na outra, então nenhuma janela consegue funcionar por inteiro.

O que confunde é pensar que um aplicativo GUI é apenas uma janela gráfica.
Se fosse isso, era só salvar a tela como uma foto e o aplicativo estaria pronto.
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/
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

"Começando" com GUI

Mensagem por microvolution »

JoséQuintas escreveu:GUI é GUI... console é console....
mas vc viu q a tela gráfica desenhada em GTWVG é semelhante à da HMG? o q vejo é que, parece que se a gente fecha o formulário na HMG dá a impressão que acabou tudo. Vi aí no seu exemplo que a HMG-E dá pra desativar o FORM_MAIN, o q não consegui encontrar na HMG.
JoséQuintas escreveu:Provavelmente a GTWVG está esperando o retorno da outra JANELA, incluindo teclado e mouse, mas a rotina retornou sem teclado/mouse.
eu também sinto esta mesma coisa, pois o relógio SHOWTIME() para de funcionar ao retornar.
Bom, mas, como vc conseguiu resolver isso na HWGUI e na HMG-E retornando o controle para uma tela CONSOLE sem o sistema ficar perdido no tempo/espaço?
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

"Começando" com GUI

Mensagem por JoséQuintas »

Vi aí no seu exemplo que a HMG-E dá pra desativar o FORM_MAIN, o q não consegui encontrar na HMG.
Bom, procurando as variáveis, encontrei em h_init.prg:
MEMVAR _HMG_InitCodepage
MEMVAR _HMG_MainWindowFirst
MEMVAR _HMG_MainFormIndex
Como o nome é sugestivo, procurei mainwindowfirst
#xtranslate SET WINDOW MAIN OFF => _HMG_MainWindowFirst := .F.
#xtranslate SET WINDOW MAIN ON => _HMG_MainWindowFirst := .T.
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/
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

"Começando" com GUI

Mensagem por Claudio Soto »

Existe:
Set Window Main off
Es original de hmg oficial y por defecto en hmg.3.4.4 es off
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

"Começando" com GUI

Mensagem por microvolution »

Claudio Soto escreveu:Es original de hmg oficial y por defecto en hmg.3.4.4 es off
vc quer dizer Dr.Soto que não há possibilidade de usar este recurso no hmg 3.4.4?
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

"Começando" com GUI

Mensagem por microvolution »

uma coisa q estou observando, é que parece que não há conexão entre as variáveis das libs ao retornar:
exemplo:
- a primeira tela (harbour + gráficos da gtwvg main) chama a PESQUISA (form window modal da HMG) no momento do ENTER; até aí tudo bem:
- então, a PESQUISA é realizada.
- quando se pressiona ENTER ou DUPLO CLIQUE do mouse, o valor deveria ser retornado, parece que é apagado no momento do THISWINDOW.RELEASE

Aí fiz um outro teste:
- usei a minha antiga função CRIABROWSE em 100% harbour pra ser chamada, neste caso do exemplo acima a PESQUISA;
- quando a PESQUISA é satisfeita e a gente pressionar enter (não tem o mouse neste caso), existe as seguintes linhas que retornam do TBROWSEDB para a variável que acionou a PESQUISA:

Código: Selecionar todos

                       case valtype (VALOR) = 'N'
                              if set (_SET_CONFIRM)
                                   keyboard strtran (str (VALOR),' ','0') + chr (K_ENTER)
                              else
                                   keyboard strtran (str (VALOR),' ','0')
                              endif
As linhas de código acima, fazem com que o KEYBOARD retorne para a variável anterior (a que chamou a pesquisa) seja preenchida.
- Isso deu certo, só que a tela fica embolada, pois estamos usando as funções gráficas da GTWVG.

Então, fiz um pequeno acréscimo no código da função CRIABROWSE e a renomeei para CRIABROWSE_WVG.
Bem no início (após as declarações LOCAL), acrescentei os códigos abaixo, para que a tela seja aberta como CRT() em MODAL:


Código: Selecionar todos

   LOCAL oCrt, nSel
   LOCAL aPnt   := WvtSetPaint( {} )
   LOCAL aPaint := {}   
   oCrt := WvgCrt():New( , , { 0, 0 }, { MaxRow(), MaxCol() }, , .T. )

   oCrt:lModal      := .T.
   oCrt:resizable   := .F.
   oCrt:closable    := .F.
   oCrt:title       := "SiCCA v3.6.04 - CONSULTA ARQUIVO - " + NOME_ARQUIVO
   // oCrt:icon        := hb_DirBase() + "vr_1.ico"

   oCrt:Create()
   oCrt:show()

   AAdd( aPaint, { "Box_V", {|| Wvt_DrawBoxRaised( 2, 2, MaxRow()-4, MaxCol()-3 ) }, NIL, { WVT_BLOCK_BOX, 2, 2, MaxRow()-4, MaxCol()-3 } } )
   WvtSetPaint( aPaint )

   SetColor( "N/W" )
   CLS
depois pra encerrar a tela e voltar à anterior, acrescentei:

Código: Selecionar todos

				oCrt:Destroy()
				WvtSetPaint( aPnt )
Aí, pude constatar que só com este acréscimo de linhas, os valores do KEYBOARD não são repassados para a tela anterior.
- Parece que o que acontece no oCRT, fica nele, e, após o oCRT:DESTROY() tudo o que aconteceu lá dentro é como se as variáveis não tivesse existido, e, aí os valores não repassam.

- Ao fazer a tentativa na HMG, a impressão é a mesma.
Parece que ao finalizar o THISWINDOW.RELEASE, tudo o que estava lá é pertido, e, por isso o GET que chamou a PESQUISA (seja em GTWVG ou HMG) não devolve os valores.

- Talvez existe uma solução simples pra isso, mas, não faço a mínima ideia.
MSDN
Usuário Nível 4
Usuário Nível 4
Mensagens: 741
Registrado em: 28 Nov 2003 15:55
Localização: CWB
Contato:

"Começando" com GUI

Mensagem por MSDN »

Mistérios da meia-noite pequeno gafanhoto....
A solução para o seu problema já estava feita, como fui eu quem fez essa tela e essa rotina, não aguentei te ver perdido tacando pedra em avião....veja a linha onde tem o setproperty, ele pega um valor e lança no campo que vc quiser... só lembrando o que o Quintas já falou várias e várias vezes, tem diferença entre só console e GUI, vc quer fazer as coisas como se faz na Microvolutionlândia, não dá, tem que seguir regras, daí os mistérios começam a ser resolvidos..... Scooby-Doo Doo Doo..
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

"Começando" com GUI

Mensagem por JoséQuintas »

Claudio Soto escreveu:
Es original de hmg oficial y por defecto en hmg.3.4.4 es off
vc quer dizer Dr.Soto que não há possibilidade de usar este recurso no hmg 3.4.4?
Confunde um pouco...
DEFECTO quer dizer DEFAULT/PADRÃO, e não defeito.

Ele disse que na HMG oficial, por padrão é OFF.
Quer dizer que basta usar o comando e alterar pra ON.
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