Eventos de controle (COM)
Além de fornecer propriedades e métodos, um controle também fornece interfaces de saída para notificar seu cliente sobre eventos. O cliente deve dar suporte ao tratamento desses eventos. Consulte Eventos em COM e objetos conectáveis para obter mais informações sobre como os objetos conectáveis funcionam.
Um controle pode oferecer suporte a diferentes interfaces de saída para diferentes finalidades. Todas as interfaces de saída são marcadas como interfaces de origem nas informações de tipo do controle, mas apenas uma é marcada como padrão para indicar que é a interface de saída primária.
Um contêiner pode oferecer suporte a uma ou mais das interfaces de saída definidas por um controle. O controle deve estar preparado para lidar com contêineres que fornecem suporte apenas para algumas de suas interfaces de saída.
Os controles oferecem suporte a quatro tipos de eventos:
- Solicitar eventos. Um controle solicita permissão de seu cliente para fazer algo chamando um método na interface de saída, disparando assim um evento de solicitação. O cliente sinaliza o controle por meio de um parâmetro booleano out-no método que o controle chamou. O cliente pode, assim, impedir que o controle execute a ação.
- Antes dos acontecimentos. Um controle notifica seu cliente hat que ele vai fazer algo chamando um método na interface de saída, disparando assim um evento antes. O cliente não tem a oportunidade de impedir a ação, mas pode tomar todas as medidas necessárias dada a ação que está prestes a ocorrer.
- Depois dos acontecimentos. Um controle notifica seu cliente de que acabou de fazer algo chamando um método na interface de saída, disparando assim um evento after. Novamente, o cliente não pode cancelar essa ação, mas pode tomar as medidas necessárias dada a ação que ocorreu.
- Faça eventos. Um controle dispara um evento do para permitir que seu cliente substitua a ação do controle e forneça algumas ações alternativas ou suplementares. Normalmente, o método que um controle chama para um evento do tem vários parâmetros para negociar com o cliente sobre as ações que ocorrerão.
Os dispids a seguir são definidos para eventos padrão que os controles podem suportar: Click, DblClick, KeyDown, KeyPress, KeyUp, MouseMove, MouseUp e Error. Todos esses eventos-padrão têm valores DISPID negativos, indicando seu status padrão.
O método IOleControl::FreezeEvents, quando chamado com TRUE, informa a um controle se o contêiner se incomodará em manipular eventos do controle até que FreezeEvents seja novamente chamado com FALSE. Durante esse tempo, o controle não pode depender do contêiner que realmente manipula quaisquer eventos. Se um evento deve ser manipulado, o controle deve enfileirar o evento para dispará-lo quando FreezeEvents é chamado com FALSE.
Tópicos relacionados