この記事で扱っていること
- ドラッグアンドドロップでサブパネルの表示を指定する方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
LabVIEWのフロントパネルは、通常そのVIのブロックダイアグラム上の結果を反映するだけで、他のVIの結果は直接表示されません。
ただし、サブパネルという機能を使用することで、指定したVIのフロントパネルを、別のVIのフロントパネルに埋め込むことができます。
このとき、埋め込むVIはリストにあって、そこからドラッグアンドロップで複数のサブパネルに表示させたいVIを決めることができれば、自由に表示のカスタマイズが可能になります。
本記事では、そんなサブパネルへのドラッグアンドロップ操作で複数のVIのフロントパネル表示をカスタマイズする方法を紹介しています。
どんな結果になるか
表示させたいVIの一覧を表示するリストボックスと、サブパネルが2つあります。
プログラムを実行すると、リストボックス上の項目を一つ選んでドラッグアンドロップでその選ばれたviが表示されるようになります。
(ただし、都合上、既に何かが表示されているサブパネル上をドラッグ状態のマウスが通過するとサブパネルの表示が消えます)
なお、リストボックスは制御器パレットから出しただけではドラッグアンドロップの操作を受け付けない状態となっているため、リストボックスを右クリックして「ドラッグ&ドロップ」の項目にて「ドラッグを許可」の設定をしておく必要があります。
プログラムの構造
ベースはサンプルを基にしています。
なお、サブパネルは一部のスタイル(シルバーなど)には備わっていないことに注意する必要があります。
Whileループに入る前では、表示させる予定のvi達を実行させるためにVIリファレンスを開いています。
その後、リスボックスにvi名を表示させてから、イベント登録を行っています。イベント登録のノードに、イベントを検知する対象にしたい制御器(今回でいえばサブパネル)などのリファレンスを入力して、あとはどのようなイベント(下の図でいえば、サブパネルの1と2どちらにも「ドラッグ境界内」と「ドロップ」イベントを定義している)をイベントとして検知するかを決めています。
Whileループに入ったら、イベントストラクチャでどのイベントが実行検知されたかを判断し処理していきます。
通常イベントストラクチャの中に具体的な処理は入れないのが望ましいですが、今回はスピードを重視しているわけではないので全てイベントストラクチャ内で処理しています。
まずはリストボックスの「ドラッグ開始?」イベントで、これはフロントパネル上のリストボックスで何らかの項目を選んでクリックしてドラッグを行っているときに検知されます。
この中で、リストボックスのどの要素(プログラム内では要素は文字列データではなく数値データとして扱っています)がドラッグされているのかを「データ」に渡して他のイベントで使用します。
次はサブパネル1のドラッグ境界内イベントです。サブパネル1の領域にマウスのドラッグ操作時に侵入するとこのイベントが検出され、「受け入れるか」を判断させます。
その後サブパネル1上でドロップすると、ドラッグドロップデータを取得の関数で選んでいたリストボックスの項目が何番目にあるかの情報を取得、指標配列の指標入力値としています。
あとはサブパネル2も同じです。
インボークノードに入力しているリファレンスを、サブパネル2のリファレンスにしていることに注意してください。
サブパネル2のドロップ操作も、既に紹介したサブパネル1用の処理時の操作と同じにしています。
最後、stopボタンを押したことで実行していたVIは中断されることとなります。
ブロックダイアグラムも表示させる
二つのサブパネルで、片方にフロントパネル、もう片方にブロックダイアグラムを表示させるといったこともできます。
ただし、ブロックダイアグラムを表示させるためのメソッドは、通常インボークノードに表示されません。
このメソッドはVIスクリプトに関するものだからです。(下の図でインボークノードが水色になっているのがVIスクリプトに関するメソッドであることを示しています)
これをするには、VIスクリプトの設定を有効にする必要があります。これは「ツール」からとべる「オプション」で指定できます。
本記事では、サブパネルに表示させるVIをドラッグアンドドロップで指定する方法を紹介しました。複数のサブパネルを使用する際に、どこのサブパネルにどのVIを表示させるか、直感的な操作で行えるので参考にしてもらえるとうれしいです。
ここまで読んでいただきありがとうございました。
コメント