Componentes - Criação de Evento
Olá pessoal,
Estou com um problemão na criação de um evento, preciso fazer o seguinte:
Fazer com que ao chamar esse evento ele possa receber um parâmetro por exemplo MeuComponenteValidar(nome);
Sendo q no evento validar existe a codificação pra tratar esse parâmetro passado: algo tipow:
Fiz o seguinte criei uma variavel pValidar: TNotifyEvent na seção private do componente, daí na sessão published fiz a propriedade referente property Validar:TNotifyEvent read FValidar write SetValidar; dai fiz o a procedure SetValidar.
Só q não sei como faço pra passar esse parâmetro, gostaria q vcs me ajudassem to mandando todo meu código:
Agradeço a ajuda...
Estou com um problemão na criação de um evento, preciso fazer o seguinte:
Fazer com que ao chamar esse evento ele possa receber um parâmetro por exemplo MeuComponenteValidar(nome);
Sendo q no evento validar existe a codificação pra tratar esse parâmetro passado: algo tipow:
procedure Form1.MeuComponenteValidar(Sender: TObject; pCampo: TComponent) begin if VarIsEmpty(pCampo.Text) then ShowMessage(´O nome precisa ser informado´); end;
Fiz o seguinte criei uma variavel pValidar: TNotifyEvent na seção private do componente, daí na sessão published fiz a propriedade referente property Validar:TNotifyEvent read FValidar write SetValidar; dai fiz o a procedure SetValidar.
Só q não sei como faço pra passar esse parâmetro, gostaria q vcs me ajudassem to mandando todo meu código:
unit UFormControl;
interface
uses
SysUtils, Classes, DBClient, DB, Forms;
type
TFormControl = class(TComponent)
private
{ Private declarations }
FValidar: TNotifyEvent;
procedure SetValidar(const Value: TNotifyEvent);
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
property Validar:TNotifyEvent read FValidar write SetValidar;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents(´componentes´, [TFormControl]);
end;
{ TFormControl }
procedure TFormControl.SetValidar(const Value: TNotifyEvent);
begin
FValidar := Value;
end;
end.
Agradeço a ajuda...
Gardel
Curtidas 0
Respostas
Bruno Belchior
01/02/2006
Você pode criar um novo tipo de evento...E então poderia criar a propriedade com esse tipo de eventoDepois crie um procedimento [b:606dd3a5ad]DoMeuEvento[/b:606dd3a5ad] para chamá-lo (lembrando que esse procedimento deve ser virtual, não é necessário, mas é um bom costume de programação)
type TMeuEvento = procedure (Sender: TObject; pString: string) of object;
property MeuEvento: TMeuEvento read FMeuEvento write FMeuEvento;
procedure DoMeuEvento(Sender: TObject; pString: string); virtual;
GOSTEI 0
Gardel
01/02/2006
Olá amigo,
Não consegui entender direito como vc fez:
1º Qdo cria um novo evento a partir da procedure essa procedure fica sem nome? tipow procedure algo (Sender: TObject; pString: string) of object;
2º Essa procedure, como seria essa chamada q vc falou? essa procedure é a implementação da q vc declarou no type?
Me perdoe se são perguntas meio principiantes, é q nunca tinha criado componentes antes, to em fase de aprendizado.
Obrigado.
Não consegui entender direito como vc fez:
1º Qdo cria um novo evento a partir da procedure essa procedure fica sem nome? tipow procedure algo (Sender: TObject; pString: string) of object;
type TMeuEvento = procedure (Sender: TObject; pString: string) of object;
2º Essa procedure, como seria essa chamada q vc falou? essa procedure é a implementação da q vc declarou no type?
procedure DoMeuEvento(Sender: TObject; pString: string); virtual;
Me perdoe se são perguntas meio principiantes, é q nunca tinha criado componentes antes, to em fase de aprendizado.
Obrigado.
GOSTEI 0
Bruno Belchior
01/02/2006
O [b:96d53c164d]TMeuEvento[/b:96d53c164d] é um exemplo de como criar um tipo de ponteiro de procedimento, se você der um Ctrl+Clique no TNotifyEvent vai ver que o mesmo também já foi previamente criado, só que com apenas um parâmetro... sendo assim ele não é uma declaração de procedimento, mas sim de um ponteiro para um procedimento, lembrando que enventos não são mais do que simples propriedades, visto que aparecem listadas inclusive no teu arquivo .dfm, quando ao procedimento [b:96d53c164d]DoMeuEvento[/b:96d53c164d], você irá chamá-lo na parte do código onde gostaria que o evento fosse executado, não é necessário criá-lo, porém você pode deixá-lo na seção published até para possíveis reimplementações em suas classes filhas...
GOSTEI 0
Michael
01/02/2006
Olá!
Se vc está começando a estudar componentes, sugiro a leitura destes artigos, de minha autoria:
Parte I
https://www.devmedia.com.br/visualizacomponente.aspx?comp=1115&site=3
Parte II
https://www.devmedia.com.br/visualizacomponente.aspx?comp=1116&site=3
Acho que podem te ajudar. ;-)
[b:3d9677239b]Bruno[/b:3d9677239b], uma pequena correção: os métodos [b:3d9677239b]DoNomeEvento [/b:3d9677239b]devem ficar na seção [b:3d9677239b]protected [/b:3d9677239b]da classe do componente, e não na [b:3d9677239b]published[/b:3d9677239b]. O usuário do controle - outro programador que não seja o desenvolvedor do componente - não deveria ter acesso diretamente a ele. Aliás, na seção [b:3d9677239b]published [/b:3d9677239b]apenas devem constar propriedades que devem ser exibidas no Object Inspector, não métodos e campos.
Sei que vc sabe disse. Creio de tenha pensando em [b:3d9677239b]protected [/b:3d9677239b]e escreveu [b:3d9677239b]published[/b:3d9677239b]. ;-)
[]´s
Se vc está começando a estudar componentes, sugiro a leitura destes artigos, de minha autoria:
Parte I
https://www.devmedia.com.br/visualizacomponente.aspx?comp=1115&site=3
Parte II
https://www.devmedia.com.br/visualizacomponente.aspx?comp=1116&site=3
Acho que podem te ajudar. ;-)
[b:3d9677239b]Bruno[/b:3d9677239b], uma pequena correção: os métodos [b:3d9677239b]DoNomeEvento [/b:3d9677239b]devem ficar na seção [b:3d9677239b]protected [/b:3d9677239b]da classe do componente, e não na [b:3d9677239b]published[/b:3d9677239b]. O usuário do controle - outro programador que não seja o desenvolvedor do componente - não deveria ter acesso diretamente a ele. Aliás, na seção [b:3d9677239b]published [/b:3d9677239b]apenas devem constar propriedades que devem ser exibidas no Object Inspector, não métodos e campos.
Sei que vc sabe disse. Creio de tenha pensando em [b:3d9677239b]protected [/b:3d9677239b]e escreveu [b:3d9677239b]published[/b:3d9677239b]. ;-)
[]´s
GOSTEI 0
Bruno Belchior
01/02/2006
O bom e velho [b:60c768e871]minuto de bobeira[/b:60c768e871]... :oops:
GOSTEI 0