Consultar a lista de eventos que possuem tratadores de eventos anexados

 

No Delphi para Win32, um evento de um objeto deve ser tratado por um método (tratador de evento). Aqui está como consultar a lista de eventos de um objeto, que possuem tratadores de evento anexados.

Utilize o código a seguir no evento OnCreate de um formulário. Insira dois ListBox e execute. O ListBox1 possui o nome de todos os eventos do objeto Form1, enquanto o ListBox2 possui apenas aqueles que têm um tratador de evento anexado.

 

uses Typinfo;

 

procedure TForm1.FormCreate(Sender: TObject) ;

var

  Count, Loop: Integer;

  List: PPropList;

  method : TMethod;

begin

  Count := GetPropList(TypeInfo(TForm1), tkMethods, nil) ;

  GetMem(List, Count * SizeOf(PPropInfo)) ;

  try

    GetPropList(TypeInfo(TForm1), tkMethods, List) ;

    for Loop := 0 to Pred(Count) do

    begin

      Listbox1.Items.Add(List[Loop]^.Name) ;

      method := GetMethodProp(Form1, List[Loop]^.Name) ;

      if Assigned(method.Code) and Assigned(method.Data) then

      begin

        ListBox2.Items.Add(List[Loop]^.Name) ;

      end;

    end;

  finally

    FreeMem(List, Count * SizeOf(PPropInfo))

  end;

end;