Fórum Ajuda com TNotifyEvent, por favor #533167
30/09/2015
0
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:
E dentro de FrFiltroLanF eu tenho um frame TFrSelecionaRegistrosF:
Eu atribuo os métodos no Create do form:
e a implementação do método AoSelecionar:
A chamada ao Método evento está aqui:
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:
Mesmo resultado.
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
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)