Myクラスにはデータセット(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'に入れることもできません。イベントハンドラはオブジェクトのメソッドです。つまり、それは2つの指針です。 –
申し訳ありませんが、言って忘れてしまった:デルファイ6。 – IceHar
@DavidHeffernan [OK]を、私は2つのポインタのレコード(TMethod?)のリストを作成することができます。そのレコードからハンドラを保存して復元する方法は? – IceHar