フォーラムへの返信
-
投稿者投稿
-
MZPlatformユーザー会キーマスター
編集可能状態のコンボボックスにおいて文字列入力時にEnterキーを押下した場合と他のコンポーネントをクリックした場合のどちらにつきましても編集中の文字列が確定しアクションイベントが発生して定義された処理が実行されてしまいます.
アクションイベントに定義された処理が完了するまでその他の処理は実行できないないため,別途クリックしたコンポーネントに入力カーソルを移すことは通常の方法では難しいです.
この処理を実現する一つの方法として,スレッドアロケータ等を用いて別個の同期しない処理(別スレッド)を立ち上げることで一旦アクションイベントの処理を完了し,クリックされたコンポーネントがある場合には入力カーソルを移した上で,他のコンポーネントに入力カーソルがない場合のみ最初のテキストフィールドに入力カーソルを移動するという処理が考えられます.
詳細は添付のサンプルアプリケーションをご覧下さい.添付ファイル:
MZPlatformユーザー会キーマスターリスト格納変数のメソッド「indexOf(Object)」は、リストに含まれる要素と同一のオブジェクトを引数に指定した時に、その位置を返します。そのため、少なくともオブジェクトの型が一致している必要があります。
元のテーブルの列型が文字列であれば、同じ文字列の比較で期待する結果が得られますが、もし列型が数値などになっていて、文字列と比較していると常に-1が返ることになります。
テーブルの列型を確認する方法は、実行(設定可)で実行して、テーブルの列ヘッダで右クリックすると表示されるメニューから、「列>列型」で選択状態になっている項目になります。
テーブルの列型を文字列に変更すれば解決すると思いますが、数値型から変更できない事情がある場合は、入力を数値入力フィールドにして、例えば整数(BigInteger)で型をそろえると、期待する結果が得られます。
もし、データベースから取得した結果をテーブルに表示している場合など、特殊な数値型になっていることがありますので、うまくいかない場合は再度お問い合わせください。
MZPlatformユーザー会キーマスターI/Oユニットというのは、一般的なPLCのI/Oユニットということでよろしいでしょうか。
こちらも、MZでは対応しておりません。製品ごとに使用するソフトウェアやドライバが異なると思いますので、個別に対応することは難しいと考えています。一方、現状のMZで何らかの機器と通信する方法としては、シリアル通信(WindowsのCOMポート)を用いて文字列やバイト列で情報をやり取りする方法か、機器に付属する別ソフトウェアの機能をコマンドラインから使用可能な場合に標準入出力を介して情報をやり取りする方法が考えられます。なお、これらの場合でも、どのような書式で機器と情報をやり取りするかについての情報が入手可能であることが前提となります。
また、機器や付属するソフトウェアからファイル出力やDB出力が可能であれば、それらを介してMZと情報をやり取りすることは可能です。
MZPlatformユーザー会キーマスター残念ながら、現在のMZはGPIB通信に対応しておりません。
2つ目の「I/O制御」はGPIB通信におけるI/O制御という意味でしょうか。そうであれば、こちらも対応しておりません。もし具体的なご要望をご記入いただければ、可能な範囲で検討やテストをしてみますので、お気軽にご記入ください。
MZPlatformユーザー会キーマスターご指摘の通り、MZでは多くの文字列表現から数値型への直接変換が可能なのですが、累乗表現は直接変換ができません。この場合は、関数電卓コンポーネントを用いることで、数値型に変換することが可能です。
関数電卓コンポーネントは「処理部品」の「演算制御」に分類されております。
サンプルアプリもMZ本体に含まれていますのでご参照ください。今回の例では、メソッド「計算式を設定する(String)」で変換したい文字列を指定して、続いてメソッド「計算を実行する()」を起動すると、戻り値が数値型として得られます。
MZPlatformユーザー会キーマスターご指摘のように、2)についてはExcelファイルアクセスでセルの値を変更して、そのセルの変更を反映したセル数式の演算はMZ側で実行できません。やはり変更後の状態をExcelファイルとして保存して、数式が設定されたセルを再計算するような操作をしないと反映されないのが現状です。
1)についてMZ側で独自に同様の計算をするためには、「最小二乗法」コンポーネントを使用します。なお、このコンポーネントはMZに標準的に含まれていますが、通常のメニューから追加することはできません。「コンポーネント追加」のメニューで「クラス指定」を選択していただき、
jp.go.aist.dmrc.platform.beans.solver.PFLeastSquareSolver
と入力していただくと追加することができます。最小二乗法を用いた多項式近似の方法については、恐縮ですが特にドキュメントがありませんので、こちらで作成したサンプルアプリケーションを添付します。基本的にはテーブルでデータを与えると文字列で近似した数式が得られるというものです。もし3次の係数だけ使いたい場合には、この文字列から係数を切り出す操作が別途必要となります。
添付ファイル:
MZPlatformユーザー会キーマスター終了処理についてのお問合せですね.
一点確認させていただきたいのですが,アプリケーションの終了時に確実に「アプリケーション」コンポーネントのメソッド「アプリケーションを終了する」を起動するように設定されておりますでしょうか.
本メソッドを起動しない場合,プロセスが残る場合があります.
なお,本メソッド起動時に,「アプリケーション」コンポーネントから「アプリケーション終了イベント」が発生し,イベントに接続された処理が完了した後,プロセスが終了する仕様になっております.
以上,ご確認をよろしくお願い申し上げます.MZPlatformユーザー会キーマスターテキストエリアがフォーカス状態のときの文字入力位置についてのご質問ですね。
テキストエリアの文字入力位置を末尾に移動する場合には、メソッド「文字入力位置を設定する(int)」を使用します。指定する数値は、テキストエリアの文字列を文字列格納変数に設定して、メソッド「文字列の長さを取得する()」から取得します。
上記の処理は、テキストエリアのフォーカスイベントに接続すれば常に実行されますし、何らかの処理の一部として呼び出すことも可能です。
以上、お試しください。
MZPlatformユーザー会キーマスター先に投稿された方で回答しましたが、日時選択ダイアログで年月のみを表示することはできません。
MZPlatformユーザー会キーマスター日時選択ダイアログの属性設定でDateInvisibleをtrueにしますと、年月日の非表示となります。これにtrueを指定できない状況としては、属性設定でTimeInvisibleをtrueに指定していることが考えられます。こちらは、時刻の非表示となります。
日時選択ダイアログでは、年月日と時刻のどちらか一方を非表示にできますが、両方を非表示に指定できない仕様となっております。もし、年月を表示して日だけ非表示にしたいというご要望であれば、現時点ではそのような機能はございません。
-
投稿者投稿