この記事で扱っていること
パスワード入力用のキーパッドを作成する方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
画面上のボタンをクリックして入力してパスワードを入力する際に、数字が0から順番に並んでいるのではなく、毎回ボタンの配置がランダムに変わる、という形式があります。
キーボードが手元にない状態でマウスやタッチパネル操作を行う際のセキュリティの観点から実装が必要、というケースを想定しています。
このようなUIをLabVIEWで簡単に実装できるので、その方法を紹介しています。
どんな結果になるか
プログラムでは、画面上に入力されたパスワードを表示する画面と、「パスワード表示」を解除するためのブールボタン(機械的動作は放されるまでスイッチ)、そしてキーパッドのためのブールボタン(どれも放されたらラッチ)を用意しています。
(画像では、後で紹介するブロックダイアグラムの説明の都合上全てラベルを表示していますが、ラベルを表示させておく必要はないので実行時にはラベルを非表示しておきます)
なお、Cはキャンセルを表し、キャンセルボタンとOKボタンの配置は固定されたままになるようにします。
プログラムを実行すると、ボタンの配置がランダムに切り替わります。
これらをクリックして入力することでパスワード入力とすることができます。
プログラムの構造
想定としてはこのプログラムをトップレベルVIから呼び出す一機能として作っていて、単純な動作しか持たないので、イベントストラクチャを使用して、各処理はストラクチャ内で完結するようにしています。
イベントストラクチャ(の入ったWhileループ)に進む前に、ブールの表示を初期化しておきます。
各ブールボタンのリファレンスを用いてこれらを配列化し、これとともに0~9が入った文字列配列をシャッフルした後の配列をForループに渡し、ブールの文字列[4]プロパティに渡しています。
このプロパティはブール制御器のテキストを決めるためのプロパティです。
ブールにはTrueかFalseしかないのだから指定する文字列は2つでいいのでは?と思うかもしれませんが、TrueからFalseになる間、FalseからTrueになる間(どちらも「放されたら~」「放されるまで~」系の機械的動作で使用される)のテキストも指定できるので合計4つになります。
また入力値という文字列表示器の表示スタイルプロパティに2を入力しておきます。
この2は「パスワード表示」のことです。
Whileループに移るとイベントストラクチャでイベントを検出するようになります。
各イベントは以下の通りです。
OKボタンの値変更およびキャンセルボタンの値変更は特に説明することはありません。
それぞれのボタンが押された場合の値変更イベントでは、ブール制御器のラベル名を取得してこれをそのまま文字列化し表示させる文字列に連結しています。
また、文字を表示ボタンの値変更イベントでは、先ほども指定した文字列表示器の表示スタイルプロパティに0か2を入力します。
ボタンがTrueの場合には0、つまり「標準表示」であり、Falseの場合には2を入力します。
これで、このボタンが押されている間だけ入力されたパスワードがわかり、それ以外の場合には入力された文字が全てアスタリスクで表示される、というわけです。
なお、このプログラムを他のトップレベルVIから呼び出される一機能として使用する場合には、VIプロパティでダイアログタイプに設定しておくことをオススメします。
キーボード入力も受け付ける場合
上記の例では、画面に表示されたボタンからしかパスワードを入力することができませんでしたが、キーボードからの入力も受け付けられるパスワード入力画面もあります。
イベントストラクチャを使用しているので、キーボード入力をイベントして検出し文字列に追加することが簡単にできます。
ただし、パスワード入力を数字だけに限定する場合、キーボード入力されたのが数字以外である時には文字列に追加しないようにする必要があります。
なお、関数パレットの比較パレットにある、範囲内と強制の関数についてはデフォルトでは下限は含まれていますが上限は含まれません。
含まれない場合には指定する数値を1つずらすなど、正しく指定しないと期待した動作をさせられないので注意してください。
本記事ではパスワード入力用のキーパッドを作成する方法を紹介しました。
今回は数字だけで作りましたが、ブールのラベル名を変えたり少し工夫するだけで英字対応も簡単にできるので、汎用的なキーパッド機能として参考になればうれしいです。
ここまで読んでいただきありがとうございました。
コメント