Criação de componente
Olá amigos
Estou criando um novo botão descendente do TButton. Mas quero fazer com que, ao darem duplo clique no botão, ao invéz de chamar o evento OnClick do botão chame um evento que eu criei, por exemplo MeuOnClick. Alguém sabe como o Delphi faz para saber qual evendo tem que chamar?
Grato,
Rodrigo Cesar
Estou criando um novo botão descendente do TButton. Mas quero fazer com que, ao darem duplo clique no botão, ao invéz de chamar o evento OnClick do botão chame um evento que eu criei, por exemplo MeuOnClick. Alguém sabe como o Delphi faz para saber qual evendo tem que chamar?
Grato,
Rodrigo Cesar
Rodc
Curtidas 0
Respostas
Stratofabius
01/07/2005
Faz o seguinte
Declara o Metodo OnDblClick com o inherited dentro da procedure
Exemplo :
[color=blue:f3f02aead5]procedure[/color:f3f02aead5] TMyButton.OnDblClick(Sender: TObject);
[color=blue:f3f02aead5]Begin[/color:f3f02aead5]
inherited OnDblClick(Sender);
ExecutarMinhaProcedure;
...
...
[color=blue:f3f02aead5]End[/color:f3f02aead5];
[color=blue:f3f02aead5]procedure[/color:f3f02aead5] TMyButton.ExecutarMinhaProcedure;
[color=blue:f3f02aead5]Begin[/color:f3f02aead5]
Showmessage(´Blablabla´);
...
..
[color=blue:f3f02aead5]End[/color:f3f02aead5];
Não lembro direito mas deve ser mais ou menos isso!!!
Abraço
Declara o Metodo OnDblClick com o inherited dentro da procedure
Exemplo :
[color=blue:f3f02aead5]procedure[/color:f3f02aead5] TMyButton.OnDblClick(Sender: TObject);
[color=blue:f3f02aead5]Begin[/color:f3f02aead5]
inherited OnDblClick(Sender);
ExecutarMinhaProcedure;
...
...
[color=blue:f3f02aead5]End[/color:f3f02aead5];
[color=blue:f3f02aead5]procedure[/color:f3f02aead5] TMyButton.ExecutarMinhaProcedure;
[color=blue:f3f02aead5]Begin[/color:f3f02aead5]
Showmessage(´Blablabla´);
...
..
[color=blue:f3f02aead5]End[/color:f3f02aead5];
Não lembro direito mas deve ser mais ou menos isso!!!
Abraço
GOSTEI 0
Beppe
01/07/2005
Oi!
O método que vc deve dar override é DblClick. OnDblClick é evento e não se pode dar override neles.
Outra, vc só chamará ´inherited ...;´ se quiser tbm o comportamento antigo. Vc disse que quer substituir, então deixa inherited de fora.
O método que vc deve dar override é DblClick. OnDblClick é evento e não se pode dar override neles.
Outra, vc só chamará ´inherited ...;´ se quiser tbm o comportamento antigo. Vc disse que quer substituir, então deixa inherited de fora.
protected procedure DblClick; override; ... procedure TMyButton.DblClick; begin // end;
GOSTEI 0
Bruno Belchior
01/07/2005
só pra complementar o que o amigo beep discreveu, se vc [b:e25894e1c3]não[/b:e25894e1c3] quiser herdar o que já foi implementado anteriormente em vez de dar um [b:e25894e1c3]override[/b:e25894e1c3] é melhor ´reintroduzir´ o método ou seja usar a diretiva [b:e25894e1c3]reintroduce[/b:e25894e1c3]...... mas cuidado, essa técnica tem um efeito colateral... se seu método é usado em outra parte da classe ele não chamará o método herdado e sim o novo método... ou seja se vc espera que ele se comporte em algum lugar do código como o método herdado não funcionará a não ser que vc o chame explicitamente usando o [b:e25894e1c3]inherited[/b:e25894e1c3]...
procedure herdada; reintroduce;
GOSTEI 0
Michael
01/07/2005
Mas quero fazer com que, ao [b:83253f0e47]darem duplo clique[/b:83253f0e47] no botão, ao invéz de chamar o evento [b:83253f0e47]OnClick [/b:83253f0e47]do botão chame um evento que eu criei, por exemplo MeuOnClick. Alguém sabe como o Delphi faz para saber qual evendo tem que chamar?
Se vc se referiu ao comportamento do IDE do Delphi que gera o código para o evento OnClick ao se dar um duplo clique sobre o botão, então para mudar isso vc deve usar um editor de componente ou então fazer com que seu evento seja o primeiro a ser listado no Object Inspector.
[]´s
GOSTEI 0
Beppe
01/07/2005
... mas cuidado, essa técnica tem um efeito colateral... se seu método é usado em outra parte da classe ele não chamará o método herdado e sim o novo método...
Outro detalhe causa bem mais dor de cabeça, com reintroduce:
type TClasseA = class public procedure MetodoA; virtual; end; TClasseB = class(TClasseA) public procedure MetodoA; reintroduce; end; ... TClasseA(ObjetoDaClasseB).MetodoA; ...
O método chamado será sempre o da TClasseA. O reintroduce faz com que o Delphi crie um ´entidade´ para cada método, que apenas acontece de terem o mesmo nome.
GOSTEI 0
Rodc
01/07/2005
Se vc se referiu ao comportamento do IDE do Delphi que gera o código para o evento OnClick ao se dar um duplo clique sobre o botão, então para mudar isso vc deve usar um editor de componente ou então fazer com que seu evento seja o primeiro a ser listado no Object Inspector.
Ola Michael, vc entendeu perfeitamente o que quero fazer. Quero que no desenvolvimento a IDE do Delphi implemente automaticamente o meu evento quando o usuário dar duplo clique no componente. Mas ele chama sempre o evento OnClick.
Eu já tentei deixar o meu evento como o primeiro da lista, mas não adianta... é como o OnCreate que é chamado sempre que dou um duplo clique no form. O OnCreate não é o primeiro da lista de eventos...
Já procurei nos códigos do componente até chegar na classe mais baixa e não encontrei algo que possa estar relacionado...
Alguém tem uma idéia de como fazer isto?
Grato,
Rodrigo Cesar
GOSTEI 0
Cabelo
01/07/2005
Como você herdou os eventos do TButton, você pode alterar o evento OnClick, hamando a procedure do Duplo clique..
GOSTEI 0