Desabilitar e habilitar teclas

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

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

Desabilitar e habilitar teclas

Mensagem por Hasse »

Boa noite colegas.

Este tópico tem relação com um mais antigo:
https://pctoledo.org/forum/viewto ... ilit=Hasse

Na função Baixa_Prescr(), há um trecho que lê os dados do servidor remoto em um Banco Oracle, e, depois de lido, processado e gravado, envio para o Banco Oracle a informação que aqueles dados já foram transferidos.

Vejo a necessidade de desabilitar as teclas de controle que estão ativas no FORM, como:

Código: Selecionar todos

   ON KEY ALT+F4  ACTION { || Fecha_Connect(), ThisWindow.Release }
   ON KEY ALT+F12 ACTION { || Fecha_Connect(), ThisWindow.Release }
   ON KEY RETURN  ACTION { || Baixa_Prescr() }
E, ao término estas teclas devem novamente ser ativadas.
E, ainda, se possível, durante a execução do loop de leitura, arquivar em variável, caso houve pressionamento de uma tecla e qual delas, e com base nesta variável disparar a função correta.

Também fica a dúvida: Estas teclas ficarão desabilitadas somente para este aplicativo ou ficam desabilitadas para todos os outros aplicativos ?
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
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Desabilitar e habilitar teclas

Mensagem por Pablo César »

Hasse escreveu:Também fica a dúvida: Estas teclas ficarão desabilitadas somente para este aplicativo ou ficam desabilitadas para todos os outros aplicativos ?
Só ficará desabilitada para aquele form em que foi definido o ON KEY
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
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

Desabilitar e habilitar teclas

Mensagem por Hasse »

Caro Pablo.
OK. Obrigado.

1)-Ainda, como Desabilito e como Habilito estas teclas ? Qual a função que faz isto ?

2)-Com qual nome identifico, para o mesmo caso acima, aquele "X" que fecha a janela ? Este também deve ser Desabilitado e Habilitado.

A finalidade disto tudo é gravar um LOG de quando e quem encerrou o aplicativo. Fazer o processamento passar por uma Função específica.

Obrigado pela atençã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
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Desabilitar e habilitar teclas

Mensagem por Pablo César »

Hasse, na minha opinião, você deveria antecipar os eventos que são tanto de saída do programa como do fechamento da janela.

Se a intenção é obrigar ao usuário responder algo ou até mesmo não interromper algum processamento, você poderia optar pelas janelas MODAL que impedirá o usuário fazer foco fora do que queremos. Também pode apenas exibir uma janela WAIT WINDOWS enquanto processa algo.

Para não mostrar o "x' de fechar, existem várias formas. Uma delas é você desabilitar através da HMG-IDE a propriedade SysMenu ou na definição do WINDOW declarando com NOSYSMENU.

Também tem as funções para desabilitar o "x" (aqui tem uma) mas ainda acho que controlando os eventos de saída você irá evitar muita coisa.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
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

Desabilitar e habilitar teclas

Mensagem por Hasse »

Boa tarde colega Pablo.

1)-O código para desabilitar / Habilitar o botão X parece ser bem simples. Vou testar.

2)-O que o colega chama de "antecipar eventos" para mim ainda é um grande ponto de interrogação. Não sei como implementar esta solução. Também não sei se você não observou ou eu não consegui explicar corretamente. Se você tiver a paciência de me esclarecer, certamente ficarei grato, já que é mais um conhecimento adquirido.

O operador nada tem a fazer na tela do aplicativo, que somente informa se está havendo recepção de dados ou não, e/ou quanto tempo ainda falta para a próxima recepção. Se o operador desejar uma recepção imediata basta pressionar o <ENTER>, quando inicia-se uma nova recepção, já que envia o processamento para a Função Baixa_Prescr()

Durante o tempo em que o aplicativo estiver em modo recepção [ na Função Baixa_Prescr() ] ele não deve ser interrompido, sob pena de introduzir erros nos arquivos, tanto local quanto no remoto.
Logo após o término da recepção dos dados, as opções ALT+F12, ALT+F4, e ENTER devem novamente ativadas.

O "X" idem, já que também é uma opção para encerrar o aplicativo, e pode ser usado, mas neste caso eu preciso que ele envie o processamento para uma função de encerramento para registrar o LOG e não simplesmente feche o aplicativo. Ele deve enviar para a Função Fecha_Connect(). No final das contas, acredito que ainda desabilitarei este botão definitivamente, já que há 2 outras opções para fazer isto.
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
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Desabilitar e habilitar teclas

Mensagem por Pablo César »

Talvez eu não fui tão claro, melhor que palavras é o código fonte que pode te dar uma ideia:

Código: Selecionar todos

#include <hmg.ch>

Function Main()
DEFINE WINDOW Form_1 AT 219 , 253 WIDTH 378 HEIGHT 426 ;
	TITLE "" ICON NIL MAIN ON INTERACTIVECLOSE Sai_Sim_Nao()
	
	ON KEY RETURN ACTION { || (MsgInfo("Disparando a função Baixa_Prescr"),Baixa_Prescr()) }
	
	DEFINE BUTTON Button_1
	    ROW    280
	    COL    15
	    WIDTH  300
	    HEIGHT 28
	    ACTION Baixa_Prescr()
	    CAPTION "Disparar a função Baixa_Prescr"
	    FONTNAME "Arial"
	    FONTSIZE 9
	    TOOLTIP ""
	END BUTTON

END WINDOW
CENTER WINDOW Form_1
ACTIVATE WINDOW Form_1
Return Nil

Function Baixa_Prescr()
If File("Processando.Sim")
   Delete File("Processando.Sim")
   Form_1.Button_1.Caption:="Disparar a função Baixa_Prescr"
Else
   Memowrit("Processando.Sim","")
   Form_1.Button_1.Caption:="Finalizar a função Baixa_Prescr"
Endif
Return Nil

Function Sai_Sim_Nao()
Local lRet:=.T.

If File("Processando.Sim")
   MsgStop("No momento está processado a Baixa_Pescr !")
   lRet:=.F.
Else
   lRet:=MsgYesNo("Deseja encerrar a aplicação ?")
Endif
Return lRet
Veja que o ON INTERACTIVECLOSE você pode antecipar o evento de fechar seja pelo "x" ou pelo ALT-F4. Ainda se confirmado, você poderá registrar em LOG a saída e disparar a função Fecha_Connect().
Também observe que você poderá criar um arquivo FLAG enquanto a função Baixa_Pescr estiver sendo processada. Ou pode fazer isto por meio de uma variável. Eu sou mais a favor da criação do arquivo, vai que no meio do processamento cai a energia ou trava o computador. Quando entrar novamente, poderá reassumir onde parou ou simplesmente desclassificar o processamento que estava sendo feito...
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
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

Desabilitar e habilitar teclas

Mensagem por Hasse »

Boa tarde Pablo.

Creio que eu entendi o funcionamento do código que você me passou.

Mas, então me esclareça outra dúvida, levando em conta os dados abaixo:
O processamento da Função Baixa_Prescr() é bastante longa, e por vezes demorada. Envolve:
1)-Ler os dados;
2)-Formatar os dados;
3)-Gravar dados em um arquivo TXT;
4)-Pesquisar em arquivos vários locais;
5)-Formatar alguns dados do formato do Servidor Remoto para o Formato do Servidor Local;
6)-Gravar os dados nos arquivos locais;
7)-Imprimir a Prescrição baixada;
8)-Por fim gravar no Servidor remoto a informação da Data e Hora (HH:MM:SS:ccc) em que a prescrição foi baixada;
9)-A partir deste momento esta Prescrição baixada fica indisponível no Servidor Remoto. Somente o seu Administrador poderá disponibilizar novamente este registro.

Muito bem. Agora a pergunta: Durante este processamento acima citado, se inadvertidamente (há um outro aplicativo rodando ao mesmo tempo) um operador pressionar o <ESC> e o foco estiver no aplicativo Baixar Prescrições, este processamento não será interrompido imediatamente e fechando o aplicativo, independente do ponto onde estiver no momento ?

Durante o tempo de baixar o operador deverá ficar impedido de interromper o processamento, nem mesmo sob consulta.
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
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Desabilitar e habilitar teclas

Mensagem por Pablo César »

A ideia é justamente bloquear qualquer saída, dando uma mensagem que está sendo processada. Nesse momento, haverá uma interrupção, uma pausa e continuará o processamento. Só que nada é infalível. O computador pode travar, pode faltar a energia elétrica e ai ? Esse processamento, ficará comprometido, não é ?
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Desabilitar e habilitar teclas

Mensagem por Toledo »

Hasse, veja este exemplo:

Código: Selecionar todos

#include "hmg.ch"

Function Main()

   DEFINE WINDOW Form_1 ;
      AT 0,0 ;
      WIDTH 400 HEIGHT 300 ;
      TITLE 'Processamento - Desabilitar Teclas' ;
      MAIN

      DEFINE BUTTON oButton_1
        CAPTION 'Baixa_Prescr'
        ROW   20
        COL   100
        ACTION {|| Baixa_Prescr() }
        WIDTH 190
        HEIGHT 28
        TOOLTIP 'Disparar a função Baixa_Prescr'
      END BUTTON

   END WINDOW

   ON KEY ALT+F4 OF Form_1 ACTION { || Fecha_Connect(), Form_1.Release }
   ON KEY ALT+F12 OF Form_1 ACTION { || Fecha_Connect(), Form_1.Release }
   ON KEY RETURN OF Form_1  ACTION { || Baixa_Prescr() }

   Form_1.Center
   Form_1.Activate

Return Nil

*******************
Function Fecha_Connect()
   MsgInfo("Fecha_Connect")
Return Nil

*******************
Function Baixa_Prescr()

   DEFINE WINDOW BPrescr AT 318 , 328 ;
      WIDTH 529 HEIGHT 139 ;
      TITLE "Processando..." ;
      MODAL NOSIZE NOSYSMENU ;
      ON INIT {|| IniciaProc() }

      DEFINE LABEL oDesc
            ROW    10
            COL    10
            WIDTH  500
            HEIGHT 20
            VALUE "Aguarde..."
            FONTBOLD .T.
      END LABEL  

      DEFINE PROGRESSBAR ProgressBar_1
            ROW    40
            COL    10
            WIDTH  500
            HEIGHT 24
            RANGEMIN 0
            RANGEMAX 100
            TOOLTIP ''
      END PROGRESSBAR  

   END WINDOW

   ON KEY ALT+F4 OF BPrescr ACTION { || nada_faz() }
   ON KEY ALT+F12 OF BPrescr ACTION { || nada_faz() }
   ON KEY RETURN OF BPrescr ACTION { || nada_faz() }

   BPrescr.Center
   BPrescr.Activate

Return Nil

**********************
Function nada_faz()
   MsgInfo("Aguarde o processamento!")
Return Nil

**********************
Function IniciaProc()
   LOCAL nCount:=1, ;
         aDesc:={"Lendo Dados...",;
                 "Formatando os dados...",;
                 "Gravando dados no arquivo TXT...",;
                 "Pesquisando em arquivos locais...",;
                 "Formatando alguns dados...",;
                 "Gravando os dados nos arquivos locais...",;
                 "Imprimindo a Prescrição baixada...",;
                 "Gravando no Servidor remoto a informação da Data e Hora...",;
                 "Prescrição baixada indisponivel no Servidor Remoto..."}

   DO WHILE nCount<len(aDesc)
      nCal:=(nCount*100)/len(aDesc)
      BPrescr.oDesc.Value:=aDesc[nCount]
      BPrescr.ProgressBar_1.Value:=nCal
      millisec(1500)
      nCount+=1
      DO EVENTS
   ENDDO
   BPrescr.ProgressBar_1.Value:=100
   BPrescr.Release
Return Nil
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
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

Desabilitar e habilitar teclas

Mensagem por Hasse »

Muito bem. Então vamos lá. o meu Form_1.fmg ficou assim:

Código: Selecionar todos

DEFINE WINDOW TEMPLATE ;
   AT n_X1, n_Y1 ;
   WIDTH n_Lrg HEIGHT n_Alt;
   TITLE PROG_TIT ;
   CHILD ;
   ON INTERACTIVECLOSE Form_0.Release ; Sai_Sim_Nao( l_First )

   @ 12,15 LABEL label_1 WIDTH n_Lrg-20 HEIGHT 20 ;
      VALUE 'ConexÆo INATIVA' ;
      FONT 'Times New Roman' SIZE 14 ;
      FONTCOLOR BLUE

   @ 40,15 LABEL label_2 WIDTH n_Lrg-20 HEIGHT 20 ;
      VALUE '===============' ;
      FONT 'Times New Roman' SIZE 14 ;
      FONTCOLOR BLUE

   ON KEY ALT+F4  ACTION { || Sai_Sim_Nao(), ThisWindow.Release }
   ON KEY ALT+F12 ACTION { || Sai_Sim_Nao(), ThisWindow.Release }
   ON KEY RETURN  ACTION { || Baixa_Prescr() }

   DEFINE TIMER Timer_1 INTERVAL n_Interv_1 ACTION MudaLabel( l_Atualiza )
   
   DEFINE CONTEXT MENU
      *
      BuildMenu()
      *
   END MENU
   *
END WINDOW
A Função Baixa_Prescr() ficou assim:

Código: Selecionar todos

FUNCTION Baixa_Prescr( oConexao )
Memowrit( "Processando.Sim", "" )
...
...  Aqui estão todos os comandos e funções....
...
Delete File( "Processando.Sim" )
RETURN( l_Conex )
Na função Sai_Sim_Nao() ficou assim:

Código: Selecionar todos

FUNCTION Sai_Sim_Nao( l_First )
   *
   Local lRet:=.T.
   *
   IF l_First
      l_First := .F.
      lRet    := .F.
   ELSEIF File( "Processando.Sim" )
      lRet := .F.
   ELSE
      lRet := MsgYesNo( "Deseja encerrar a aplicação ?" )
      Fecha_Connect()
   ENDIF
   *
RETURN( lRet )
Precisei inserir um teste da condição de aplicativo iniciando, pois assim que ele abria já se apresentava a pergunta se é para encerrar....

Mas..... ainda não funciona corretamente. Basta pressionar ALT+F12 e o aplicativo encerra sem apresentar a pergunta e sem finalizar totalmente a função Baixa_Prescr()
Caso seja clicado no X, o aplicativo também fecha sem passar pela função Sai_Sim_Nao(). :% :% :%

Onde está o meu erro ?
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

Desabilitar e habilitar teclas

Mensagem por Hasse »

Não havia visto a tua mensagem anterior que foi postada enquanto eu estava desenvolvendo a minha mensagem. Vou estudá-la.
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
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Desabilitar e habilitar teclas

Mensagem por Pablo César »

Hasse escreveu:Mas..... ainda não funciona corretamente. Basta pressionar ALT+F12 e o aplicativo encerra sem apresentar a pergunta e sem finalizar totalmente a função Baixa_Prescr()
Caso seja clicado no X, o aplicativo também fecha sem passar pela função Sai_Sim_Nao().

Onde está o meu erro ?
O seu erro crítico está em:

Linha 06 -> ON INTERACTIVECLOSE Form_0.Release ; Sai_Sim_Nao( l_First )

O certo é incluir o Form_0.Release dentro da função Sai_Sim_Nao onde a condição satisfaça à saída. Porque do jeito que está, ele vai executar o release dor form apenas. O ponto e vírgula é não faria efeito algum por ter saído antes. O certo é virgula (função1,função2).
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
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

Desabilitar e habilitar teclas

Mensagem por Hasse »

Boa noite Pablo.

Realmente este teu exemplo funciona perfeitamente. Só preciso fazer alguma pequenas adaptações.

Item 01:
Os comandos / funções (sei lá como se denominam estas linhas....) abaixo só funcionam dentro de DEFINE WINDOW ?

Código: Selecionar todos

   ON KEY ALT+F4  OF BPrescr ACTION { || nada_faz() }
   ON KEY ALT+F12 OF BPrescr ACTION { || nada_faz() }
   ON KEY RETURN  OF BPrescr ACTION { || nada_faz() }
========================================

Item 02:
Como eu posso fazer com que o Window criado dentro da Função Baixa_Prescr() não seja visível. Por falta de espaço na tela preciso usar as seguintes coordenadas:

Código: Selecionar todos

 DEFINE WINDOW Form_1 ;
   AT 000, 750 ;
   WIDTH 600 HEIGHT 80 ;
   TITLE 'Processamento - Desabilitar Teclas' ;
   MAIN
Desta forma usarei labels para informar o andamento do processamento, com estas 4 informações abaixo:
1)-"Baixando prescrição:" + NOME;
2)-"Aguardando novo período";
3)-"Tempo previsto para nova leitura 04:32 min:seg";
4)-"<Alt+F12> Encerra --------------------------- <ENTER> Nova Leitura".

Ele deve funcionar totalmente no automático. Sem intervenção do operador, excetuando-se as 2 teclas.

Para que não seja necessário o uso de Botões, decidimos somente disponibilizar o uso das teclas <ENTER> e <Alt+F12> para controlar o aplicativo.
E está muito prático, pois já estamos usando faz mais de 60 dias.
Esta trabalheira toda é só para controlar / desabilitar estas teclas durante a baixa das prescrições, que tem indicado que os operadores, estando desatentos, encerram o aplicativo em momentos inadequados.

========================================

Item 03:
Por vezes o outro aplicativo, em xHarbour, modo CONSOLE, trava até que o aplicativo Baixa_Prescr saia do modo leitura das prescrições. Interessante é que isto só acontece às vezes.
Qual o motivo deste comportamento ?
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

Desabilitar e habilitar teclas

Mensagem por Hasse »

O certo é incluir o Form_0.Release dentro da função Sai_Sim_Nao onde a condição satisfaça à saída. Porque do jeito que está, ele vai executar o release dor form apenas. O ponto e vírgula é não faria efeito algum por ter saído antes. O certo é virgula (função1,função2).
Caramba !!! quantos pequenos detalhes..... mas faz até muito sentido.... evidente que isto tudo acrescenta recursos. Mas aprender tudo isso não é fácil.
Quer dizer, ponto-e-vírgula aciona as funções sequencialmente, e só vírgula e entre parênteses as 2 funções são acionadas simultaneamente ?

E se nesta linha fosse invertido, qual seria o funcionamento ?

Código: Selecionar todos

Linha 06 -> ON INTERACTIVECLOSE Sai_Sim_Nao( l_First ) ; Form_0.Release
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
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Desabilitar e habilitar teclas

Mensagem por Pablo César »

Oi Hasse,
Hasse escreveu:Realmente este teu exemplo funciona perfeitamente. Só preciso fazer alguma pequenas adaptações.
Pensei que você tinha olhado com atenção. Fiz pra dar uma ideia, as adaptações são váilidas.
Hasse escreveu:Item 01:
Os comandos / funções (sei lá como se denominam estas linhas....) abaixo só funcionam dentro de DEFINE WINDOW ?
O ON KEY é uma comando que está definido em C:\hmg.3.3.1\INCLUDE\i_altsyntax.ch que é atribuído uma função(es) mediante code block ( {|| ...} ). Sim só funcionam dentro de cada DEFINE WINDOW, porque servem apenas para cada FORM no HMG. Já no MInigui Extended, você consegue configurar para todos os FORMs através do SET GLOBAL HOTKEYS ON. Mas acredito que se invocar uma função genérica para controlar eventos, dá pra fazer em HMG também. Se bem que nada custa repetir as configurações ON KEY em todos os forms que sejam necessários. Acho que eu optaria por não fazer algo GLOBAL por se tratar de custo/benefício.
Hasse escreveu:Item 02:
Como eu posso fazer com que o Window criado dentro da Função Baixa_Prescr() não seja visível. Por falta de espaço na tela preciso usar as seguintes coordenadas:
Desculpe, não entendi direito. Primeiro você pergunta que não seja visível e depois mostra o tamanho do Form_1. Para não apresentar tela alguma, basta não criar o DEFINE WINDOW e fazer apenas as rotinas do processamento sem exibir tela alguma. Ou se você precisa exibir e depois ocultar, bastaria utilizar o <Form_Name>.Hide/<Form_Name>.Show
Hasse escreveu:Desta forma usarei labels para informar o andamento do processamento, com estas 4 informações abaixo:
1)-"Baixando prescrição:" + NOME;
2)-"Aguardando novo período";
3)-"Tempo previsto para nova leitura 04:32 min:seg";
4)-"<Alt+F12> Encerra --------------------------- <ENTER> Nova Leitura".
Sim, você pode fazer. Legal. Lembre que você pode criar uns labels no form que antecede a função Baixa_Prescr, esconder os labels (com Hide/Show ou Visible .F./.T.) e depois atribuir os valores com o SetProperty.
Hasse escreveu:Item 03:
Por vezes o outro aplicativo, em xHarbour, modo CONSOLE, trava até que o aplicativo Baixa_Prescr saia do modo leitura das prescrições. Interessante é que isto só acontece às vezes.
Qual o motivo deste comportamento ?
Não sei dizer. Não trabalho com xHarbour e sem analisar o código, não tem como saber.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Responder