sender?

27/12/2005

unit UDataModule;

interface

uses
  SysUtils, Classes, DB, ADODB;

type
  TDm = class(TDataModule)
  function Conectar() : boolean;
    procedure DataModuleCreate(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Dm: TDm;

implementation

{$R *.dfm}


procedure TDm.DataModuleCreate(Sender: TObject);
begin

end;

end.


na procedure datamodulecreate o que significa o parametro sender???
como aplico isso em outras funcoes e procedures???

[]s


Fernando_cunha

Respostas

27/12/2005

Michael

Olá!

[b:3c2c64b057]Sender [/b:3c2c64b057]aparece em quase todos os eventos na VCL. Ele indica o componente que disparou o evento. Como é do tipo TObject, vc pode fazer um typecast para qualquer outra classe existente. Vc pode ter vários botões, por exemplo, associados ao mesmo evento OnClick, e pelo parâmetro Sender saber qual deles foi clicado.

[]´s


Responder Citar

27/12/2005

Fernando_cunha

amigo,
poderia me dar um exemplo??
[]s


Responder Citar

27/12/2005

Michael

Inicie uma nova aplicação (no Delphi 2005, Delphi for Win32). Coloque três TButton no form, e mude seus Captions para ´Botão 1´, ´Botão 2´ e ´Botão 3´, respectivamente.

Implemente o evento [b:8bfc797193]OnClick [/b:8bfc797193]do primeiro botão, digitando o código a seguir:

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage((Sender as TButton).Caption);
end;


Depois associe aos outros dois botões o mesmo evento [b:8bfc797193]OnClick[/b:8bfc797193], clicando na aba [b:8bfc797193]Events [/b:8bfc797193]do [b:8bfc797193]Object Inspector[/b:8bfc797193] e selecionando na combobox [b:8bfc797193]Button1Click[/b:8bfc797193].

Teste a aplicação e veja que vc tem o mesmo manipulador de evento para os três botões, e ele reage a cada botão individualmente.

Se vc precisar verificar se Sender é um objeto específico, pode usar a propriedade [b:8bfc797193]Tag[/b:8bfc797193], ou então uma comparação direta, tipo:

if Sender = TButton1 then ...


Se vc for atribuir o mesmo manipulador de evento para objetos de tipos diferentes, então vc deve verificar com o operador [b:8bfc797193]is[/b:8bfc797193] antes de usar [b:8bfc797193]Sender[/b:8bfc797193], para poder fazer um typecast válido.

if Sender is TButton then... else if Sender is TEdit then...


[]´s


Responder Citar

27/12/2005

Martins

Inicie uma nova aplicação (no Delphi 2005, Delphi for Win32). Coloque três TButton no form, e mude seus Captions para ´Botão 1´, ´Botão 2´ e ´Botão 3´, respectivamente. Implemente o evento [b:d93df16c5a]OnClick [/b:d93df16c5a]do primeiro botão, digitando o código a seguir:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage((Sender as TButton).Caption);
end;
Depois associe aos outros dois botões o mesmo evento [b:d93df16c5a]OnClick[/b:d93df16c5a], clicando na aba [b:d93df16c5a]Events [/b:d93df16c5a]do [b:d93df16c5a]Object Inspector[/b:d93df16c5a] e selecionando na combobox [b:d93df16c5a]Button1Click[/b:d93df16c5a]. Teste a aplicação e veja que vc tem o mesmo manipulador de evento para os três botões, e ele reage a cada botão individualmente. Se vc precisar verificar se Sender é um objeto específico, pode usar a propriedade [b:d93df16c5a]Tag[/b:d93df16c5a], ou então uma comparação direta, tipo:
if Sender = TButton1 then ...
Se vc for atribuir o mesmo manipulador de evento para objetos de tipos diferentes, então vc deve verificar com o operador [b:d93df16c5a]is[/b:d93df16c5a] antes de usar [b:d93df16c5a]Sender[/b:d93df16c5a], para poder fazer um typecast válido.
if Sender is TButton then... else if Sender is TEdit then...
[]´s


Bom exemplo sobre a utilização de [b:d93df16c5a]Sender[/b:d93df16c5a]. Bem básico, muito bom


Responder Citar