Página 2 de 2

Tecla de Abortamento

Enviado: 20 Jan 2013 12:33
por jamazevedo
Olá Jamil.
Não é o meu caso! A necessidade de abortar surge quando já não existe um "ESTADO DE ESPERA" e estamos em pleno processamento dos arquivos de dados.
Tente utilizar a função NEXTKEY() em vez de INKEY().

Não tenho intimidade com HMG, sou usuário Linux, em ambientes gráficos tem a questão do foco (a tela que está ativa no momento), pode ser que quando precione a tecla de abortagem seu programa esteja com foco em outro lugar, mas existe outra idéia; execute esse pequeno loop em tela texto e depois ambiente gráfico.

Código: Selecionar todos

BEGIN SEQUENCE
          DO WHILE .T.
                IF NEXTKEY() == K_ESC // ou K_F10
                    INKEY( 0 )
                    BREAK
                ENDIF
                ?? TIME()
          ENDDO
END
O comando BREAK irá encerrar o BEGIN SEQUENCE.

Tecla de Abortamento

Enviado: 20 Jan 2013 22:41
por alxsts
Olá!

Montei o exemplo abaixo e parece que agora atende o que você precisa. Segue o fonte do módulo e, em anexo, o projeto.
Módulo Main.Prg

Código: Selecionar todos

#include "hmg.ch"

Function Main

   Load Window Main
        
   Main.Center
   Main.Activate

Return
//------------------------------------------------------------------------------
Procedure Teste()

   LOCAL n, l, nKey

   EnableF10()

   c:= 0
             
   WHILE ++c < 100

      Main.Text_1.value := Str(c)   

      Do Events
       
      FOR n := 1 TO 1000000
      NEXT
     
   ENDDO 

   CleanUp()
      
   __Quit()
//------------------------------------------------------------------------------
FUNCTION MYEXIT()

	IF MsgYesNo('Deseja realmente sair do programa ?','Confirmação',{'Sim','Não'})
	    // DBCLOSEALL()  // redundante      quit já faz isso
	    CleanUp()
	    __Quit()

	ENDIF

RETURN NIL
//------------------------------------------------------------------------------
STATIC Procedure EnableF10()
	ON KEY F10 OF Main ACTION MyExit()
Return
//------------------------------------------------------------------------------
STATIC Procedure DisableF10()
	RELEASE KEY F10 OF Main
Return
//------------------------------------------------------------------------------
STATIC Procedure CleanUp()

   DisableF10()
   
   Main.hide
   Main.release
Return Nil
//------------------------------------------------------------------------------

Tecla de Abortamento

Enviado: 20 Jan 2013 23:56
por jsnascimento
Prezado José Airton de Menezes Azevedo;

Boa Noite!
Tente utilizar a função NEXTKEY() em vez de INKEY().

Não tenho intimidade com HMG, sou usuário Linux, em ambientes gráficos tem a questão do foco (a tela que está ativa no momento), pode ser que quando precione a tecla de abortagem seu programa esteja com foco em outro lugar, mas existe outra idéia; execute esse pequeno loop em tela texto e depois ambiente gráfico.
Fiz exaustivos testes com sua sugestão e verifiquei que ela só funciona no Clipper 5.2 e no Harbour quando compilado com harbour 3.0 e hbmk2; portanto, no modo Console.

Já no IDE gráfico (Hmg.3.1.01; Hmg.3.0.44 e Hmg.3.0.35) - "tenho todos instalados em meu PC" - sua sugestão não funciona. Creio que é porque no loop do "Do While" - os comandos inkey() e o NEXTKEY() não são reconhecidos. Parece-me, que a função inkey() não funciona bem com o modo Gráfico do Harbour.

Em tempo: Eu vi o poste do Alexandre, com anexo, vou testá-lo. Depois posto aqui os resultados.

Obrigado pelas dicas!

Estamos evoluindo!

O lema é não desistir !!!

Obrigado!

Jamil S. Nascimento

Tecla de Abortamento

Enviado: 21 Jan 2013 00:15
por jsnascimento
:)) Prezado Alexandre Santos (AlxSts),

Boa Noite!


Baixei o seu projeto e compilei na IDE gráfica do Harbour.

Na janela principal do aplicativo é solicitado uma entrada qualquer e depois, quando acionado o botão "GO", começa o loop.

Quando acionado a tecla F10 o programa é interrompido e solicitado ao usuário a decisão de Sair ou não do aplicativo.

Usei as duas opções: "Sair" e "Não Sair". Ambas funcionaram perfeitamente.

Estamos diante da grande possibilidade de você ter conseguido "Acertar na Mosca".

Infelizmente, hoje não poderei ficar até mais tarde para implementar e testar a sua contribuição no meu aplicativo!

Farei isto amanhã! Estou ansioso para fazer isto.....

Muito Obrigado!

Jamil S. Nascimento

Tecla de Abortamento

Enviado: 21 Jan 2013 00:34
por alxsts
Olá!

Na verdade, o text box que tem no form deveria ser um label... é só clicar no botão "Go". A intenção era embutir no teu código mas, não deu tempo.

Acredito que vá funcionar a contento.

Tecla de Abortamento

Enviado: 21 Jan 2013 19:27
por jsnascimento
Prezado Alexandre,

Boa Noite!


Implementei e testei a sua sugestão no meu aplicativo - "Padronizador".

Funcionou parcialmente!

Antes do grande processamento, tudo ok! Mas durante, ainda temos problemas...

Fiz como você: compactei o meu projeto com as sugestões implementadas e estou anexando aqui, juntamente com três arquivos "dbf's"; devidamente preparados para realização do teste. Sem os "dbf's" não há como testar o que eu estou falando. Portanto, agora estão aí.

Basta compilar o projeto e quando solicitar as iniciais dos arquivos, coloque: "TE".

Tente acionar a tecla "F10" para abortar o processamento e verás que a mesma não responde neste momento.

No aguardo!

Obrigado!

Jamil S. Nascimento
Padronizador.zip
(698.71 KiB) Baixado 73 vezes

Tecla de Abortamento

Enviado: 21 Jan 2013 20:49
por alxsts
Olá Jamil!

Faltou apenas um comando (Do Events), que está lá no exemplo que postei.

Segue o trecho do código que alterei. É só bater o olho e já saberá onde está, dentro do main_Padronizador.Prg:

Código: Selecionar todos

   *----------------------------------------------------------------------------	 
   * - > C.I.R.C.U.I.T.O: Percorrer os registros do arquivo original até ao fim
   *----------------------------------------------------------------------------
   *   
   Do While .not. eof()
   
      *------------------------------------------------------------------------------*
      * ---> Do Events
      *      Permite que a HMG processe suas mensagens (eventos), 
      *      sendo que um deles é controlar a janela popup que se abre com o 
      *      pressionamento da tecla F10 
      *------------------------------------------------------------------------------* 
      *Sugestão do Alexandre  Santos (AlxSts) em 21/01/2013   

      Do Events
      
      *------------------------------------------------------------------------------*         
      
      *
	    * -> Inicia as variáveis com blank
	    *       	  
	    INIC_VARM()	  
	    *
	    *--> Alimenta as variáveis com dados do registro do arquivo original
	    *	    
	    CARG_VARM()
Achei interessante a modularização que você fez com as funções que enviei.

Tecla de Abortamento

Enviado: 21 Jan 2013 21:55
por jsnascimento
Prezado Alexandre,
Boa Noite!

:)) :)) :))

The Game Over!
A novela acabou! The End!



Claro que tenho que assumir que distrai-me e não coloquei o “Do Events”.
Agora, com a inserção do “Do Events”, o programa está abortando perfeitamente. Acabou o problema! Virou programa! Rs!!!!!!!
Vou postar aqui somente o prg alterado: “main_Padronizador.prg”, para que os demais colegas aqui do fórum possam ver a coisa funcionando, contribuindo assim para a evolução do aprendizado coletivo.
Tenho este tópico por encerrado!
Agora, eu tenho outro tópico em aberto cujo título é: “Migrando de Clipper 5.2 para HMG 3.0.35” - https://pctoledo.org/forum/viewto ... =4&t=13817; que eu gostaria muito que você me ajudasse nele. Trata-se do mesmo aplicativo, porém o desfio é outro. Eu separei os tópicos para não desviar do assunto principal de cada um, muito embora uma coisa leva a outra. A minha necessidade de implantar uma “Tecla Quente” para abortar o aplicativo é por causa do travamento descrito noutro tópico. Estou processando arquivo que têm perto de 1 milhão de registro cada um, e quanto o programa chega perto da metade, começa a travar. Se eu alternar para outra tarefa do Windows, já era!!! Bom, tudo está relatado no tópico, cujo nome já mencionei e a data é 12 de janeiro de 2013.
Parabéns pela sua competência, valeu o esforço e fica gravado aqui a sua contribuição para o “Mundo Harbour”.
Nos encontramos no outro tópico citado.
Obrigado a todos que contribuíram! Valeu!
Abrcs!

Jamil S. Nascimento
Main_Padronizador.prg
(10.65 KiB) Baixado 94 vezes