Мой класс содержит набор данных (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
Как назначить сохраненный адрес обработчику событий?Спасибо.