Todos os meus códigos já estão "migrados" de clipper para harbour, usando a IDE/HMG (sem uso de formulários e das facilidades que a IDE nos oferece).
Aos poucos estão implantando os gráficos. E, por falar em programação GUI sou bem fraco.
Então, tenho um MAIN.PRG que chama diversos módulos. Todos estão em modo CONSOLE.
Estou desenvolvendo uma tela em modo GUI para um "mercadinho" e já quero impressioná-lo com um ambiente GRÁFICO (GUI) bem bonitinho.
Então, os códigos que estão em 100% harbour que chamam o módulo em GTWVG são estes:
Code: Select all
@ 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
Agora, a função abaixo, contém a fCDPRODUTO_WVG()
Code: Select all
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
Agora a função abaixo: função MOSTRA_LISTAGEM_PRD_HMG() - foi feita em harbour + HMG (100% gui):
Code: Select all
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)
Code: Select all
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)
Code: Select all
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)
Code: Select all
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, conclusão da brincadeira:Até aqui tudo funciona corretamente.
- 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 (nem sempre. às vezes trava a tela feita em GTWVG que chamou a tela FORM HMG). 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.
Tirando isso, podem observar que há misturas gráficas e perfeitas entre as LIBs GTWVG e HMG-3, mas, que não retorna o controle para o GET, no caso, do produto.
Se, o Roberto Lopez, Dr. Soto e demais, tiverem uma ideia, vamo que vamo!
vlw!
Ah! já ia me esquecendo:
vejam as 3 telas, por favor!
Mensagempor Claudio Soto » 02 Mar 2018 17:41O Dr. Soto, me respondeu num outro fórum, mas, não compreendi, bem, a causa do travamento do sistema:
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
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:
Code: Select all
case valtype (VALOR) = 'N'
if set (_SET_CONFIRM)
keyboard strtran (str (VALOR),' ','0') + chr (K_ENTER)
else
keyboard strtran (str (VALOR),' ','0')
endif
- 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:
Code: Select all
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
Aí, pude constatar que só com este acréscimo de linhas, os valores do KEYBOARD não são repassados para a tela anterior.oCrt:Destroy()
WvtSetPaint( aPnt )
- 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.