2

多数のMDI子(および非MDIフォーム)を含むMDIアプリケーションがあり、現在アクティブになっていて常にフォーカスがあるフォームを追跡したいと思います。ユーザーがアプリケーション内であるフォームから別のフォームに切り替えるとき、ウィンドウアクティベーションメッセージをトラップし、バックグラウンドでグローバル変数をアクティブなフォームのプロパティに設定します(このプロパティは基本クラスから継承されます)。私は元々、基本クラス(アプリケーションのすべてのフォームが使用する)のOnActivateイベントハンドラーにコードを配置しましたが、このイベントが常に発生するとは限らないことに気付きました。何か案は?

Delphi2006BDSを使用しています。

4

2 に答える 2

5

ActiveMDIChild プロパティは探しているものですか?

于 2011-06-27T16:58:03.297 に答える
4

グローバルScreen変数はすべてのフォームを追跡します。フォーカスがあり、フォーカスが別のフォームに変わるたびに発生するイベントであるScreen.ActiveCustomFormフォームを指します。Screen.OnActiveFormChangeイベントハンドラでプロパティを更新できます。

type
  TMainForm = class(TForm)
    ...
  private
    procedure ActiveFormChanged(Sender: TObject);
  end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  Screen.OnActiveFormChange := ActiveFormChanged;
end;

procedure TMainForm.ActiveFormChanged(Sender: TObject);
begin
  { Do what you want to do }
end;
于 2011-06-29T12:58:15.460 に答える