この記事で扱っていること
- ダブルクリックを検出する方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
以前別の記事で、LabVIEWのブールボタンに対する長押し操作を検出する方法を紹介しました。
ボタンに対する操作としては他に、ダブルクリックもよくある操作として挙げられると思います。
本記事では、ダブルクリックを受け付けるための組み方の例を紹介します。
どんな結果になるか
あとで紹介するように、イベントストラクチャを使用してプログラムを組んでいるのですが、ダブルクリックを受け付けるボタンと受け付けないボタン両方を用意してその動作の違いを確かめられるようにしています。
ボタンの押し方によって発生イベントが変わります。
プログラムの構造
ブールボタンに対して設定するイベントとして最もよく使われるであろう、値変更イベントを各ブールボタンに対して用意しています。
ダブルクリックされたかどうかを判断するのは、ダブルクリック用のボタンが押されたというイベントがある指定した時間以内に2回起こったかどうかで判断させています。
もしかすると厳密な定義があるのかもしれませんが、自分で試したところ通常ダブルクリックした際には2回のクリックの間隔が150ミリ秒以内程度だったので、今回のプログラムでも150ミリ秒以内にボタン1がクリックされたというイベントが2回起こっているかどうか(1回目のクリックの後150ミリ秒以内に2回目のクリックが検出されたかどうか)で判断しています。
イベントストラクチャが入ったWhileループでは、各イベントごとに下のWhileループへイベントの内容を伝えているのですが、クリックされたかどうかという情報をclickフラグとして伝えています。
わざわざクリックされたというブール値を渡すのは、クリックされていない場合にデキューの関数をタイムアウトさせる際にclickフラグのデフォルト値(FALSE)が出ているかどうかを判定させるために使用しています。
つまり、下の図のように組むことで、ボタン1がまず一度押されてからデキューの関数に設定した150ミリ秒のタイムアウトが発生したかどうかを判定させるのに使用しています。タイムアウトが起きていない場合にはclickフラグはTRUEとなりますが、タイムアウトした場合にはclickフラグのブール値のデフォルトであるFLASEとなります。
値変更イベント以外のイベントでダブルクリックを検出
実は、ダブルクリックの操作自体は値変更イベント以外のイベントであればイベントストラクチャ自体が検出してくれます。
例えばマウスダウンイベントの時に取得できる修正子クラスタを使用します。
ただし、この方法だとボタンの機械的動作がラッチであっても、ボタンを押した後にTRUEから自動的に元に戻りません。
そのため、値変更イベントがより適した実装になっていると思います。
なお、ブール以外のオブジェクトではイベントストラクチャやインボークノードでダブルクリックを検出できるものがあります。
本記事ではダブルクリックを検出する方法を紹介しました。通常のシングルクリックとは異なりダブルクリックすることで別の操作をさせたいときに実装する方法として参考になればうれしいです。
ここまで読んでいただきありがとうございました。
コメント