Um evento é uma forma que um componente tem de notificar o formulário de algum acontecimento. Se você clica com o mouse em um botão, por exemplo, ele deve notificar o formulário desse clique, para que o código do formulário possa fazer alguma coisa em resposta.
Quando o componente aciona um evento,
ele executa um procedimento de evento, um procedimento que faz parte da classe
de formulário. Quando você cria um procedimento na página de eventos, você está
associando um evento de um componente com um procedimento de evento do formulário.
Eliminando um Procedimento de Evento
Se você quiser eliminar um procedimento de evento, não apague o corpo dele no
código.
Apague apenas os comandos
entre o begin e o end, e declarações de variáveis (var), se houver.
Quando você compila o
programa, ou quando salva o projeto, o Delphi nota que o procedimento está vazio,
e o remove automaticamente do programa.
Nomes de procedimentos
O nome de um procedimento de evento é usado para declarar esse procedimento
na classe do formulário. Pode ser qualquer nome, desde que siga as regras de
identificadores em Delphi.
Quando você cria um procedimento
de evento, clicando duas vezes no componente ou em um evento qualquer, o Delphi
atribui um nome padrão, da forma NomeComponenteNomeEvento. Se você tem um botão
chamado btnFechar no formulário, e clicar duas vezes, o Delphi cria um procedimento
chamado 'btnFecharClick' (note que o On é omitido):
procedure TForm1.btnFecharClick(Sender:TObject)'
begin end;
Para mudar o nome do procedimento, clique na página de eventos do Object Inspector,
no evento desejado e digite o novo nome. Mas você não deve mudar o nome diretamente
no texto da unidade. Se fizer isso, o Delphi não conseguirá localizar mais o
procedimento e mostrará várias mensagens de erro. O nome é declarado em vários
lugares: na declaração da classe de formulário, na página de eventos e na unidade.
Se você alterar em um dos lugares, tem que alterar todos.
Associando um Procedimento Existente
Se depois de criar um procedimento, você criar um novo componente que vai
fazer a mesma coisa, você pode ligá-lo a um procedimento já existente.
Por exemplo, um botão e um item de menu que estejam associados à mesma ação.
Para fazer isso, selecione o componente que você quer associar, clique no evento
e no botão de seta . Aparece na lista os nomes dos procedimentos compatíveis
com aquele evento. Um procedimento é compatível se ele tem exatamente o mesmo
número de parâmetros e o mesmo tipo de dados e passagem para cada parâmetro
correspondente.
Para desvincular um procedimento do componente, clique no nome do evento e tecle
[Delete]. O componente não vai mais chamar aquele procedimento.
Identificando qual controle acionou o evento
No Delphi você pode associar um mesmo procedimento de evento com dois ou
mais componentes. Se você selecionar vários componentes e criar um procedimento
de evento, ele estará associado dessa forma.
O problema é saber qual
dos componentes acionou o evento. O Delphi fornece essa informação para o procedimento
através do parâmetro 'Sender'. Essa variável é uma referência ao componente
que acionou o evento, como se fosse um nome diferente para o componente dentro
do procedimento, e através dele podemos acessar as propriedades e métodos do
componente.
'Sender' é declarado
como 'TObject', o que quer dizer que ele é um objeto genérico do Delphi, que
pode ser um componente qualquer. Se você quiser acessar uma propriedade específica
de um componente, por exemplo, Color, precisa dizer ao Delphi que temos certeza
que 'Sender' é um componente Edit. Por exemplo:
(Sender as TEdit).Color := clYellow;
A expressão Sender as
TEdit força o Delphi a tratar 'Sender' como um objeto da classe TEdit, ou seja,
um componente Edit. Usando essa expressão, podemos acessar propriedades do componente.
Outra sintaxe poderia ser usada: with Sender
as TEdit do Color := clYellow;
Associando um Procedimento em Tempo de Execução
A associação entre procedimentos e eventos pode ser feita também durante
a execução do programa. Para isso, basta usar o nome do evento como uma propriedade
e atribuir um valor que é o nome do procedimento de evento. Por exemplo, para
associar o evento OnEnter com o procedimento "EditRecebeuFoco", basta usar o
seguinte comando: editOperando1.OnEnter := EditRecebeuFoco;
Tratando Eventos com Componentes Dinâmicos
Um componente criado dinamicamente não tem nenhum tratamento de eventos
definido, mas como eventos podem ser alterados como propriedades,
você pode criar um procedimento de evento manualmente e durante a execução,
associar esse procedimento ao componente.
Para isso abra o projeto CRIACOMPP, caso ele não esteja aberto.
Dentro da definição da
classe do formulário, na parte private (ou public, não importa no caso), acrescente
uma declaração de método: procedure TrataClick(Sender:TObject);
Agora, na seção de implementação,
crie o corpo do método 'TrataClick', da seguinte forma:
procedure TFormCriaComp.TrataClick(Sender:TObject);
begin ShowMessage('Você clicou no
botão '+ (Sender as TButton).Caption); end;
Esse método assume que
'Sender' é um componente da classe TButton, e mostra uma mensagem com a propriedade
Caption do Sender.
A cada vez que criarmos
um componente, vamos associar esse método ao evento OnClick do componente. Para
isso, volte ao procedimento 'FormMouseDown' e acrescente a linha abaixo depois
de Visible := True:
OnClick := TrataClick;
Quando você usa o nome
do evento como uma propriedade, o valor atribuído deve ser o nome de um método
do formulário. Agora, quando você clicar em um dos botões criados, o procedimento
'TrataClick' será executado e vai mostrar o Caption desse botão numa mensagem.
Nota: a variável OnClick é do tipo procedure, um tipo de dados que permite
fazer referência a procedimentos. Veremos isso em detalhe posteriormente.
Autor : Celso Rodrigues
Contato
: celso@finta.com.br
|