Fórum Criação de componente #286639

01/07/2005

0

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


Rodc

Rodc

Responder

Posts

01/07/2005

Stratofabius

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


Responder

Gostei + 0

02/07/2005

Beppe

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.

protected
  procedure DblClick; override;
...

procedure TMyButton.DblClick;
begin
//
end;



Responder

Gostei + 0

02/07/2005

Bruno Belchior

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]...
procedure herdada; reintroduce;
... 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]...


Responder

Gostei + 0

02/07/2005

Michael

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


Responder

Gostei + 0

03/07/2005

Beppe

... 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.


Responder

Gostei + 0

04/07/2005

Rodc

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


Responder

Gostei + 0

04/07/2005

Cabelo

Como você herdou os eventos do TButton, você pode alterar o evento OnClick, hamando a procedure do Duplo clique..


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar