再度 サブクラス解放についてのまとめ >>コンポーネント作家の方々へ
サブクラスを利用するコンポーネントは以下の手順で解放する事
var WM_DetachProc:Cardinal; をローカル変数として定義し
コンポーネントの初期化部で
initialization
WM_DetachProc := RegisterWindowMessage('WM_SubclassFreeNotify');
end.
とする。
サブクラス解放時にはこのメッセージIDで
WParam,LParam はユニークな値を入れて サブクラス先に送信する
それを受信したWindowProcでは、
この2つの値で送信者が自分かどうか判断し
自分でなければリンクを解放して下位にメッセージを送り
メッセージが帰って来たらリンクを再接続する
送信者が自分ならリンクの解放だけを行う
VCL上のサブクラス取り外し
WParam で selfが渡される WParam = LongInt(self)
LParamは無視してよい サンプルコード
>>922 Win上のサブクラス取り外し
LParamでプロセスID
WParamはプロセス内ユニークな値(メソッドアドレス等それぞれのプロセスで管理)
注意: WM_DetachProc は定数ではないので case では使えない ifで判断する事