Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

ダイアログ ボックスのコントロールの無効化および非表示

コントロールの無効化と非表示について

大部分の Simulink® ダイアログ ボックスには、テキスト フィールドやボタンなどコントロール ("ウィジェット" と呼ぶこともある) を無効にしたり非表示にするカスタマイズ API があります。カスタマイズ API によって、複数のダイアログ ボックス (たとえば、一度のメソッド呼び出しによって複数のパラメーター ダイアログ ボックス) の全クラスのコントロールを無効化または非表示にすることができます。

Simulink ダイアログ ボックスまたはダイアログ ボックスのクラスをカスタマイズする前に、まず、ダイアログ ボックスやダイアログ ボックスのクラスがカスタマイズできるか確認します。モデル エクスプローラーのダイアログ ペインに現れるダイアログ ボックスは、カスタマイズすることができます。さらに、ダイアログおよびウィジェット ID をもつダイアログ ボックスはカスタマイズすることができます。ダイアログ ボックスがカスタマイズできるかどうかを判別するには、ダイアログ ボックスを開いて、ダイアログおよびウィジェット ID 表示を有効にし (ウィジェット IDを参照)、ウィジェットの上にカーソルを合わせます。ウィジェット ID が表示されたら、ダイアログ ボックスをカスタマイズできます。

ダイアログ ボックスまたはダイアログ ボックスのクラスがカスタマイズ可能であると判別できたら、ダイアログ ボックスをカスタマイズする MATLAB® コードを記述します。これには、特定のダイアログ ボックスやダイアログ ボックスのクラスに対するコントロールを無効化または非表示にするコールバック関数を記述すること (コントロール カスタマイズ コールバック関数の記述を参照) とカスタマイズ マネージャーを使用してコールバック関数を登録すること (コントロール カスタマイズ コールバック関数の登録を参照) が必要になります。その後、Simulink は、当該ダイアログ ボックスを開くときはいつでも、コントロールを無効化または非表示にするコールバック関数を実行します。

ダイアログ ボックスのボタンを無効にする

この sl_customization.m ファイルは、名前に engine を含むモデルに対し、[コンフィギュレーション パラメーター] ダイアログ ボックスの [コード生成] ペインの [参照] ボタンを無効にします。

function sl_customization(cm)

% Disable for standalone Configuration Parameters dialog box 
configset.dialog.Customizer.addCustomization(@disableRTWBrowseButton,cm);

end

function disableRTWBrowseButton(dialogH)
  hSrc   = dialogH.getSource;  % Simulink.RTWCC
  hModel = hSrc.getModel;
  modelName   = get_param(hModel,'Name');

  if ~isempty(strfind(modelName,'engine'))
    % Takes a cell array of widget Factory ID.
    dialogH.disableWidgets({'STF_Browser'})
  end

end

このカスタマイズをテストするには、以下のようにします。

  1. MATLAB パス上に sl_customization.m ファイルを保存します。

  2. コマンド ラインで「sl_refresh_customizations」を入力するか、MATLAB を再起動して、カスタマイズを更新します (カスタマイズの登録を参照)。

  3. Triggered Subsystem を使ったエンジン タイミングのモデル化の例で sldemo_engine モデルを開きます。

  4. [コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[コード生成] ペインを調べて [参照] ボタンが無効になっているかどうかを確認します。

コントロール カスタマイズ コールバック関数の記述

ダイアログ ボックス上のコントロールを無効化または非表示にするためのコールバック関数は、1 つの引数 (無効または非表示にするコントロールを含むダイアログ ボックス オブジェクトに対するハンドル) を受け入れます。ダイアログ ボックス オブジェクトは、ダイアログ ボックスが含むコントロールを無効にしたり非表示にするために、コールバック関数が使用できるメソッドを提供します。

ダイアログ ボックス オブジェクトは、現在のモデルについての情報を含むオブジェクトへのアクセスも提供します。ユーザーのコールバック関数はこれらのオブジェクトを使用して、コントロールを無効化または非表示にするかどうかを決めることができます。たとえば、このコールバック関数は、これらのオブジェクトを使用して、名前に engine を含むモデルに対し、[コンフィギュレーション パラメーター] ダイアログ ボックスの [コード生成] ペインの [参照] ボタンを無効にします。

function disableRTWBrowseButton(dialogH)

  hSrc = dialogH.getSource;  % Simulink.RTWCC
  hModel = hSrc.getModel;
  modelName = get_param(hModel,'Name');

  if ~isempty(strfind(modelName,'engine'))
     % Takes a cell array of widget Factory ID.
     dialogH.disableWidgets({'STF_Browser'})
  end

ダイアログ ボックス メソッド

ダイアログ ボックス オブジェクトは、コントロールの有効化、無効化、非表示化のために、次のメソッドを提供します。

  • disableWidgets(widgetIDs)

  • hideWidgets(widgetIDs)

ここで、widgetIDs は、無効または非表示にするウィジェットを指定するウィジェット ID の cell 配列 (ウィジェット IDを参照) です。

ウィジェット ID

ウィジェット ID は、Simulink ダイアログ ボックスのコントロールを識別します。特定のコントロールに対するウィジェット ID を決めるためには、コマンド ラインで次のコードを実行します。

cm = sl_customization_manager;
cm.showWidgetIdAsToolTip = true

コントロールを含むダイアログ ボックスを開いて、コントロールの上にカーソルを合わせ、ウィジェット ID を一覧表示するツールヒントを表示します。たとえば、[コンフィギュレーション パラメーター] の [ソルバー] ペインの [開始時間] フィールドの上にカーソルを合わせると、[開始時間] フィールドの widget ID が StartTime であると表示されます。

メモ

カスタマイズできないコントロールの場合は、ツールヒントに not customizable と表示されます。

コントロール カスタマイズ コールバック関数の登録

Simulink のインストールに対して、コントロール カスタマイズ コールバック関数を登録するには、コールバックで configset.dialog.Customizer.addCustomization メソッドを呼び出すインストールの sl_customization.m ファイル (カスタマイズの登録を参照) のコードを含めます。

このメソッドは登録するコールバック関数へのポインターを引数として取ります。このメソッドを呼び出すと、ダイアログ ボックスが開く前に登録された関数が呼び出されます。

この例では、[コンフィギュレーション パラメーター] ダイアログ ボックスの [コード生成] ペインの [参照] ボタンを無効にするコールバックを登録します (コントロール カスタマイズ コールバック関数の記述を参照)。

function sl_customization(cm)  

% Disable for standalone Configuration Parameters dialog box 
configset.dialog.Customizer.addCustomization(@disableRTWBrowseButton,cm);

end

メモ

カスタマイズ コールバックを登録することにより、Simulink は、メソッドのダイアログ ボックス ID 引数によって指定されるダイアログ ボックスのクラスの各インスタンスについてコールバックを起動します。したがって、1 つのコールバックを使用して、ダイアログ ボックスの全クラスに対するコントロールを無効または非表示にすることができます。特に、1 つのコールバックを使用して、大部分の組み込みブロックに共通するパラメーターのコントロールを無効または非表示にすることができます。大部分の組み込みブロック ダイアログ ボックスが、同じダイアログ ボックスのスーパー クラスのインスタンスです。

関連するトピック