Ajuda com TNotifyEvent, por favor

Delphi

30/09/2015

Em um formulário eu tenho um espaço para exibir o preview de um relatório e no topo do form, tenho um frame com campos para filtro dos dados. A função AplicaFiltro está no form, mas eu preciso chamá-la de dentro do frame, então criei decidi que é hora de usar TNotifyEvent, visto que eu ainda não aprendi a trabalhar com esta classe e isto me faz muita falta. A necessidade também é a oportunidade.

Tenho então o form:
type 
  TFrRelLancamentosF = class(TFrRelModeloF) 
    FrFiltroLanF: TFrFiltroLanF; 
    //(...) 
  private 
    { Private declarations } 
    //(...) 
    procedure AplicarFiltro; override; 
    procedure AoSelecionar(Sender: TObject); 
  end; 


E dentro de FrFiltroLanF eu tenho um frame TFrSelecionaRegistrosF:
type 
  TFrSelecionaRegistrosF = class(TFrMultiLayoutControlF) 
    FrLst_Cad: TFrDBGridF; 
    FrLst_Sel: TFrDBGridF; 
  public 
    { Public declarations } 
    procedure Selecionar; 
    procedure Remover; 
    var 
      AoRemover_1, 
      AoSelecionar_1: TNotifyEvent; 
  end; 



Eu atribuo os métodos no Create do form:
procedure TFrRelLancamentosF.FormCreate(Sender: TObject); 
begin 
  inherited; 
  with FrFiltroLanF do 
  begin 
    FrSelecionaRegistrosF_Cliente.AoRemover_1 := AoSelecionar; 
    FrSelecionaRegistrosF_Cliente.AoRemover_1 := AoSelecionar; 
  end; 
end; 


e a implementação do método AoSelecionar:
procedure TFrRelLancamentosF.AoSelecionar(Sender: TObject); 
begin 
  AplicarFiltro; 
end; 



A chamada ao Método evento está aqui:
procedure TFrSelecionaRegistrosF.Selecionar; 
begin 
  if cds_Cadastro.RecordCount > 0 then 
  begin 
    CopiaRegistro(cds_Cadastro, cds_Selecionados, 
                  cds_Selecionados.Locate(NomeCampo_ChavePrimaria, cds_Cadastro.FieldByName(NomeCampo_ChavePrimaria).AsInteger, []), 
                  True); 
    if Assigned(AoSelecionar_1) //Retorna False 
    then AoSelecionar_1(Self); //e por isto esta linha não é executada 
  end; 


Então, ao verificar se o método está assinado, False é retornado, mesmo no Create do form o método AoSelecionar ter sido atribuído aos TNotifyEvent.
Alguém sabe trabalhar com TNotifyEvents pode ajudar, por gentiliza?


Ahh, Note que os TNotifyEvent estão declarados como variáveis públicas.
Modifiquei a declaração delas para se tornarem propriedades:
property AoRemover_1: TNotifyEvent read FAoRemover_1 write FAoRemover_1; 
    property AoSelecionar_1: TNotifyEvent read FAoSelecionar_1 write FAoSelecionar_1; 


Mesmo resultado.
Multi Ltda

Multi Ltda

Curtidas 0
POSTAR