Access 2003 VBA Form_Timer não disparando durante o arrastar do mouse

2

Eu quero pegar um evento Form_Timer de 500ms repetido enquanto arrasta o mouse. isto é, entre eventos de mouse para baixo e de mouse para cima. O evento Timer está disparando fora do arrasto, mas não dentro.

O motivo do evento Timer é que o programa faz um processamento significativo durante o arrasto e geralmente não captura o local mais recente do mouse - depois de capturar o evento do timer, o programa pode pesquisar a posição atual do mouse. [Por exemplo, o usuário pode ter arrastado o mouse rapidamente para uma posição que não é reportada pelo MouseMove e depois segurar o arrasto lá]

Alguém mais teve ou resolveu esse problema?

Eu experimentei isso no Windows XP Pro SP3 e no Windows 7 Starter.

    
por user167471 24.10.2012 / 22:53

1 resposta

1

Isso ocorre porque todos os eventos na GUI são executados em um único "Event Dispatch Thread", e o mouse manipulando eventos de arrastar faz com que o cronômetro seja enfileirado. Os eventos são, na verdade, Mensagens do Windows e os manipuladores de mensagens devem ser chamados de um único encadeamento. O arrastar do mouse mantém o encadeamento de eventos "ocupado", portanto, ele não pode executar nenhum outro procedimento de janela enquanto o arrastamento está ocorrendo. Essa é uma das limitações de design das GUIs originais do Windows, das quais o Access 2003 é um desses programas que a utiliza.

O tratamento de entrada e o modelo de segmentação foram aprimorados em versões mais recentes do Windows e com diferentes estruturas, como a usada no Office 2010. Não tenho certeza se isso resolve o problema, mas pode ajudar a tentar uma nova versão do Office. / p>

Outra coisa que você pode tentar é executar um loop ocupado que chama DoEvents de vez em quando para processar as mensagens da janela, e apenas usar pausas para interromper as 500 ms em vez de fazer com que o sistema chame seu evento a cada 500 ms.

    
por 24.10.2012 / 23:01