Temporizador no MiniGui
Moderador: Moderadores
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Temporizador no MiniGui
Amigos, em anexo segue um exemplo.
Abraços,
Obs.: exemplo em MiniGui Extended, mas para HMG Oficial basta trocar no código fonte o minigui.ch por hmg.ch
Abraços,
Obs.: exemplo em MiniGui Extended, mas para HMG Oficial basta trocar no código fonte o minigui.ch por hmg.ch
- Anexos
-
demo.prg- (2.04 KiB) Baixado 265 vezes
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
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
-
Hasse
- Usuário Nível 4

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
Temporizador no MiniGui
Boa tarde colegas.
Toledo:
Analisei o teu código, e a ideia muito simples e de fácil compreensão. Certamente vou testar, e certamente irá funcionar. Veja o parágrafo, que numerei aleatoriamente de 5)-. Muito obrigado pela atenção.
Asimoes:
Analisando as tuas ponderações e perguntas, também vejo que como está, isto fatalmente iria acontecer. Acontece que eu já uso o LIGA_TIMER() exatamente como você sugeriu em uma das mensagens acima. Como este não era o foco principal, e para encurtar o código, acabei por deletar estas linhas na postagem.
Veja se o meu raciocínio pode funcionar. Por enquanto, eu vejo que deve funcionar:
O DEFINE TIMER envia o processamento para o Temporizador() a cada 1 segundo (1000). Este retorna ao Principal.
Quando o valor dos 5 minutos (30000) zerar, o Temporizador() retorna a simulação de um RETURN.
Com a simulação de um RETURN, conforme você postou acima, o ON KEY RETURN envia o processamento para o Baixa_Prescr().
5)-Por fim, falta ainda resolver o funcionamento das LABEL's na Baixa_Prescr(), quando o foco está em outro aplicativo.
Explicando, este outro aplicativo é que fará a manutenção dos dados baixados e gravados pelo aplicativo em desenvolvimento.
Ele funciona em modo janelado e não usa a tela total, permitindo a visão constante da pequena janela windows, no topo da tela.
Por este motivo é que estou arrebentando os poucos tico-e-teco que ainda estão ativos (RS RS RS RS).
Com a ideia que o Toledo postou acima, penso que se poderia colocar todos estes LABEL's em uma única função semelhante, tipo FUNCTION Prt_Label( index ), onde o valor do index indicaria qual LABEl seria acionado.
O que me dizem desta ideia ?
Vale a pena testar ?
Será que o DO EVENTS não irá atrapalhar o andar dos diversos passos da função Baixa_Prescr() ?
Toledo:
Analisei o teu código, e a ideia muito simples e de fácil compreensão. Certamente vou testar, e certamente irá funcionar. Veja o parágrafo, que numerei aleatoriamente de 5)-. Muito obrigado pela atenção.
Asimoes:
Analisando as tuas ponderações e perguntas, também vejo que como está, isto fatalmente iria acontecer. Acontece que eu já uso o LIGA_TIMER() exatamente como você sugeriu em uma das mensagens acima. Como este não era o foco principal, e para encurtar o código, acabei por deletar estas linhas na postagem.
Veja se o meu raciocínio pode funcionar. Por enquanto, eu vejo que deve funcionar:
O DEFINE TIMER envia o processamento para o Temporizador() a cada 1 segundo (1000). Este retorna ao Principal.
Quando o valor dos 5 minutos (30000) zerar, o Temporizador() retorna a simulação de um RETURN.
Com a simulação de um RETURN, conforme você postou acima, o ON KEY RETURN envia o processamento para o Baixa_Prescr().
5)-Por fim, falta ainda resolver o funcionamento das LABEL's na Baixa_Prescr(), quando o foco está em outro aplicativo.
Explicando, este outro aplicativo é que fará a manutenção dos dados baixados e gravados pelo aplicativo em desenvolvimento.
Ele funciona em modo janelado e não usa a tela total, permitindo a visão constante da pequena janela windows, no topo da tela.
Por este motivo é que estou arrebentando os poucos tico-e-teco que ainda estão ativos (RS RS RS RS).
Com a ideia que o Toledo postou acima, penso que se poderia colocar todos estes LABEL's em uma única função semelhante, tipo FUNCTION Prt_Label( index ), onde o valor do index indicaria qual LABEl seria acionado.
O que me dizem desta ideia ?
Vale a pena testar ?
Será que o DO EVENTS não irá atrapalhar o andar dos diversos passos da função Baixa_Prescr() ?
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
-
Hasse
- Usuário Nível 4

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
Temporizador no MiniGui
Caro Asimoes.
Como ficaria para as teclas ENTER e ESCAPE ?
Preciso criar outra função ? tipo:
No código, para simular, basta referenciar ? tipo SIMULAENTER() e SIMULAESC() ?
Como ficaria para as teclas ENTER e ESCAPE ?
Preciso criar outra função ? tipo:
Código: Selecionar todos
HB_FUNC( SIMULAESC )
{
keybd_event(
VK_ESCAPE,
0,
0,
0
);
}
#pragma ENDDUMPHasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Temporizador no MiniGui
Hasse,
Veja esse exemplo, a janela sempre fica ativa mesmo que você mude o foco para outra, sem perder o controle.
janela.prg
form_0.fmg
form_1.fmg
janela.rc
Veja esse exemplo, a janela sempre fica ativa mesmo que você mude o foco para outra, sem perder o controle.
janela.prg
Código: Selecionar todos
/*
* Teste com janela
* Copyright 03-2014 Alexandre Simões <asimoesluz@gmail.com>
*/
#include "minigui.ch"
#include "common.ch"
#include "directry.ch"
#include "fileio.ch"
#include "hbcompat.ch"
#include "hbwin.ch"
#define PROGRAM 'Janela'
#define VERSION ' version 1.0'
#define COPYRIGHT ' Alexandre Simões, 03-2014'
STATIC hWnd := 0
DECLARE WINDOW Form_0
DECLARE WINDOW Form_1
FUNCTION Main()
LOAD WINDOW Form_0
LOAD WINDOW Form_1
ACTIVATE WINDOW Form_1, Form_0
RETURN Nil
FUNCTION BuildMenu()
ITEM 'S&air' ACTION {|| Form_1.Timer_1.Release, Form_0.Release }
RETURN Nil
Código: Selecionar todos
DEFINE WINDOW TEMPLATE ;
AT 0,0 ;
WIDTH 0 HEIGHT 0 ;
TITLE PROGRAM ;
MAIN NOSHOW ;
NOTIFYICON "ICON_A" ;
NOTIFYTOOLTIP PROGRAM ;
ON NOTIFYCLICK IF( IsWindowVisible(hWnd), Form_1.Hide, Form_1.Show )
DEFINE NOTIFY MENU OF Form_0
BuildMenu()
END MENU
END WINDOW
Código: Selecionar todos
DEFINE WINDOW TEMPLATE ;
AT 0,0 ;
WIDTH 1024 HEIGHT 768;
TITLE PROGRAM ;
CHILD ;
TOPMOST ;
ON INIT (hWnd := GetActiveWindow() ) ;
ON INTERACTIVECLOSE Form_0.Release
DEFINE LABEL Label_1
ROW 0
COL 0
VALUE Time()
WIDTH 58
HEIGHT 20
FONTNAME "Courier New"
FONTSIZE 8
BORDER .T.
TOOLTIP DtoC(Date())
BACKCOLOR WHITE
FONTCOLOR BLACK
VCENTERALIGN .T.
END LABEL
DEFINE TIMER Timer_1 INTERVAL 1000 ACTION ( Form_1.Label_1.Value := Time() )
DEFINE CONTEXT MENU
BuildMenu()
END MENU
END WINDOW
Código: Selecionar todos
// MANIFEST FOR CREATE 'XP-STYLE' APPLICATIONS
// O compilador gera os icones pela ordem alfabética dos nomes dados ao icone, portanto o icone da
// aplicação deve ser o primeiro da lista na ordem alfanumerica.
ICON_A ICON FILESYS2.ICO
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Temporizador no MiniGui
Funções para simular o enter e escape.
Outros valores de VK*

Código: Selecionar todos
#pragma BEGINDUMP
#include <windows.h>
HB_FUNC( SIMULAESCAPE )
{
keybd_event(
VK_ESCAPE,
0,
0,
0
);
}
HB_FUNC( SIMULAENTER )
{
keybd_event(
VK_RETURN,
0,
0,
0
);
}
#pragma ENDDUMP

►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
-
Hasse
- Usuário Nível 4

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
Temporizador no MiniGui
Citando:
Também já testei as funções em C++, SIMULAENTER() e SINMULAESCAPE(). Funcionam perfeitamente.
Citando:
Agora uma pergunta que não deixa calar:
Porque será que o pessoal que desenvolveu a MiniGui (respeito e homenagens a eles !!!) resolveu alterar de forma tão radical a manipulação destes valores ?
Isto quer dizer que a tecla ESCAPE tem o valor hexadecimal 1B e ENTER 0D ?
Citando meu texto:
Cintando e meu texto:
Toledo:
Já testei a tua sugestão. Funciona que é uma maravilha. Obrigado a você e ao Asimoes pela dedicação a este aprendiz que ainda tem muito a aprender.
Entendido. Para cada tecla que se deseja simular necessita-se de uma função.Funções para simular o enter e escape.
Também já testei as funções em C++, SIMULAENTER() e SINMULAESCAPE(). Funcionam perfeitamente.
Citando:
Entendido.Outros valores de VK*
Agora uma pergunta que não deixa calar:
Porque será que o pessoal que desenvolveu a MiniGui (respeito e homenagens a eles !!!) resolveu alterar de forma tão radical a manipulação destes valores ?
Isto quer dizer que a tecla ESCAPE tem o valor hexadecimal 1B e ENTER 0D ?
Citando meu texto:
Testei a minha ideia e não funcionou. O comando DO EVENTS remete o processamento diretamente para o RETURN final.Com a ideia que o Toledo postou acima, penso que se poderia colocar todos estes LABEL's em uma única função semelhante, tipo FUNCTION Prt_Label( index ), onde o valor do index indicaria qual LABEl seria acionado.
Cintando e meu texto:
Já baixei o teu exemplo. Vou estudar e testar em seguida.Por fim, falta ainda resolver o funcionamento das LABEL's na Baixa_Prescr()
Toledo:
Já testei a tua sugestão. Funciona que é uma maravilha. Obrigado a você e ao Asimoes pela dedicação a este aprendiz que ainda tem muito a aprender.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Temporizador no MiniGui
Hasse,
Utilizando o exemplo anteriormente postado adaptando ao exemplo do Toledo.
Boa diversão!
form_0.fmg
form_1.fmg
Utilizando o exemplo anteriormente postado adaptando ao exemplo do Toledo.
Boa diversão!
Código: Selecionar todos
/*
* Exemplo de Janela com temporizador
* Adicionado ao exemplo do Mestre Toledo.
*/
#include "minigui.ch"
#include "common.ch"
#include "directry.ch"
#include "fileio.ch"
#include "hbcompat.ch"
#include "hbwin.ch"
#define PROGRAM 'Demo com Temporizador'
STATIC hMainWin := 0
DECLARE WINDOW Form_0
DECLARE WINDOW Form_1
/*
*/
FUNCTION Main()
LOCAL n_Lrg:=600
PRIVATE n_Minutos:=5
PRIVATE n_Interv_5:=n_Minutos*60000
PRIVATE lAtualiza:=.T.
nWidth_:=GetDesktopWidth()
LOAD WINDOW Form_0
LOAD WINDOW Form_1
ACTIVATE WINDOW Form_1, Form_0
RETURN Nil
FUNCTION BuildMenu()
Notificar("Janela Ativada", "Demo de Temporizador")
SEPARATOR
ITEM 'S&air' ACTION {|| Form_1.Timer_1.Release, Form_0.Release }
RETURN Nil
STATIC PROCEDURE Notificar(cMensagem, cTitulo, lFim)
*--------------------------------------------------------*
LOCAL nIconIndex
LOCAL cTitle
LOCAL cMessage
HB_Default(@cTitulo,"PrintWin")
HB_Default(@lFim,.F.)
nIconIndex:=1
cTitle :=WIN_AnsiToOEM(cTitulo)
cMessage :=WIN_AnsiToOEM(cMensagem)
ShellTrayBalloonTipShow( hMainWin, nIconIndex, cTitle, cMessage )
IF lFim
HB_IdleSleep( 3 )
WIN_ShellNotifyIcon( hMainWin, , , , , , Chr(0) )
ENDIF
RETURN
*--------------------------------------------------------------------------------*
FUNCTION ShellTrayBalloonTipShow( hWnd, nIconIndex, cTitle, cMessage )
*--------------------------------------------------------------------------------*
RETURN WIN_ShellNotifyIcon( hWnd, , , , , , cMessage, 20000, cTitle, nIconIndex )
*********************************
FUNCTION Baixa_Prescr()
lAtualiza:=.F.
_SetValue( 'label_1', 'form_1', 'Conexão ATIVA' )
_SetValue( 'label_2', 'form_1', '=== Download em andamento ===' )
/* Aguarda 30 segundos, apenas para simular que está baixando algum arquivo */
millisec(30000)
n_Interv_5:=n_Minutos*60000
lAtualiza:=.T.
RETURN .T.
*********************************
FUNCTION MudaLabel(lAtualiza)
If lAtualiza
IF n_Interv_5==(n_Minutos*60000)
_SetValue( 'label_1', 'form_1', '<ESC> Encerrar <ENTER> Iniciar outra leitura' )
ENDIF
IF n_Interv_5>9000
c_Tempo := Right(SecToTime(n_Interv_5 / 1000),5)
_SetValue( 'label_2', 'form_1', 'Próxima leitura em ' + c_Tempo + ' minutos' )
ELSE
c_Tempo := Right(SecToTime(n_Interv_5 / 1000),1)
_SetValue( 'label_2', 'form_1', 'Leitura iniciando em ' + c_Tempo + ' segundos' )
ENDIF
n_Interv_5-=1000
IF n_Interv_5<=0
Baixa_Prescr()
ENDIF
DO EVENTS
ENDIF
RETURN Nil
Código: Selecionar todos
DEFINE WINDOW TEMPLATE ;
AT 0,0 ;
WIDTH 0 HEIGHT 0 ;
TITLE PROGRAM ;
MAIN NOSHOW ;
NOTIFYICON "ICON_A" ;
NOTIFYTOOLTIP PROGRAM ;
ON NOTIFYCLICK IF( IsWindowVisible(hWnd), Form_1.Hide, Form_1.Show ) ;
DEFINE NOTIFY MENU OF Form_0
BuildMenu()
END MENU
END WINDOW
hMainWin:=WIN_N2P( Application.Handle )
Código: Selecionar todos
DEFINE WINDOW TEMPLATE ;
AT 0,750 ;
WIDTH 600 HEIGHT 100;
TITLE 'Demo de Temporizador' ;
CHILD ;
ON INTERACTIVECLOSE Form_0.Release
@ 12,15 LABEL label_1 WIDTH n_Lrg-60 HEIGHT 20 ;
VALUE 'Conexão INATIVA' ;
FONT 'Times New Roman' SIZE 14 ;
FONTCOLOR RED
@ 40,15 LABEL label_2 WIDTH n_Lrg-60 HEIGHT 20 ;
VALUE '===============' ;
FONT 'Times New Roman' SIZE 14 ;
FONTCOLOR BLUE
ON KEY ESCAPE ACTION { || ThisWindow.Release }
ON KEY RETURN ACTION { || Baixa_Prescr() }
DEFINE TIMER Timer_1 INTERVAL 1000 ACTION MudaLabel(lAtualiza)
DEFINE CONTEXT MENU
BuildMenu()
END MENU
END WINDOW
FORM_1:=nWidth_-640
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Temporizador no MiniGui
Uma pequena modificação na função Baixa_Prescr
Para não dar erro na janela.
Para não dar erro na janela.
Código: Selecionar todos
FUNCTION Baixa_Prescr()
LOCAL nContador:=1
lAtualiza:=.F.
_SetValue( 'label_1', 'form_1', 'Conexão ATIVA' )
_SetValue( 'label_2', 'form_1', '=== Download em andamento ===' )
/* Aguarda 30 segundos, apenas para simular que está baixando algum arquivo */
DO WHILE nContador <= 30
HB_IdleSleep( 1 )
DO EVENTS
nContador++
ENDDO
n_Interv_5:=n_Minutos*60000
lAtualiza:=.T.
RETURN .T.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
-
Hasse
- Usuário Nível 4

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
Temporizador no MiniGui
Huuuuummmmm !!!!
Diversão é
??? Brincadeira....
Só pergunta:
qual a finalidade da função "HB_IdleSleep( 1 )" ?
o que ela faz ?
Diversão é
Só pergunta:
qual a finalidade da função "HB_IdleSleep( 1 )" ?
o que ela faz ?
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Temporizador no MiniGui
A função HB_IdleSleep() é utilizada para não sobrecarregar o processador. O parâmetro passado é em segundos.
Ex. HB_IdleSleep(30) para o processamento por 30 seg.
Ex. HB_IdleSleep(30) para o processamento por 30 seg.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
-
Hasse
- Usuário Nível 4

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
Temporizador no MiniGui
Entendido.
Agora percebi que é uma função nativa do xHarbour.
Obrigado pelos exemplos, ajuda e orientação.
Um abração.
Agora percebi que é uma função nativa do xHarbour.
Obrigado pelos exemplos, ajuda e orientação.
Um abração.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Temporizador no MiniGui
Consegui simular o enter no exemplo anterior mesmo que o foco esteja em outra janela:
Funções novas:
SetForeGroundWindow( GetFormHandle('form_1') ) //Este aqui é muito importante o foco deve voltar para que a simulação do enter funcione corretamente.
form_1.fmg
Funções novas:
SetForeGroundWindow( GetFormHandle('form_1') ) //Este aqui é muito importante o foco deve voltar para que a simulação do enter funcione corretamente.
Código: Selecionar todos
FUNCTION TesteEnter
SimulaEnter()
RETURN ""
FUNCTION MudaLabel(lAtualiza)
IF lAtualiza
IF n_Interv_5==(n_Minutos*60000)
_SetValue( 'label_1', 'form_1', '<ESC> Encerrar <ENTER> Iniciar outra leitura' )
DO EVENTS
ENDIF
IF n_Interv_5 == 270000 // Inclui para testar: nos 4:30 simula o enter
SetForeGroundWindow( GetFormHandle('form_1') ) muda o foco para cá.
form_1.Button_11.caption:=TesteEnter() //O enter entra no caption do botão invisivel.
ENDIF
IF n_Interv_5>9000
c_Tempo := Right(SecToTime(n_Interv_5 / 1000),5)
_SetValue( 'label_2', 'form_1', 'Próxima leitura em ' + c_Tempo + ' minutos' )
ELSE
c_Tempo := Right(SecToTime(n_Interv_5 / 1000),1)
_SetValue( 'label_2', 'form_1', 'Leitura iniciando em ' + c_Tempo + ' segundos' )
ENDIF
n_Interv_5-=1000
IF n_Interv_5<=0
Baixa_Prescr()
ENDIF
DO EVENTS
ENDIF
RETURN Nil
Código: Selecionar todos
DEFINE WINDOW TEMPLATE ;
AT 0,750 ;
WIDTH 600 HEIGHT 100;
TITLE 'Demo com Temporizador' ;
CHILD NOSIZE;
ON INTERACTIVECLOSE Form_0.Release
@ 12,15 LABEL label_1 WIDTH n_Lrg-60 HEIGHT 20 ;
VALUE 'Conexão INATIVA' ;
FONT 'Times New Roman' SIZE 14 ;
FONTCOLOR RED
@ 40,15 LABEL label_2 WIDTH n_Lrg-60 HEIGHT 20 ;
VALUE '===============' ;
FONT 'Times New Roman' SIZE 14 ;
FONTCOLOR BLUE
@ 40,300 BUTTON Button_11 CAPTION 'Ok' INVISIBLE //O botão fica invisivel no form
ON KEY ESCAPE ACTION { || ThisWindow.Release }
ON KEY RETURN ACTION { || Baixa_Prescr() }
DEFINE TIMER Timer_1 INTERVAL 1000 ACTION MudaLabel(lAtualiza)
DEFINE CONTEXT MENU
BuildMenu()
END MENU
END WINDOW
FORM_1:=nWidth_-640
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Temporizador no MiniGui
Se a janela for minimizada não vai funcionar, tem que restaurar primeiro com SENDMESSAGE
Incluir esses defines no inicio do programa.
Incluir esses defines no inicio do programa.
Código: Selecionar todos
#define WM_SYSCOMMAND 274
#define SC_MAXIMIZE 61488 // 0xF030
#define SC_RESTORE 61728
Código: Selecionar todos
IF n_Interv_5 == 270000
SetForeGroundWindow( GetFormHandle('form_1') )
SENDMESSAGE(GetFormHandle('form_1'),WM_SYSCOMMAND,SC_RESTORE,0) //Tem que restaurar a janela primeiro!
form_1.Button_11.caption:=TesteEnter()
ENDIF
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
-
Hasse
- Usuário Nível 4

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
Temporizador no MiniGui
Muito boa esta opção de voltar o foco ao aplicativo DL_Prescricao.
Para evitar que alguém minimize o aplicativo podemos desativar a opção minimizar. Eu sei que é possível, pois já li a respeito, só não lembro aonde e nem como.
Mas também podemos usar o SENDMESSAGE
Mesmo que faça sentido maximizar a tela, já que a tela será ocupada pelo aplicativo principal de manutenção), preciso usar o #define SC_MAXIMIZE ?
#define SC_RESTORE, pelo que entendi é o valopr para voltar o foco para o aplicativo DL_Prescricao, correto ?
Desta forma este é importante.
form_1.Button_11.caption:=TesteEnter() - Isto é para criar inserir um texto no botão, correto ? Eu não uso botões neste aplicativo, então certamente não preciso dele, correto ?
Pelo andar da carruagem, este aplicativo vai ficar "supimpa", como se dizia nos meus tempos de moleque.... "muito massa", hoje.
Valeu Asimoes !!!
Para evitar que alguém minimize o aplicativo podemos desativar a opção minimizar. Eu sei que é possível, pois já li a respeito, só não lembro aonde e nem como.
Mas também podemos usar o SENDMESSAGE
Mesmo que faça sentido maximizar a tela, já que a tela será ocupada pelo aplicativo principal de manutenção), preciso usar o #define SC_MAXIMIZE ?
#define SC_RESTORE, pelo que entendi é o valopr para voltar o foco para o aplicativo DL_Prescricao, correto ?
Desta forma este é importante.
form_1.Button_11.caption:=TesteEnter() - Isto é para criar inserir um texto no botão, correto ? Eu não uso botões neste aplicativo, então certamente não preciso dele, correto ?
Pelo andar da carruagem, este aplicativo vai ficar "supimpa", como se dizia nos meus tempos de moleque.... "muito massa", hoje.
Valeu Asimoes !!!
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
-
Hasse
- Usuário Nível 4

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
Temporizador no MiniGui
Asimoes:
Rodei o teste postado. Ficou MUUIITTTOOO BBBOOOMMM !!!!!
Funciona muito bem. :-Y
) :-Y
)
Agora é só incorporar estes códigos no aplicativo, ou vice-versa, e partir "pro abraço".
Sem a valiosíssima orientação dos amigos eu não teria obtido o êxito já alcançado. :{ :-Y
Obrigado a você, Mestre Asimoes, e também ao Mestre Toledo.
Rodei o teste postado. Ficou MUUIITTTOOO BBBOOOMMM !!!!!
Funciona muito bem. :-Y
Agora é só incorporar estes códigos no aplicativo, ou vice-versa, e partir "pro abraço".
Sem a valiosíssima orientação dos amigos eu não teria obtido o êxito já alcançado. :{ :-Y
Obrigado a você, Mestre Asimoes, e também ao Mestre Toledo.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
