コピー&ペーストによる入力を制限する
方法
メールアドレスやパスワードなどの項目に対してコピー&ペーストによる入力を制限するにはコントロールの種類によってそれぞれの方法があります。
シングルラインエディットまたはマルチラインエディット
シングルラインエディットまたはマルチラインエディットへのコピー&ペーストによる入力は、コントロールにイベント ID を “pbm_paste” に設定した新規イベントを作成し、イベント内で 1 を返すことで制限することができます。
ペーストによる入力を制限したいエディットコントロールに新規イベントを作成して「イベント」に “pbm_paste” を指定し、下記のように 1 を返すスクリプトを記述することで、貼り付けようとしたテキストが却下されます。
[singlelineedit または multilineedit の “pbm_paste” を設定したユーザーイベント]
// エラーメッセージ表示 MessageBox("エラー", "コピー&ペーストによる入力は禁止されています。") RETURN 1
データウィンドウのカラム
データウィンドウの場合は、”pbm_paste” イベント ID が利用できないため、ペースト操作を行うキーが入力されたかどうかを判定し、ペースト操作が行われた場合に入力前の状態に戻します。
データウィンドウにイベント ID を “pbm_keydown” と指定した新規イベントを作成し、下記のようなスクリプトを記述します。
【例】データウィンドウのカラムへのコピー&ペーストによる入力を制限する
[データウィンドウ の” pbm_dwnkey” を設定したユーザーイベント]
// ペースト操作 ([Ctrl + V] または [Shift + Insert]) が行われた場合 IF (Key = KeyV! AND Keyflags = 2) OR (key = KeyInsert! AND keyflags = 1) THEN // エラーメッセージ表示 MessageBox("エラー", "コピー&ペーストによる入力は禁止されています。") // 元に戻す Undo() // 「元に戻す」処理を元に戻すことを抑制する this.SetText(this.GetText()) END IF
また、上記の処理のみでは右クリックメニューの [貼り付け] を制御できないため、データウィンドウの rbuttondown イベントに RETURN 1 を記述して、右クリックメニューの表示を抑制します。
[データウィンドウの rbuttondown イベント]
RETURN 1
エディットマスク
エディットマスクもデータウィンドウと同様に “pbm_paste” が有効でないため、キー入力により制御します。エディットマスクでは “pbm_keydown” でキー入力を検知します。
また、エディットマスクは Undo 関数が有効でないため、入力値をクリアするなどの処理で代用します。
【例】データウィンドウのカラムへのコピー&ペーストによる入力を制限する
[エディットマスク の “pbm_keydown” を設定したユーザーイベント]
// ペースト操作 ([Ctrl + V] または [Shift + Insert]) が行われた場合 IF (Key = KeyV! AND Keyflags = 2) OR (key = KeyInsert! AND keyflags = 1) THEN // エラーメッセージ表示 MessageBox("エラー", "コピー&ペーストによる入力は禁止されています。") // 値をクリア this.text = "" END IF
データウィンドウと同様に右クリックメニューを制御するため、rbuttondown イベントに RETURN 1 を記述します。
[データウィンドウの rbuttondown イベント]
RETURN 1
Tips情報
プロダクト :PowerBuilder
バージョン :2019R3