« telnetのオートパイロット | トップページ | 書誌:レガシーコード改善ガイド »

2014.03.22

VB系で割り込み処理:DoEvents

少し前に1d20(20面サイコロを1回振る)様のランダム関数について紹介したが、その際に今回初めて知ったステートメントについてメモリ。

結果が一発で出てしまうのではなく、サイコロが転がってどの目が出るのかはらはらするような演出をしようと思ったので、結果を出す前にランダムで途中経過を表示するようにしてみた。
このときにFOR文でこの焦らすループを作成したのだが、テキストボックスに途中経過がどうしても表示されなかった。

For i = 1 To 5
 dieValue.Text = " "
 ret = getVal1d20()
 dieValue.Text = ret & "?"
 j = i * i * 50
 Call Sleep(j)
Next

ret = getVal1d20()
dieValue.Text = ret & "!"
こんな感じで5回ほど別の値をランダムで取得して、表示を行なうのである。
ソースを見ただけだと特に問題はない。
ちゃんとループされるたびにretの値は変更されていることもデバッグで確認できた。
しかし、dieValueテキストボックスには初期値からいきなり、最後の結果だけ出力されてしまった。

これは基本的に、ひとつのプロシージャは始まったら終わりまで頑張り続けるため、VBA内では変更があるのだが、それをフロント側であるExcelなりPowerPointなりに反映することができていないのだ。
そこで登場するのが"DoEvents"。
この関数はOS側にコントロールを渡す、という処理になる。
本来は長いループの中でキー割り込み処理を行なったりするのに使用されるのだが、今回はご承知のとおり、サイコロが転がってる感じを出すために、Officeアプリのテキストボックスを再描画するのに使用した。

For i = 1 To 5
 dieValue.Text = " "
 ret = getVal1d20()
 dieValue.Text = ret & "?"
 DoEvents
 j = i * i * 50
 Call Sleep(j)
Next

ret = getVal1d20()
dieValue.Text = ret & "!"
こんな感じである。
サイコロがだんだん止まっていく感じを出すために、sleep時間は一定ではなく、ループカウンタが進むごとに「ため」の時間が長くなるように調整してある。

|

« telnetのオートパイロット | トップページ | 書誌:レガシーコード改善ガイド »

コメント

先進とプロの技術を持ってプラダコピーバッグ 人気老舗
最新商品は掲載します。
2019新作、大量入荷。
特N品、N品、品質NO1、価格、全日本最低。
豊富な品揃えですので、是非、ご覧ください!毎日、2019年新品新作、掲載します。
最も著名なブランドコピーのルイヴィトンコピー,
日本に一番人気のスーパーコピーヴィトンバッグ,ヴィトン生地コピー,ヴィトンコピー財布..
気のブランドコピー新作は定時に更新し、ご満足に添うようにいたします
スーパーコピーブランド,偽物ブランド,スーパーコピーバッグ,
スーパーコピー財布,ブランドコピー時計,ブランドコピー品
店長お薦めは以下の商品:
クロエスーパーコピー,スーパーコピークロエ,クロエ偽物,クロエコピー

投稿: ブランド品 スーパーコピー 通販 | 2019.04.15 03:42

スーパーコピーブランド時計専門店
日本超人気スーパーコピーブランド時計激安通販専門店
2019年最高品質時計コピー、国際ブランド腕時計コピー、
業界唯一無二.世界一流の高品質ブランドコピー時計。
高品質のロレックス時計コピー、カルティエ時計コピー、IWC時計コピー、
ブライトリング時計コピー、パネライ時計コピー激安販売中
商品の数量は多い、品質はよい。
海外直営店直接買い付け!
製品はされています高品質と低価格で提供!歓迎新旧顧客お願いします!
スーパーコピーブランドN品 https://www.ginzaok.com/bag/prodetail_id_5275.html

投稿: スーパーコピーブランドN品 | 2019.09.30 05:58

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: VB系で割り込み処理:DoEvents:

« telnetのオートパイロット | トップページ | 書誌:レガシーコード改善ガイド »