実行時にコードから「事後」のイベントをいつでもフックすることができます。 (フォームを作成した後、最も可能性の高い右)あなたのプログラムの中でいくつかの点であなたのジェネリック版にイベントハンドラを設定するInitChildFormを呼び出して次に
type
TEventHolder = class
private
FSFActivate: TNotifyEvent;
published
property SavedFormActivate : TNotifyEvent
read FSFActivate write fSFActivate;
end;
type
TMainForm = class(Tform)
:
SavedEvents : tStringList;
procedure ChildFormActivate(Sender: TObject);
procedure InitChildForm(MdiForm:TForm);
end;
procedure TMainForm.ChildFormActivate(Sender: TObject);
var
i : integer;
begin
// your special processing here this is called for the child form.
i := SavedEvents.IndexOf(ClassName);
if i <> -1 then
tEventHolder(SavedEvents.Objects[i]).SavedFormActivate(Sender);
end;
procedure TMainForm.InitChildForm(MdiForm:TForm);
var
OrigEvents : TEventHolder;
begin
if not Assigned(SavedEvents) then
SavedEvents := tSTringlist.create;
if Assigned(MdiForm.OnActivate) then
begin
OrigEvents := tEventHolder.create;
OrigEvents.SavedFormActivate := MdiForm.OnActivate;
SavedEvents.AddObject(MdiForm.ClassName,OrigEvents);
end;
MdiForm.OnActivate := ChildFormActivate;
end;
:基本的には次のようになり、一般的なOnActivateイベントを作成します。もちろん、メインフォームのクロージャを実行すると、SavedEvents(およびリンクされたオブジェクト)を解放することができます。
ありがとうございました。最後に、SpTBXLibのコードを使ってWH_CBTフラグをフックするコードを使って解決しました。:) – migajek
こんにちは、私はそのコンポーネントを試してみたいと思っていますが、サポートウェブサイトにはエラー403があります。あなたは特権を持っていません。) –
@Alin Sfetcu、私は最近私のホスティングサービスを変更しましたが、まだ私のリンクとフォーラムをすべて再インストールする必要がありません。真実を伝えるために、私はすでにサポートフォーラムが機能していると思った。私はそのことをできるだけ早く調べます。あなたのために申し訳ありません。私が述べたように、Torryサイトのコピーはまだ動作するはずです。 –