Exemplo com HWGui

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

Exemplo com HWGui

Mensagem por leandrolinauer »

Boa tarde
Sou novo neste grupo HWGui, estou me aventurando nesta LIB, decidi mudar de GTWvw o qual esta dando muito problemas para outra e escolhi a HWGui.
Tenho um programa ja em funcionamento com GTWVW de monitoramento do banco de dados e estou passando ele para HWgui e ja em modo surdina no sistray.

Bom, como sou leigo nesta linguagem HWGui eu estou apanhando um bucado dela, visto que programo ainda da forma procedural do clipper e necessito ajuda neste tópico para eu poder entender como funciona.

o antigo fonte faz assim:
1-INICIA
2-ABRE ARQUIVOS
3-MONITORA (LOOP ATÉ QUE SEJA FINALIZADO)
4-FINALIZA
5-FECHA

Já na HWGUI com as janelas e no fim é ativada fiquei muito perdido.
Segue o código inicial.

Código: Selecionar todos

Function Main()
///INICIALIZAÇÃO DE VARIAVEIS
Local oBmpFundo:=HBITMAP():ADDFILE("img\fundo.bmp")
Local oSplash

Private oMainWindow, oTrayMenu, oTimer1
Private oIcon:= HIcon():AddResource("ICON_1")
Private oMens1:="Iniciado"
Private oMens2:="Monitoramento"
Private wSistema:="MONITORE"

Public wD_Instal:="\"+CurDir()+"\" //instalacao
Public wD_Images:=wD_Instal+"img\" //pasta das imagens do sistema
Public wD_Audios:=wD_Instal+"img\" //pasta de audio do sistema

INIT WINDOW oMainWindow MAIN TITLE wSISTEMA 
	  AT 0,0 BACKGROUND BITMAP oBmpFundo

SPLASH oSplash TO wD_Images + "SPLASHFOGO.JPG" TIME 2000

CONTEXT MENU oTrayMenu
    MENUITEM "Monitorar" ACTION {|| Hwg_msginfo("Tela de monitoramento")}
    SEPARATOR
    MENUITEM "Finalizar?" ACTION {|| Sair()}
ENDMENU   

oMainWindow:InitTray(oIcon,,oTrayMenu,wSistema,oMens1,oMens2) ///joga o sistema no sistray

ACTIVATE WINDOW oMainWindow NOSHOW

oTrayMenu:End() 
Return

Function Sair
*************
IF Hwg_MsgYesNo("Deseja finalizar o monitoramento?","ATENÇÃO!")
   oMainWindow:Close()
   quit
endif
Return
Acima seria a estrutura copiada da net e funcionando do geito correto.
o problema é, aonde coloco meu codigo de execução abaixo:

//configura a entrada no sistema, variaveis etc...
Configura_Sistema() //carrega as variaveis necessarias
//
Abrebancodedados() //abre os dbf da vida por enquanto, depois parto para sql. o qual ja estou convicto em 99% para mudar, mas o 1% que ta dificil (rsrsrs)
//
Monitorabanco() (em loop para que seja finalizado apenas ao ser solicitado), aqui vai verificar internet, verificar os dados, criar arquivos txt para envio, etc,
//
finaliza_sistema() //finaliza o programa

Bom a função monitorabanco() deverá ficar em execução e tbem deverá ser chamada no menu TRAY para que seja visualizado os processos na tela, não é para executar novamente, e sim voltar a tela que iniciou na surdina, não sei se me expressei bem para ser entendido.

Aguardo retorno
Grato pela ajuda
8-|
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

Exemplo com HWGui

Mensagem por leandrolinauer »

Bom dia a todos.
Ninguém se habilita a dar uma mãozinha.
Bom, deixando o Tray de lado, para fazer um sistema ficar rodando sozinho sem intervenção mesmo minimizado somente como eu monto o código, aonde em que parte eu coloco este evento de monitorar?, depois do INIT WINDOW antes do actived() ou depois do actived()?, estou em dúvida porque não sem programar desta forma e nos exemplo da HWgui não encontrei algo que esclarecesse.

Fico grato pela ajuda.
:)Pos
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Exemplo com HWGui

Mensagem por Toledo »

leandrolinauer escreveu:Bom, deixando o Tray de lado
Amigo, na sua mensagem anterior já tem o código para executar o programa no SysTray, e olhando por cima, parece que está certo. Veja também o arquivo \HWGUI\SAMPLES\TESTTRAY.PRG.
leandrolinauer escreveu:aonde em que parte eu coloco este evento de monitorar?
Você pode chamar a função no ON INIT do comando INIT WINDOW...

Código: Selecionar todos

INIT WINDOW oMainWindow MAIN TITLE wSISTEMA AT 0,0 BACKGROUND BITMAP oBmpFundo ON INIT {|| SuaFuncao()}
leandrolinauer escreveu:e tbem deverá ser chamada no menu TRAY para que seja visualizado os processos na tela, não é para executar novamente, e sim voltar a tela que iniciou na surdina
Neste caso, acho que seria melhor executar a função que vai fazer o monitoramento em uma thread e enviando informações para a tela de monitoramento (alterando SAY, GET,etc), que seria uma outra função, diferente da função que faz o monitoramento.

Sobre thread, veja: hb_threadStart

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

Exemplo com HWGui

Mensagem por leandrolinauer »

Boa tarde Toledo.
Grato pelo retorno.

Verifique no grupo e encontrei outros assuntos e andei misturando e testando até chegar no código abaixo funcionando.

Código: Selecionar todos

Function Main()
Local oBmpFundo:=HBITMAP():ADDResource("FUNDO")
Local oSplash, oStatusBAR

Private wVersao :="v0.01a"
Private wSistema:=" :: KaZa® :: MONITORE "+wVersao+" (Monitoramento de banco de dados MATRIZ x FILIAIS)"

Private oMainWindow, oTrayMenu, oTimer1
Private oIcon:= HIcon():AddResource("ICONE")
Private oMens1:="Iniciado"
Private oMens2:="Monitoramento"

Public wD_Instal:="\"+CurDir()+"\" //instalacao
Public wD_Images:=wD_Instal+"img\" //pasta das imagens do sistema
Public wD_Audios:=wD_Instal+"img\" //pasta de audio do sistema

SPLASH oSplash TO wD_Images + "SPLASH.BMP" TIME 2000

Configura_Sistema()
  
INIT WINDOW oMainWindow ;
	  TITLE wSISTEMA ; 
     AT 10,10  SIZE 1024,720 BACKGROUND BITMAP oBmpFundo ; 
	  ICON oIcon

ADD STATUS oStatusBAR TO oMainWindow PARTS 400
oStatusBAR:SetText(mEmpresa)

CONTEXT MENU oTrayMenu
    MENUITEM "Monitorar" ACTION {||  Monitor() }  BITMAP wD_Images+"lojas_m.bmp" 
    SEPARATOR
    MENUITEM "&Sobre" ACTION hwg_Msginfo("Módulo para monitoramento de dados via VPN do sistema"+ CHR(10)+CHR(13)+;
													  ":: KaZa® :: Copyright(c) KaZa Informática" + CHR(10)+CHR(13)+ ;
													  "Desenvolvido por KaZa Informática.") BITMAP wD_Images+"sobre_m.bmp"
    SEPARATOR
    MENUITEM "Finalizar" ACTION {|| Sair()} BITMAP wD_Images+"sair_m.bmp"
													      
ENDMENU   

oMainWindow:InitTray(oIcon,,oTrayMenu,wSistema) //oMens1,oMens2) ///joga o sistema no sistray

ACTIVATE WINDOW oMainWindow NOSHOW
oTrayMenu:End() //cancela o menu tray
Return

Function Sair
*************
IF Hwg_MsgYesNo("Deseja finalizar o monitoramento?","ATENÇÃO!")
   oMainWindow:Close()
   Quit
endif
Return


function Monitor()
oMainWindow:Show() //mostra a janela

@ 020,240 BUTTON "Ok"      ID IDOK      SIZE 100, 32
@ 180,240 BUTTON "Cancela" ID IDCANCEL  SIZE 100, 32
/*
wSAida:=.F.
Ik:=0
While .T. .And. wsaida=.F.
  wSaida:=ExitSeek()
  @ 20+iK,20 say "           "
  @ 20+iK,20 say "testando..."
  ik++
  If iK>10
     iK:=0
  EndIf
  INkey(0.2)
End
*/
Return
O problema é justamente no grosso da história.
Aonde esta acima com WHILE da vida fui fazer o teste para ver se o sistema ficava mostrando na tela continuamente sem parar até a intervenção manual, mas não da certo esta parte trava o programa só fechando e não mostra nada.
ja os button acima aparece e o programa fica legal até aí.
Por causa do oMainWindow:Show() para mostrar a janela ele não funcionou no INIT WINDOW eu creio que seja porque não foi criado oMainWindows ainda neste ponto.
Se você tiver mais uma solução ai para que eu possa rodar esta execução aonde esta o while e ainda que não seja invocado manualmente e que seja inicializado automaticamente.
Grato pela ajuda.
:-Y
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
Responder