私のクラスにはデータセット(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
保存されたアドレスをイベントハンドラーに割り当てるにはどうすればよいですか?ありがとう。