我的類包含數據集(TDataSet)。我的類的用戶可以指定事件處理這個數據集:保存並恢復事件處理程序
ds.FieldByName('ID').OnChange := @ID_OnChange;
然後我不得不重新打開數據集:
ds.Close;
ds.Open;
這所有事件處理程序都走了以後:
if Assigned(ds.FieldByName('ID').OnChange) //returns false
所以,我需要保存處理程序並在重新打開後恢復它們。我用的TStringList它:
var
EventHandlers: TStringList;
...
//I do this for every event of every field
if Assigned(ds.FieldByName('ID').OnChange) then
EventHandlers.AddObject('ID', @ds.FieldByName('ID').OnChange);
的問題是如何恢復的處理程序:
ds.FieldByName('ID').OnChange := TFieldNotifyEvent(ObjToInt(EventHandlers.Objects[0]));//Invalid typecast error
我怎麼可以指定存儲地址的事件處理程序? 謝謝。
Delphi的哪個版本?現代的Delphi通用容器類將完成你需要的工作。此外,你不能把一個事件處理程序放入'Integer'中。事件處理程序是對象的一種方法。這意味着它是兩個指針。 – 2012-03-06 14:53:56
對不起,忘了提及:Delphi 6. – IceHar 2012-03-06 15:00:25
@DavidHeffernan好的,我可以創建兩個指針記錄(TMethod?)的列表。如何從該記錄保存和恢復處理程序? – IceHar 2012-03-06 15:06:08