この記事で扱っていること
- 項目選択の画面をカスタマイズする方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
LabVIEWでフロントパネルを構成するとは、そのままユーザーインタフェースをデザインすることを意味します。
フロントパネル上における様々なオブジェクト(制御器や表示器)は、既に制御器パレットにそろっているのでこれをドラッグアンドドロップで配置するだけでインタフェースが作れるのは、便利な反面、たまに融通が利かなかったりします。
その一例が、ユーザーに複数の選択肢から項目を選択させるための機能で、リング制御器やコンボボックス、列挙体が挙げられます。
項目の選択肢が出る場所をいじれないので、例えば項目表示時にフロントパネルの一部が隠れてしまうのが嫌な場合があるときにどうしようもできません。
そこで、項目を表示するだけの機能を持ったサブVIを用意し、好きな位置にこのサブVIを表示させるといった工夫が考えられます。
この記事では、そんな工夫の一例を紹介しています。
どんな結果になるか
例として、以下のようなフロントパネルを持つプログラムを用意しました。列挙体が一つ配置されていて、本来であればこの列挙体をクリックして中の要素を一つ選択することができます。
ただし、列挙体の項目が表示される位置は列挙体のすぐ近くになってしまいますね。
このプログラムを実行し「項目を選択してください」のボタンを押すと、別ウィンドウで項目の一覧が表示され、ここから選択できるようになります。
選択し終えたら、最初のプログラムの方で配列として選んだ項目を取得できます。項目の文字列が取得できている、ということはつまりケースストラクチャの条件としてこの文字列を配線すれば、列挙体を配線したのと同じように条件分岐が可能になります。
単純な列挙体では項目は一つしか選べませんが、今回のプログラムを組むことで複数選べるようになります。
プログラムの構造
やっていることはとても単純で、項目を表示するためだけのサブVIを用意するだけです。
なお、今回はメインのVIにてWhileループを使用したいわゆる「ポーリング」タイプのプログラムとしていますが、イベントストラクチャを使用する方がループが無駄に回ることはなくなるので効率は良くなります。
今回のプログラムでは列挙体があらかじめ用意されているという前提としているため列挙体を置いていて、このプロパティノードで「文字列[]」というものを使用してサブVIに列挙体の項目名を渡しています。
ステートマシンの構造にしているときなど列挙体は頻繁に使用されるのでこのような形にしていますが、別に列挙体が必要というわけではなく、サブVI側で表示する項目名をリストボックス上であらかじめ設定すればいいだけの話です。
そんなサブVI、select_popup.viのブロックダイアグラムは以下のようになっています。
項目が一つも選ばれずキャンセルがされたとき用にキャンセルされたことを表すブールも用意しています。
一方で、キャンセルはされていないけれど一つも項目が選択されていない場合もあると思いますので、キャンセルされた場合とまとめてケースストラクチャを構成しています。
なお、リストボックスから複数の項目を選べるようにするには設定を忘れずに行ってください。
この指定をしないと、ブロックダイアグラム上で「リストボックス」の端子は配列ではなくスカラーになります。
また、メインのVIからサブVIのフロントパネルを表示させて項目を選べさせるようにするためには、サブVIのVIプロパティの設定も忘れずに行っておく必要があります。
表示についての工夫
ただ単に、別のウィンドウとして表示させるのだけでは面白くないので、カスタマイズのポイントとして、サブVIのフロントパネルを表示する位置と、リストボックスに表示される項目の表示フォントを可変にする機能を追加し、リストボックスの枠組みについても取っ払おうと思います。
表示位置については、VIに対するプロパティ「フロントパネルウィンドウのウィンドウ境界」を編集することでプログラム的に変更できます。ここでは、VIを表示しているモニタに合わせて、常に真ん中上部にサブVIが表示されるようにしています。
下の図では、モニターの大きさの値がRightから取得できるのでこの半分の値から表示したいフロントパネルサイズの大きさの半分をそれぞれ引く、足すとして、フロントパネルのウィンドウ境界のLeftとRightに入力しています(なので、今回サブVIのフロントパネルの横の長さは400としています)。
また、項目の表示フォントサイズを変更する機能は、リストボックスのプロパティにて、まずアクティブ行の設定に「-2」を入力して「全ての行に対して」という指定をしておき、その後にセルのフォントサイズを入力するようにしています。
このサイズ、実際にいくつかの値を入力すればわかりますが、そこそこ大きい値にしないととても小さい表示にしかならないので気を付けます。
最後に、リストボックスの枠組みです。これは単純にツールパレットで色変更を選択し、透明(「T」)を選択すればできます。
色を変更した後は、再びツールパレットを表示させて一番上の部分をクリックしマウスカーソルが元の矢印マークになるように設定を戻しておきます。
これらの工夫を加えれば、単に列挙体やリング制御器などの、複数の項目から選ばせる画面を別のウィンドウにしただけ以上の機能を持ったカスタマイズされた選択リストを用意できると思います。
本記事では、複数の選択肢から項目を選択するタイプの制御器の、項目表示についてできる工夫について紹介しました。
一見すると「車輪の再発明」ではありますが、使い勝手の良いユーザーインタフェースを用意するにあたりたまにはこういった工夫も必要となるかと思うので、何かの参考になればうれしいです。
ここまで読んでいただきありがとうございました。
コメント