Clipper On Line • Ver Tópico - "Começando" com GUI

"Começando" com GUI

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

Moderador: Moderadores

 

"Começando" com GUI

Mensagempor JoséQuintas » 19 Mai 2017 16:42

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.

#if ! defined( __XHARBOUR__ ) && ( ( __HARBOUR__ - 0 ) > 0x030100 )
   InitCodePage()
#endif
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: 18113
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1213 vezes

"Começando" com GUI

Mensagempor JoséQuintas » 19 Mai 2017 18:58

Só a título de curiosidade:

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

Mas... tinha colocado isto aqui:

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

"Começando" com GUI

Mensagempor microvolution » 27 Fev 2018 09:22

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: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

"Começando" com GUI

Mensagempor microvolution » 27 Fev 2018 09:24

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.
microvolution
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

"Começando" com GUI

Mensagempor syslink » 01 Mar 2018 07:50

JoséQuintas escreveu:- hmg extended 17.04 alterada
você já testou com a HMG (Roberto Lopez)?
syslink
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 132
Data de registro: 20 Fev 2018 13:13
Cidade/Estado: joinvile/sc
Curtiu: 3 vezes
Mens.Curtidas: 3 vezes

"Começando" com GUI

Mensagempor microvolution » 01 Mar 2018 20:15

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:
                @ 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:
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:
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()":
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()
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():
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.png
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.png
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.png
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!
microvolution
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

"Começando" com GUI

Mensagempor syslink » 02 Mar 2018 10:32

uau que maravilha vcs manipularam com a junção das libs gráficas!
syslink
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 132
Data de registro: 20 Fev 2018 13:13
Cidade/Estado: joinvile/sc
Curtiu: 3 vezes
Mens.Curtidas: 3 vezes

"Começando" com GUI

Mensagempor JoséQuintas » 02 Mar 2018 11:39

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

"Começando" com GUI

Mensagempor microvolution » 02 Mar 2018 15:25

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?
microvolution
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

"Começando" com GUI

Mensagempor JoséQuintas » 02 Mar 2018 16:59

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

"Começando" com GUI

Mensagempor Claudio Soto » 02 Mar 2018 17:41

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
Avatar de usuário

Claudio Soto
Colaborador

Colaborador
 
Mensagens: 555
Data de registro: 27 Ago 2012 12:31
Cidade/Estado: Uruguay
Curtiu: 35 vezes
Mens.Curtidas: 166 vezes

"Começando" com GUI

Mensagempor microvolution » 02 Mar 2018 18:03

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: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

"Começando" com GUI

Mensagempor microvolution » 02 Mar 2018 18:15

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

   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:
            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.
microvolution
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1175
Data de registro: 02 Set 2011 22:17
Curtiu: 59 vezes
Mens.Curtidas: 17 vezes

"Começando" com GUI

Mensagempor MSDN » 02 Mar 2018 18:28

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..
MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: CWB
Curtiu: 178 vezes
Mens.Curtidas: 123 vezes

"Começando" com GUI

Mensagempor JoséQuintas » 02 Mar 2018 18:46

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

Anterior Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Bing [Bot] 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