作成した返信
-
著者投稿
-
MZPlatformユーザー会サイト管理者
ご提供いただきありがとうございます。
MZPlatformユーザー会サイト管理者ご報告ありがとうございます。調査したところ、デバッグ実行中に該当箇所へステップインしたときにMZビルダーの内部状態に問題が生じており、該当箇所のメソッド実行後のビルダー画面更新でエラーが発生していました。これはMZ本体の不具合と思われます。予期しないエラーが発生することで、アプリ側の実行が止まってしまっている状況です。
詳細な原因はまだわかりませんが、デバッグ実行をしなければアプリの動作に影響はないのと、デバッグ実行で該当箇所にステップインしなければエラーが発生しないのはご指摘の通りです。
原因が判明次第、次期バージョンに向けて修正しますが、それまではこのようなエラーが発生した場合はそれを回避するようにお使いいただくしかありません。ご迷惑をおかけしますが、よろしくお願いします。
MZPlatformユーザー会サイト管理者1.ボタン2個の方のパネルの配置が「手動配置」に設定されているためです。「横方向整列」にすると自動で調整されると思います。
2.パネルやGUI複合コンポーネントにつきましては、画面編集画面で「自動サイズ設定」にチェックがあれば、ボタン等のサイズが変更された時にパネル等のサイズも自動で調整されますが、その際にボタン等のサイズ変更はメソッド「setPreferredSize(Dimension)」をお使いください。引数のDimensionは寸法格納変数を用いて作成します。これで指定した後、パネル等のサイズが自動で調整されます。修正したサンプルを添付しますのでご確認ください。なお、フレームだけは、サイズの更新に別途メソッドを呼ぶ必要があります。
3.例えば寸法を別ファイルに保存しておいて、起動時にそのファイルを開いてサイズを更新するか、終了時にアプリケーションファイルを上書き保存するなどの工夫が必要です。
- この返信は、 MZPlatformユーザー会 により、 4 年, 9 ヶ月 前 に編集されました。
MZPlatformユーザー会サイト管理者ご提供いただきありがとうございます。
MZPlatformユーザー会サイト管理者お知らせいただきありがとうございます。
まずはボタンコンポーネントでご希望の処理が実現できるかお試しいただき、それと同等の機能でよければ追加を検討します。現時点でのコメントですが、左のマウスボタンでは結局ボタンが押されてしまいますので、右ボタンでポップアップメニューを出す方が現実的かと思います。
MZPlatformユーザー会サイト管理者追加予定はありませんでしたが、ご要望があれば検討します。
そのイベントでどのような機能を実現したいかを、参考までにお知らせいただけますでしょうか。MZPlatformユーザー会サイト管理者残念ながら、シリアル通信コンポーネント側でイベントを分岐させる機能はありません。
Arduino側のシリアル通信出力を独自にカスタマイズできるのであれば、出力する先頭の文字列に意味を持たせるなどして、データ生成イベント発生時にその先頭文字列で判定して分岐させることが考えられます。
MZPlatformユーザー会サイト管理者状況次第で詳細はわかりませんが、読んでいる感じだとその結果は妥当だと思います。
基本的に、Arduino側は極力delayを短くしてください。挙動がおかしくなる場合はある程度の時間を確保した方がよいですが、特に制限がないのであれば、ほぼリアルタイムに反応してくれるようにした方が良いです。0.5秒待つということは、それだけ反応が遅くなるということです。止めたつもりなのにイベントが発生するのはそのせいです。マイコンとセンサの通信に多少時間を空けた方が良い場合もありますが、それでも50msとかだと思います。
MZのタイマー側は、どのぐらいの間隔でセンサーの値を更新したいかという設定になります。1秒間隔でほしいのか、0.1秒間隔でほしいのかを考えて設定してください。もっと長くて良いなら、長く設定すればよいです。問題になるのは短い場合で、Arduino側の処理時間がタイマーの間隔より長くなってしまうと、正常に動作しない感じになります。
MZPlatformユーザー会サイト管理者論理値によるイベント分岐は、例えば論理積演算(AND)コンポーネントを用いて作成できます。
「論理値変換/左右オペランド設定後、演算を行う(String,String)」メソッドで、右オペランドを固定値でtrueとし、左オペランドに指定したい論理値を与えて実行すると、trueの場合には1番、falseの場合には0番のイベントが発生します。
MZPlatformユーザー会サイト管理者繰返し制御(While)は適切に使うのが難しいコンポーネントですので、あまりおすすめできません。
代わりに、タイマーコンポーネントを使用してはいかがでしょうか。
ボタンを押したらタイマーを開始し、ボタンを押したらタイマーを停止することが可能で、タイマーのアクションは別スレッドになります。タイマーが動作する間隔がご希望通りにできるかは状況次第ですが、ぜひご検討ください。
-
著者投稿