How can I dynamically inject code into event handlers in Delphi?

前端 未结 5 2109
予麋鹿
予麋鹿 2020-12-17 00:31

For debugging / performance tests I would like to dynamically add logging code to all event handlers of components of a given type at run time.

For example, for all

5条回答
  •  爱一瞬间的悲伤
    2020-12-17 01:13

    I would try this:

    TDataSetBeforeOpenStartTimeStorer = class(TObject)
    
    constructor Create(MyDataModule : TMyDatamodule);
    begin
        OldBeforeOpen := MyDatamodule.OnBeforeOpen;
        MyDatamodule.OnBeforeOpen = NewBeforeOpen;
    end;
    
    procedure NewBeforeOpen(Sender: TDataset);
    begin
      StoreStartTime(Sender);
      if Assigned(OldBeforeOpen) then
        OldBeforeOpen(Sender);
    end;
    

    Attach one TDataSetBeforeOpenStartTimeStorer instance to every TDataSet and you'll have your functionality.

提交回复
热议问题