msgboxのダイアログ位置を、画面中央にしたい

31 views (last 30 days)
koji fukumoto
koji fukumoto on 26 Sep 2018
Answered: koji fukumoto on 27 Sep 2018
msgboxには表示位置を指定するoptionが無いので、以下のようなコードで「画面中央への表示」を試みました。
f = msgbox("メッセージ", "タイトル", 'help');
movegui(f, 'center');
しかし、msgbox実行時にダイアログが表示された後で画面中央に移動する為、ちらつきが発生してしまいます。
ちらつきが発生することなく、画面中央にダイアログを表示するにはどうすればよいでしょうか?

Accepted Answer

Hirokazu Tanaka
Hirokazu Tanaka on 26 Sep 2018
Edited: Hirokazu Tanaka on 26 Sep 2018
カスタムの msgbox を作るのが手っ取り早いかなと思います。
edit msgbox
で実行内容を確認できますが、実際には uicontrol や text などを組み合わせて作られています。この msgbox.m を直接変更してしまうといろいろ問題が出てくる危険があるので、my_msgbox.m として別の場所にコピーして、適宜変更を加える方法ができます。msgbox.m の場所は
which msgbox
で確認できます。R2018b だと、msgbox.m 内で getnicedialoglocation というプライベート関数が実行されており、関数内の下記を修正すれば画面中央に表示できそうです。
figure_size(1) = container_size(1) + 1/2*(container_size(3) - figure_size(3));
figure_size(2) = container_size(2) + 2/3*(container_size(4) - figure_size(4));
他にも、実行にはいくつかプライベート関数が必要なので、
を参考に my_msgbox.m とプライベート関数を保存してトライしてください。プライベート関数はすべて msgbox.m があるフォルダ内の private フォルダにあります。R2018b で動作確認済みですが、他のバージョンは未確認なので注意してください。

More Answers (1)

koji fukumoto
koji fukumoto on 27 Sep 2018
Hirokazu Tanaka 様
アドバイスありがとうございました。 以下の方法で実現できました。
・msgbox.m、setdefaultbutton.m、getnicedialoglocation.m、dialogCellstrHelper.mをコピー
・msgbox.mをmy_msgbox.mにリネーム(function名も同様にリネーム)
・my_msgbox.m内の表示位置設定処理の後に、センター表示処理を入れる
set(figureHandle,'Position',DefFigPos);
movegui(figureHandle, 'center'); % ←この行を追加

Products


Release

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!