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

32 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'); % ←この行を追加

Categories

Find more on 環境と設定 in Help Center and File Exchange

Products


Release

R2018a

Community Treasure Hunt

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

Start Hunting!