Desabilitar Temporariamente a execução de um Evento
Bom Dia Senhores.
Tenho Um a procedure na secção Private do meu Formulário. Esta procedure e ativada pelas Mensagems Enviadas da Api Do Windows
Sabemos que para desabilitar Um evento , Muitas das Vezes Atribuimos [b:892eea5453]Nil [/b:892eea5453]ao seu manipulador
Exemplo :
E Como Fazer Para Desabilitar estas Chamadas Que Vem , Digamos assim, da Api Do Windows :?: :?: :?: :?: :?: :?: :?:
Obrigado
Tenho Um a procedure na secção Private do meu Formulário. Esta procedure e ativada pelas Mensagems Enviadas da Api Do Windows
procedure WMTimeChange(var Message: TMessage); message WM_TIMECHANGE;
Sabemos que para desabilitar Um evento , Muitas das Vezes Atribuimos [b:892eea5453]Nil [/b:892eea5453]ao seu manipulador
Exemplo :
Form1.Edit1Change:=Nil
E Como Fazer Para Desabilitar estas Chamadas Que Vem , Digamos assim, da Api Do Windows :?: :?: :?: :?: :?: :?: :?:
Obrigado
Marco Salles
Curtidas 0
Respostas
Nildo
22/03/2005
Coloca um IF dentro da WMTimeChange
Dai é só você alterar o valor de [b:db5b9ea197]WmTimeChange_Habilitado[/b:db5b9ea197] que será global.
if WmTimeChange_Habilitado then // Faz tudo aqui
Dai é só você alterar o valor de [b:db5b9ea197]WmTimeChange_Habilitado[/b:db5b9ea197] que será global.
GOSTEI 0
Marco Salles
22/03/2005
Beleza Nildo.. De fato , ja tinha pensado nisso... Mas será que é sua palavra final no assunto.. Isto é : Não tem código , via delphi , que desabilite a Chamada a Esta Procedure :lol: :lol: :lol: :lol: :lol:
E que estou trabalhando com[b:9e0268e024] tempo[/b:9e0268e024], e eu gostaria se possível , diga-se de passagem, que a Chamada a Procedure Nen Ocorresse em Determinadas Condições :lol: :lol: :lol: :lol:
Mas de qualquer forma é muita válida a sua participação :P :P :P :P :P
E que estou trabalhando com[b:9e0268e024] tempo[/b:9e0268e024], e eu gostaria se possível , diga-se de passagem, que a Chamada a Procedure Nen Ocorresse em Determinadas Condições :lol: :lol: :lol: :lol:
Mas de qualquer forma é muita válida a sua participação :P :P :P :P :P
GOSTEI 0
Nildo
22/03/2005
Deve até ter como fazer, mas eu não me lembro :oops:
GOSTEI 0
Marco Salles
22/03/2005
Mas se voce se lembrar estamos ai :D :D :D :D :D :D
GOSTEI 0
Kapak
22/03/2005
Deve até ter como fazer, mas eu não me lembro
Acredito que nem por funções hook vc desabilita WM_TimeChange.Quando chega essa msg, é pq a data/hora já foi alterada; ou seja; já era.
GOSTEI 0
Nildo
22/03/2005
[quote:e8f2aafc8e]Deve até ter como fazer, mas eu não me lembro
Acredito que nem por funções hook vc desabilita WM_TimeChange.Quando chega essa msg, é pq a data/hora já foi alterada; ou seja; já era.[/quote:e8f2aafc8e]
Ele nao quer desabilitar Wm_TimeChange, ele quer apenas ´deshookar´ esse controle do processo dele para nao receber mais notificações
GOSTEI 0
Kapak
22/03/2005
Olá Nildo, pelo outro tópico que estávamos debatendo, o problema dele é de não deixar o usuário alterar a hora; então acredito que ele deve estar pensando que se for bloqueada essa msg, a hora não será alterada. Posso estar enganado, mas se for isso não vai adiantar pq vc pode instalar uma hook do tipo wh_callwndproc e não deixar que o Windows passe essa msg p/ os destinatários, mas o problema é que quando chega essa msg, a data/hora já foi modificada.
GOSTEI 0
Nildo
22/03/2005
Kapak, ele só quer receber a notificação em determinado momento. Passado esse momento, ele não quer mais receber as notificações para não tomar muito processamento. Mas as mensagens vão continuar sendo processadas para os outros processos normalmente
GOSTEI 0
Kapak
22/03/2005
Então eu não entendí, pq essa notificação não toma muito processamento pq ela só chega quando a data/hora é alterada por intervenção externa. O relógio interno não envia essa msg.
GOSTEI 0
Nildo
22/03/2005
Então eu não entendí, pq essa notificação não toma muito processamento pq ela só chega quando a data/hora é alterada por intervenção externa. O relógio interno não envia essa msg.
Por isso eu instruí a usar uma variável de controle :P
GOSTEI 0
Kapak
22/03/2005
Ah sim, acho que ele executa SetLocalTime dentro da procedure da msg e com isto wm_timechange é gerado e ficaria num loop infinito.
GOSTEI 0
Nildo
22/03/2005
Provavelmente
GOSTEI 0
Marco Salles
22/03/2005
Ah sim, acho que ele executa SetLocalTime dentro da procedure da msg e com isto wm_timechange é gerado e ficaria num loop infinito.
Provavelmente
é mais ou menos por aí...
Preciso desabilitar esta Chamada :oops: :oops: :oops: :oops: :oops:
GOSTEI 0
Nildo
22/03/2005
Usa uma variável de controle, é mais facil hehe
GOSTEI 0
Marco Salles
22/03/2005
Usa uma variável de controle, é mais facil hehe
Ja que não tem Jeito e ningume se arrisca :cry: :cry: :cry: Fazer o que ne :?: :?: :?:
GOSTEI 0
Marco Salles
22/03/2005
Mas a Esperança é a última que morre :lol: :lol: :lol: :lol:
GOSTEI 0
Beppe
22/03/2005
[quote:35cfe5235f=´Marco Salles´]
Ja que não tem Jeito e ningume se arrisca :cry: :cry: :cry: Fazer o que ne :?: :?: :?:[/quote:35cfe5235f]
Plano e simples? Não...
Métodos marcados com [b:35cfe5235f]message[/b:35cfe5235f] são marcados são implementados como dynamic. Cada método destes possui um índice de 16 bits que endereça em uma tabela que contém os métodos propriamente ditos. Esta classe é compartilhada por todas instâncias da classe. Em princípio, é possível replicar o template da classe e modificá-la para uma instânmcia apenas, mas isto poderia ter algumas complicações quanto a otimizações feitas pelo compilador. Uma modificação in-place habilitaria/desabilitaria de forma global, e teria que ser mexida em uma área somente-leitura. O Win2000 e o XP se preocupam com isso, o 98 não tenho certeza. Para tornar a área leitura-escrita, basta chamar VirtualProtect da API do Windows, mas não estou certo se em alguma configuração da máquina isto poderia ser barrado. Numa instalação dométisca daria certo sim.
Desabilitar na verdade é impossível, você substituiria por uma chamada a um método [i:35cfe5235f]dummy[/i:35cfe5235f]. Mas seria mais trabalho do que usar a alternativa proposta pelo nildo.
Usa uma variável de controle, é mais facil hehe
Ja que não tem Jeito e ningume se arrisca :cry: :cry: :cry: Fazer o que ne :?: :?: :?:[/quote:35cfe5235f]
Plano e simples? Não...
Métodos marcados com [b:35cfe5235f]message[/b:35cfe5235f] são marcados são implementados como dynamic. Cada método destes possui um índice de 16 bits que endereça em uma tabela que contém os métodos propriamente ditos. Esta classe é compartilhada por todas instâncias da classe. Em princípio, é possível replicar o template da classe e modificá-la para uma instânmcia apenas, mas isto poderia ter algumas complicações quanto a otimizações feitas pelo compilador. Uma modificação in-place habilitaria/desabilitaria de forma global, e teria que ser mexida em uma área somente-leitura. O Win2000 e o XP se preocupam com isso, o 98 não tenho certeza. Para tornar a área leitura-escrita, basta chamar VirtualProtect da API do Windows, mas não estou certo se em alguma configuração da máquina isto poderia ser barrado. Numa instalação dométisca daria certo sim.
Desabilitar na verdade é impossível, você substituiria por uma chamada a um método [i:35cfe5235f]dummy[/i:35cfe5235f]. Mas seria mais trabalho do que usar a alternativa proposta pelo nildo.
GOSTEI 0