当ブログに掲載しているサンプルは、すべて利用者の自己責任とします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。
記事そのもののリンクについてはご自由に行っていただいてよいです。
xxのようなサンプルを作って欲しいとかxxxの作り方を教えて欲しいというお問い合わせには応じていません。
このようなお問い合わせは、株式会社エフまでご一報ください。

2019年8月21日水曜日

任意のキーを押したらループを抜ける

皆さん、こんにちは。

気がついたら、もう立秋が来てって、もうすぐ立秋の時期も終わりそうです。
涼しくなってきてホントに秋じゃないか!というくらいです。

そんな中、今日お送りする話題はLotusScriptのtipsです。繰り返し処理をする際、ループ回数は決められないので、キー入力をした時点でループを抜けられるようにしたい。
という要望がありました。
そんなこと可能なのかなぁ?と考えつつ、キー入力を受け入れられればいいんだよなぁ。とNotesのヘルプを見ていました。

すると、SendKeys ステートメント (LotusScript 言語)
というものがありましたので、読んでみたところ、キー入力をプログラムで行いますよ。
というもので、要望とは違っていました。
うーん、残念・・・

そこで、ちょっと考え方を変更。
LotusScriptはVB互換なので、VB関係でそういったことが出来るのではないか?と・・・

ということで検索してみたら、ありました。

GetAsyncKeyState」という関数を利用すると出来るようです。
この関数は、WindowsのUser32.dllの中に含まれているため、LotusScriptで使用する場合、
(Declarations)に
Declare Function GetAsyncKeyState Lib "User32.dll" (Byval vKey As Long) As Long


という一行を追加する必要があります。

ではサンプルです。
Sub Click(Source As Button)
    Const vbKeyF3  = 114
    Dim i As Long
    
    Do While True
        'F3キーで終了
        If GetAsyncKeyState(vbKeyF3) Then
            Exit Do
        End If
        
        Print Cstr(i) & "回目のループ"
        i = i + 1
    Loop
    
    Msgbox "F3キーが押されたのでループを終了しました。"
End Sub


ひたすらループし続けるというものです。
ただそれでは本当にループしているのか分からないので、Notesクライアントのステータスバーに「x回目のループ」というのを表示し続けるようにしてあります。
ループ回数が分かるようにカウントアップしてあります。
Long型なので、2,147,483,647まではカウントしてくれるでしょう(多分w)

ループを抜けるキー入力は「F3」キーです。
ESCだと、この処理の後、文書が閉じられてしまうこともあるので、あえてF3にしてあります。

F3キーのコードは114という数値です。
この数値(定数)は
Keycode 定数
で調べることが出来ますので、他のキーがいいという場合は、こちらを参考にして設定してください。

なお、上記のサイトでは、10進数と16進数がまざって表記されているので計算し間違えないようにしてください。
LotusScriptでは10進数で計算する必要があります。
 (例えば、Homeキーは0x24となっていますので、LotusScriptでは10進数に計算して36とするのが正解です)


工夫次第では、特定の文字列が入力されたらループを抜けさせるなんてことも出来るかもしれません。


ちょっとしたお遊びのような感じもしますが、こういったこともNotesで出来ますよ。
という例でした。


それでは今日はこの辺で・・・





Notes/Dominoで困ったことがあれば、弊社にお問い合わせください。
IBM Championの私が承ります!
お問い合わせはこちらから→Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

0 件のコメント: