sexta-feira, 12 de março de 2010

ProcessMessages

ProcessMessages é uma função que solicita ao Windows que todas as mensagens pendentes sejam executadas antes que qualquer outra coisa seja feita.
Exemplo:

@ 000,000 Button "Processar" Size 40,10 Action (CursorWait(), Processo(), CursorArrow())

A intenção é de mudar o ícone do cursor para o ícone de espera antes que um processo longo seja executado, informando ao usuário que espere. Ao fim da execução retornamos o ícone do cursor ao normal.

Neste caso se o "Processo()" for muito pesado, pode ser que ele "domine" o processador antes que "CursorWait()" seja executado. Desse modo, o processo é executado sem que a solicitação de mudança do cursor seja processada. Ao fim da execução, a solicitação de mudança do cursor é feita, e imediatamente após, "CursorArrow()" é executado, dando a impressão de que o ícone do cursor nunca tenha mudado.
Para solucionar esse problema, pedimos ao Windows que todas as mensagens sejam executadas antes que "Processo()" seja executado:

@ 000,000 Button "Processar" Size 40,10 Action (CursorWait(), ProcessMessages(), Processo(), CursorArrow())

Desse modo asseguramos a mudança do ícone do cursor para o ícone de espera antes que seja executado o "Processo()", garantindo o efeito desejado.

Nenhum comentário: