HOME BBS A B C D E F G H
1


「BakuJAN活用例」の解・体・親・書

親愛なる貴方のために・・・え?誰?

5.点滅するボタンコントロール

 定まった操作手順があったり、似たようなコントロールが複数存在している場合は、目的のコントロールにフォーカスを移動させてアクティブにしたり、メッセージボックスや音を鳴らしたりすることで、その存在をユーザーに知らせることができます。

 強烈にその存在を知らしめる手段として、コントロールを「点滅」させてみましょう。マクロが中断しないよう[ DoEvents関数 ]を使って、ルーチンをOS(オペレーティング システム)へ渡します。

  •  ★  コントロールの色を変更して、点滅しているように見せる
  •  [ MultiPageコントロール ]には6枚の[ Pageオブジェクト ]があり、それぞれに終了ボタンの[ Btn_End* ]が配置されています。現在アクティブになっているマルチページコントロールの[ MultiPage1.Valueプロパティ ]で位置を判断し、共通の点滅ルーチンを使っています。
     
    点滅させるコマンドボタンコントロールを選択するために、[ If〜Then〜Elseステートメント ]を使いましたが、[ Select Caseステートメント ]を使ったほうが、良い場合があります。次のプロシージャは、先のコードと同じ動作を行います。
     
  •  ★  コントロールの色を変更して、点滅しているように見せる
  • 同じ動作を行うコードでも、簡単に済ませたほうが実行速度も速くなります。

番外5.

 API関数[ GetTickCount ]を使って、経過時間によって情報の時間をカウントダウンすることもできます。メインルーチンの進行状況に拠らない処理を行うことができます。

  •  ★  複数のプロシージャをバックグラウンドで動作させる
  •  このマクロは、ログイン用のパスワードを格納するテキストボックス[ Edt_LogADD ]の値が決定されると[ Exitイベント ]を使って動き出します。[ DoEvents関数 ]によって、バックグラウンドでカウント動作をしているため、このプロシージャの終了を待たないで、他のプロシージャを実行することができます。
     
  •  ★  カウントダウン・カウントアップタイマーを使う
     [ Flg_pw ]は変数で、「フラグ」の役割を持っています。[ Do While〜Loopステートメント ]は、テキストボックスの[ Edt_dmy06 ]で指定した「15秒(正しくは0まで-1ずつカウントダウン)」の間だけループを繰り返し、テキストボックスの[ EdtTime00 ]の年月日と時分秒をリアルタイムで更新していきます。
     
     また、このフラグの値が[ False ]になると、ループから抜けるような判定も行っています。この15秒間は、[ DoEvents関数 ]によって別のルーチンも動かすことができますので、[ Flg_pw ]を[ False ]にするプロシージャによって、15秒の経過を待たずにループを終了させることができます。

 ユーザーフォームは、ステータスバーを持っていませんが、[ UserForm* ]の[ Captionプロパティ ]や[ Labelコントロール ]を使って、現在時刻を更新し続けることもできますね。 

 

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
Microsoft(R) Excel、Microsoft Visual Basicは米国Microsoft Corporationの米国およびその他の国における登録商標または商標で、Microsoft Corporationのガイドラインに従って画面写真を使用しています。