Temporizador no MiniGui

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Temporizador no MiniGui

Mensagem por Toledo »

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
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
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Temporizador no MiniGui

Mensagem por Hasse »

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() ?
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)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Temporizador no MiniGui

Mensagem por Hasse »

Caro Asimoes.

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 ENDDUMP
No código, para simular, basta referenciar ? tipo SIMULAENTER() e SIMULAESC() ?
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)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Temporizador no MiniGui

Mensagem por asimoes »

Hasse,

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

form_0.fmg

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
form_1.fmg

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
janela.rc

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)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Temporizador no MiniGui

Mensagem por asimoes »

Funções para simular o enter e escape.

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
Outros valores de VK*
Imagem
►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)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Temporizador no MiniGui

Mensagem por Hasse »

Citando:
Funções para simular o enter e escape.
Entendido. Para cada tecla que se deseja simular necessita-se de uma função.
Também já testei as funções em C++, SIMULAENTER() e SINMULAESCAPE(). Funcionam perfeitamente.


Citando:
Outros valores de VK*
Entendido.

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:
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.
Testei a minha ideia e não funcionou. O comando DO EVENTS remete o processamento diretamente para o RETURN final.

Cintando e meu texto:
Por fim, falta ainda resolver o funcionamento das LABEL's na Baixa_Prescr()
Já baixei o teu exemplo. Vou estudar e testar em seguida.

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)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Temporizador no MiniGui

Mensagem por asimoes »

Hasse,

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
form_0.fmg

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 )
form_1.fmg

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)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Temporizador no MiniGui

Mensagem por asimoes »

Uma pequena modificação na função Baixa_Prescr
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)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Temporizador no MiniGui

Mensagem por Hasse »

Huuuuummmmm !!!!

Diversão é ?????? Brincadeira....

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)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Temporizador no MiniGui

Mensagem por asimoes »

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.
►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)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Temporizador no MiniGui

Mensagem por Hasse »

Entendido.
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)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Temporizador no MiniGui

Mensagem por asimoes »

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.

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
form_1.fmg

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)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Temporizador no MiniGui

Mensagem por asimoes »

Se a janela for minimizada não vai funcionar, tem que restaurar primeiro com SENDMESSAGE

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)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Temporizador no MiniGui

Mensagem por Hasse »

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 !!!
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)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Temporizador no MiniGui

Mensagem por Hasse »

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.
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)
Responder