メインコンテンツ

waitbar

ウェイト バー ダイアログ ボックスの作成と更新

説明

メモ

waitbar よりも uiprogressdlg の方が追加のカスタマイズ オプションがあるため推奨されます。

f = waitbar(x,msg) は、ウェイト バーと指定されたメッセージを含む非モーダルのダイアログ ボックスを作成します。ウェイト バーは割合の長さ x です。ダイアログ ボックスは、制御するコードで閉じられるかユーザーがダイアログ ボックスのタイトル バーにある閉じるボタン (X) をクリックするまで開いたままになります。f として Figure オブジェクトが返されます。

複数のアプリ ウィンドウ、MATLAB® デスクトップ、または Simulink® にウェイト バー ダイアログ ボックスを表示し、そのダイアログ ボックスに応答する前にそれらを操作できるようにする場合は、関数 waitbar を使用します。

f = waitbar(x,msg,Name,Value) は、ダイアログ ボックスの figure プロパティを設定する 1 つ以上の名前と値のペアの引数を使用して追加のオプションを指定します。たとえば、'Name','Progress' はダイアログ ボックスの名前を Progress に設定します。名前と値のペアの引数は、その他すべての入力引数の後に指定します。

waitbar(x) は、現在のウェイト バー ダイアログ ボックスのバーの長さを x に更新します。x の連続値は通常増加します。減少すると、ウェイト バーが逆方向に進みます。

waitbar(x,f) は、ウェイト バー ダイアログ ボックス f のバーの長さを新しい位置 x に更新します。

waitbar(x,f,msg) は、ウェイト バー ダイアログ ボックス f のメッセージを更新します。

すべて折りたたむ

コード内の 3 つのポイントでウェイト バーの割合の長さとメッセージを更新するウェイト バー ダイアログ ボックスを作成します。

このコードを使用して時間がかかる計算の実行をシミュレートします。関数 pause は、最初のウェイト バー ダイアログ ボックスの figure オブジェクトを関数 waitbar の後続の呼び出しに渡します。この方法で figure オブジェクトを渡すことで、各ポイントでダイアログ ボックスが再作成されるのではなく更新されるようになります。計算のシミュレーションが完了すると、ダイアログ ボックスが閉じます。

function basicwaitbar
f = waitbar(0,'Please wait...');
pause(.5)

waitbar(.33,f,'Loading your data');
pause(1)

waitbar(.67,f,'Processing your data');
pause(1)

waitbar(1,f,'Finishing');
pause(1)

close(f)
end

Wait bar about 1/3 of the full length with text "Loading your data"

ユーザーが進行中の計算を中止できるように [キャンセル] ボタンを追加します。

次のコードを使用して、pi の値を for ループ反復で収束し、各反復でウェイト バーとメッセージを更新します。ユーザーが [キャンセル] ボタンをクリックすると、MATLAB で Figure のアプリケーション データ (appdata) の logical フラグ 'canceling' が 1 (true) に設定されます。コードの for ループ内でその値をテストし、フラグの値が 1 であればループを終了します。

CreateCancelBtn コールバックは文字ベクトルの値に設定します。この方法は、このコールバック コードのように値で指定されるコードが単純なものである場合以外は推奨されません。詳細については、プログラムで作成したアプリ用のコールバックの作成を参照してください。

function approxpi

f = waitbar(0,'1','Name','Approximating pi...',...
    'CreateCancelBtn','setappdata(gcbf,''canceling'',1)');

setappdata(f,'canceling',0);

% Approximate pi^2/8 as: 1 + 1/9 + 1/25 + 1/49 + ...
pisqover8 = 1;
denom = 3;
valueofpi = sqrt(8 * pisqover8);

steps = 20000;
for step = 1:steps
    % Check for clicked Cancel button
    if getappdata(f,'canceling')
        break
    end
    
    % Update waitbar and message
    waitbar(step/steps,f,sprintf('%12.9f',valueofpi))
    
    % Calculate next estimate 
    pisqover8 = pisqover8 + 1 / (denom * denom);
    denom = denom + 2;
    valueofpi = sqrt(8 * pisqover8);
end

delete(f)
end

Wait bar with title "Approximating pi..." and a Cancel button. The text is an approximation of pi, and the bar length is a fraction of the full length.

入力引数

すべて折りたたむ

ウェイト バーの割合の長さ。01 の実数として指定します。x の連続値は通常増加します。減少すると、ウェイト バーが逆方向に進みます。

例: .75

ウェイト バーのメッセージ。文字ベクトル、文字ベクトルの cell 配列、または string 配列として指定します。このメッセージは、ダイアログ ボックス内にある進行状況バーの上に表示されます。

  • メッセージを文字ベクトルとして指定すると、長いメッセージはダイアログ ボックスに納まるように折り返されます。

  • メッセージを cell 配列として指定すると、各配列要素間に改行が挿入されます。長い要素はダイアログ ボックスに納まるように折り返されます。

例: 'Please Wait'

例: {'Please wait', 'The operation is processing'}

前に作成したウェイト バー ダイアログ ボックスの figure オブジェクト。その figure オブジェクトの作成時に使用した出力変数として指定します。

名前と値の引数

すべて折りたたむ

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: 'Name','Wait Bar'

メモ

ここでは、設定できるプロパティの一部だけを紹介しています。完全な一覧については、Figure を参照してください。

[キャンセル] ボタンのコールバック。関数ハンドル、cell 配列、または文字ベクトル (非推奨) として指定します。MATLAB は、[キャンセル] ボタンのコールバックと Figure の CloseRequestFcn コールバックの値の両方を callback 引数の値で指定されたコマンドに設定します。詳細については、プログラムで作成したアプリ用のコールバックの作成を参照してください。

メモ

CreateCancelBtn コールバックを指定するときは、関数 delete を呼び出してウェイト バー ダイアログ ボックスを削除します。CreateCancelBtn コールバックを指定すると、関数 close でダイアログ ボックスが閉じられず、[キャンセル] ボタンと閉じるボタン (X) が応答しなくなります。これは、CreateCancelBtn コールバックが再帰的に呼び出されるためです。このような場合は、次のようなコードを使用してウェイト バーを強制的に削除しなければなりません。

set(groot,'ShowHiddenHandles','on')
delete(get(groot,'Children'))
ただし、これらのコマンドを発行すると、ウェイト バー ダイアログ ボックスだけでなく開いている "すべて" の Figure が削除されます。

例: waitbar(.5,'Processing','CreateCancelBtn',@myfun) は、CreateCancelBtn コールバック関数を関数ハンドルとして指定します。

例: waitbar(.5,'Processing','CreateCancelBtn',{@myfun,x}) は、CreateCancelBtn コールバック関数を cell 配列として指定します。この場合、この関数は入力引数 x を受け入れます。

Figure の名前。文字ベクトルまたは string スカラーとして指定します。

例: figure('Name','Results') は、Figure の名前を 'Results' に設定します。

既定の名前は 'Figure n' です。ここで、n は整数です。Name プロパティを指定した場合、Figure のタイトルは 'Figure n: name' になります。Name の値のみを表示する場合は、IntegerHandle または NumberTitle'off' に設定します。

描画可能領域の位置とサイズ。[left bottom width height] の形式のベクトルとして指定します。この領域には、Figure の境界線、タイトル バー、メニュー バーおよびツール バーは含まれません。

次の表で、Position ベクトルの各要素について説明します。

要素説明
leftプライマリ ディスプレイの左端から、ウィンドウ内側の左端までの距離。この値は、複数のモニターがあるシステムでは負の値になる場合があります。

Figure がドッキングしている場合、この値は、MATLAB デスクトップ内の Figure パネルを基準にした値になります。
bottomプライマリ ディスプレイの下端から、ウィンドウ内側の下端までの距離。この値は、複数のモニターがあるシステムでは負の値になる場合があります。

Figure がドッキングしている場合、この値は、MATLAB デスクトップ内の Figure パネルを基準にした値になります。
widthwaitbar の内側の左右の端の間の距離。
heightウィンドウ内側の上下の端の距離。

すべての測定値は、Units プロパティで指定した単位で表されます。

Figure がドッキングしているときには、Figure の Position プロパティは指定できません。

MATLAB Online™ では、Position ベクトルの bottom 要素および left 要素は無視されます。

境界線、タイトル バー、メニュー バーおよびツール バーを含むウィンドウ全体を配置するには、OuterPosition プロパティを使用します。

メモ

Windows® オペレーティング システムでは、最小ウィンドウ幅と最大ウィンドウ サイズが適用されます。これらの範囲を超える Figure サイズを指定した場合、表示される Figure は指定されたサイズではなく、これらの範囲に従います。

測定の単位。次の表のいずれかの値として指定します。

単位の値説明
'points' (既定)ポイント。1 ポイントは 1/72 インチです。
'pixels'

ピクセル。

Windows システムおよび Macintosh システムでは、ピクセルのサイズは 1/96 インチです。このサイズはシステムの解像度に依存しません。

Linux® システムでは、ピクセルのサイズは使用しているシステムの解像度によって決まります。

'normalized'これらの単位は親コンテナーを基準として正規化されます。コンテナーの左下隅が (0,0) で、右上隅が (1,1) になります。
'inches'インチ。
'centimeters'センチメートル。
'characters'

これらの単位は、グラフィックス ルート オブジェクトの既定の uicontrol フォントを基にしています。

  • 文字の幅 = 文字 x の幅。

  • 文字の高さ = 2 行のテキストのベースライン間の距離。

既定の uicontrol フォントにアクセスするには、get(groot,'defaultuicontrolFontName') または set(groot,'defaultuicontrolFontName') を使用します。

MATLAB ではすべての単位を親オブジェクトの左下隅から測定します。

このプロパティは Position プロパティに影響します。Units プロパティを変更した場合、この既定値を想定する他の関数に影響を与えないように、計算の完了後に値を既定値に戻すことを検討してください。

Units プロパティと Position プロパティを指定する順序は次のように影響します。

  • Position プロパティの前に Units プロパティを指定する場合、MATLAB は指定した単位を使用して Position を設定します。

  • Position プロパティの後に Units プロパティを指定する場合、MATLAB は既定の Units を使用して位置を設定します。その後、MATLAB は Position の値を、指定した単位における等価の値に変換します。

ウィンドウ スタイル。次のいずれかとして指定します。

  • 'normal' — Figure ウィンドウは他のウィンドウから独立しており、この Figure の表示中に他のウィンドウにアクセスできます。

  • 'modal' — この Figure は、既存のすべての Figure ウィンドウの上に表示されます。この一番上に表示された Figure が存在してモーダルな状態である限り、既存のウィンドウへのアクセスができなくなります。ただし、モーダルな Figure の後に作成された新しい Figure は表示されます。

    複数のモーダルなウィンドウが存在する場合、最後に作成されたウィンドウがフォーカスされ、他のすべてのウィンドウの前面に表示されます。この状態は、不可視になるか、通常のウィンドウ スタイルに戻るか、削除されるまで継続します。継続が終了した場合、フォーカスは、最後にフォーカスされたウィンドウに戻ります。

  • 'docked' — Figure はデスクトップまたはドキュメント ウィンドウに表示されます。WindowStyle プロパティが 'docked' に設定されている場合には、DockControls プロパティを 'off' に設定できません。'docked' オプションは、MATLAB Online でサポートされていません。

メモ

WindowStyle プロパティにはいくつかの重要な特徴と推奨されるベスト プラクティスがあります。

  • UI ウィンドウを作成するときは、常に WindowStyle プロパティを指定します。さらに Figure の ResizePosition または OuterPosition プロパティも設定する場合は、WindowStyle プロパティを最初に設定します。

  • Figure の WindowStyle プロパティは、Figure が可視な場合や子オブジェクトを含む場合を含め、いつでも変更できます。ただし、一部のシステムではノーマル ウィンドウとモーダル ウィンドウの実装によっては、このプロパティを設定することで、Figure の点滅や非表示後に再表示される現象が発生する場合もあります。視覚的に最良な結果を得るには、WindowStyle プロパティの設定は、Figure の作成時または非表示のときに行います。

  • Figure で reset を呼び出しても WindowStyle プロパティ値は変更されません。

モーダル ウィンドウ スタイルの動作

WindowStyle'modal' に設定されている場合、Figure ウィンドウが可視である限り、Figure ウィンドウはすべての MATLAB ウィンドウ上のすべてのキーボード操作とマウス操作をトラップします。MATLAB 以外のアプリケーションのウィンドウには影響しません。

モーダルな Figure にフォーカスがあるときに Ctrl + C を入力すると、Figure は 'normal' WindowStyle プロパティ設定に戻ります。これによりユーザーはコマンド ラインに入力できます。

WindowStyle プロパティが 'modal' に、Visible プロパティが 'off' に設定された Figure は、MATLAB が表示しない限りモーダル動作になりません。このためモーダル ウィンドウを破棄する代わりに、後で再利用するために非表示にすることができます。

モーダルな Figure はメニューの子、組み込みのメニュー、ツール バーを表示しません。しかし、モーダルな Figure 内にメニューを作成したり、メニューの子をもつ Figure で WindowStyle プロパティの設定を 'modal' に変更したりするのは誤りではありません。その Menu オブジェクトは存在し、Figure はそれを維持します。Figure の WindowStyle プロパティを 'normal' にリセットすると、そのメニューが表示されます。

詳細

すべて折りたたむ

ヒント

  • 単一ウィンドウの App Designer または uifigure ベースのアプリ向けにモーダル進行状況ダイアログ ボックスを作成するには、代わりに関数 uiprogressdlg を使用します。

バージョン履歴

R2006a より前に導入